Соответствующий фрагмент Irony грамматика:
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;
и ImplyPrecedenceHere(-100) + html_tag_kw + attr_args_opt + block;
, но это никому не помогает. Парсер даже не жалуется на двусмысленность.