Язык, используемый в файлах bison / yacc

Интересно, какой язык используется в фигурных скобках в разделе правил в файлах yacc / bison, подобных приведенным ниже, и есть ли какая-либо хорошая ссылка на это.

stmts : stmt { $$ = new NBlock(); $$->statements.push_back($<stmt>1); }
| stmts stmt { $1->statements.push_back($<stmt>2); }
;

и в приведенном выше коде, например, почему это написано $<stmt>$2 не просто $2

-1

Решение

На самом деле это C-код с пользовательским препроцессором макросов.

yacc / bison заменяет все вхождения $$ кодом C, который ссылается на семантическое значение целевого компонента правила, а $ n семантическим значением элемента правила #n.

Код на самом деле является C (и, соответственно, C ++), а $$ и $ n заменяются самим бизоном на код C, который ссылается на целевое значение правила или семантическое значение элемента правила.

Смотрите эту главу документации бизонов для дополнительной информации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]