Интересно, какой язык используется в фигурных скобках в разделе правил в файлах yacc / bison, подобных приведенным ниже, и есть ли какая-либо хорошая ссылка на это.
stmts : stmt { $$ = new NBlock(); $$->statements.push_back($<stmt>1); }
| stmts stmt { $1->statements.push_back($<stmt>2); }
;
и в приведенном выше коде, например, почему это написано $<stmt>$2
не просто $2
На самом деле это C-код с пользовательским препроцессором макросов.
yacc / bison заменяет все вхождения $$ кодом C, который ссылается на семантическое значение целевого компонента правила, а $ n семантическим значением элемента правила #n.
Код на самом деле является C (и, соответственно, C ++), а $$ и $ n заменяются самим бизоном на код C, который ссылается на целевое значение правила или семантическое значение элемента правила.
Смотрите эту главу документации бизонов для дополнительной информации.
Других решений пока нет …