Включить / отключить грамматические правила в Yacc / Bison - PullRequest
1 голос
/ 04 февраля 2010

Как видно из заголовка, я хотел бы включить / отключить определенные правила грамматики в файле грамматики yacc или bison.

Есть ли способ сделать это?

1 Ответ

2 голосов
/ 08 февраля 2010

Если вы имеете в виду, что во время компиляции yacc использует стандартный синтаксис комментариев C /* */.

Если вы имеете в виду, что во время выполнения вам все равно придется работать с имеющимися таблицами, поэтому им нужновключите всю грамматику с необязательными фразами.

Так что я бы предложил сделать поддельный символ терминала.Правилам, которые являются необязательными, должен предшествовать поддельный терминал.Вы бы вернули этот терминал, только если бы вы включали дополнительные произведения.

Вариант этого подхода будет включать определение двух версий реального терминала, который действительно существует.Это работает только для грамматик, которые ведут строки с терминалами, но если у вас есть такой ввод, то один терминал может означать один набор правил, а другой терминал может появляться в двух наборах правил, а именно:

T_A dynamic_phrase_in_grammar;

always_on static_phrase_in_grammar;

always_on: T_A | T_B;

Так, чтобы включить динамическую фразу, реальный терминал возвращается как T_A, чтобы отключить его, вернуть как T_B.

...