Ирония: Как дать KeyTerm приоритет над переменной?

Соответствующий фрагмент иронии грамматики:

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;

Проблема в том, что и «тег», и «переменная» могут появляться в одном месте. Я хочу, чтобы мой синтаксический анализатор предпочитал тег переменной, но он всегда предпочитает переменную. Как я могу это изменить?

Я попытался изменить tag_blk.Rule на PreferShiftHere () + html_tag_kw + attr_args_opt + block; и ImplyPrecedence (-11147131] ImplyPrecedence html_tag_kw + attr_args_opt + block; , но это никому не помогает. Парсер даже не жалуется на двусмысленность.

13
задан mpen 5 August 2011 в 20:54
поделиться