13

関連する皮肉な文法のチャンク:

var VARIABLE = new RegexBasedTerminal("variable", @"(?-i)\$?\w+");

variable.Rule = VARIABLE;
tag_blk.Rule = html_tag_kw + attr_args_opt + block;
term_simple.Rule = NUMBER | STRING | variable | boolean | "null" | term_list;
term.Rule = term_simple | term_filter;
block.Rule = statement_list | statement | ";";
statement.Rule = tag_blk | directive_blk | term;

問題は、「タグ」と「変数」の両方が同じ場所に現れる可能性があることです。パーサーに変数よりもタグを優先させたいのですが、常に変数を優先します。どうすればそれを変更できますか?

andに変更しようとしましtag_blk.Ruleたが、何の役にも立ちません。パーサーはあいまいさについても文句を言いません。PreferShiftHere() + html_tag_kw + attr_args_opt + block;ImplyPrecedenceHere(-100) + html_tag_kw + attr_args_opt + block;

4

2 に答える 2

2

'tag_blk.Rule' と 'variable.Rule' の順序を変更してみてください。トークナイザーは通常、最初の一致の後に実行され、変数はリストの最初に表示されます。

于 2011-04-18T21:08:56.140 に答える