Рассмотрим такое правило в грамматике для генератора синтаксического анализа семейства LR (например, YACC, BISON и т. д.):
Nonterminal : [ lookahead not in {Terminal1, ..., TerminalN} ] Rule ;
Это обычное правило, за исключением того, что оно имеет ограничение: фраза, созданная с помощью этого правила, не может начинаться с Terminal1, ..., TerminalN
. (Конечно, это правило можно заменить набором обычных правил, но это приведет к увеличению грамматики). Это может быть полезно для разрешения конфликтов.
Вопрос в том, существует ли модификация алгоритма построения LR-таблицы, допускающая такие ограничения? Мне кажется, что такая модификация возможна (как и отношения предшествования).
Конечно, это можно проверить во время выполнения, но я имею в виду проверку во время компиляции (проверка, которая выполняется при построении таблицы синтаксического анализа, как директивы %prec
, %left
, %right
и %nonassoc
в генераторах, совместимых с yacc.)