6

テンプレートエンジンをコンパイルするパーサー/レクサーを作成したいと思います。PHP_ParserGeneratorPHP_LexerGeneratorを使用しています。彼らのドキュメントで説明されているように、私はレクサーを作成し、それが機能しています。しかし、パーサーを書き込もうとしたとき、私はまだ彼らの文書を理解していません。レモンパーサーのドキュメントを読みましたが、コードが機能しません。:(

レクサー/パーサーの「Helloworld」を含むこの例を見つけ、XenForo、vBulletin、Smartyのパーサー/レクサーを読みました。「Helloworld」の例では単純ですが、Xenforoで行われているように文法規則をグループ化しようとするとTAG_OPEN tag_attributes TAG_SELF_CLOSE、パーサーが正しく機能しません。

 /*   0 */ "start ::= in",
 /*   1 */ "in ::= in PLAIN_TEXT",
 /*   2 */ "in ::= in curly",
 /*   3 */ "in ::= in tag",
 /*   4 */ "in ::= in TAG_COMMENT",
 /*   5 */ "in ::= in TAG_CLOSE",
 /*   6 */ "in ::=",
 /*   7 */ "tag ::= TAG_OPEN tag_attributes TAG_SELF_CLOSE",
 /*   8 */ "tag ::= TAG_OPEN tag_attributes TAG_END",
 /*   9 */ "tag_attributes ::= tag_attributes TAG_ATTRIBUTE DOUBLE_QUOTE quoted_inner DOUBLE_QUOTE",
 /*  10 */ "tag_attributes ::= tag_attributes TAG_ATTRIBUTE SINGLE_QUOTE quoted_inner SINGLE_QUOTE",

これはSmartyのyファイルです:smarty_internal_templateparser.y

Xenforoと同じように文法規則をグループ化する方法を理解するのを手伝ってくれませんか。

これはレモンパーサーのドキュメントです

4

0 に答える 0