Секция описаний
Секция описаний содержит:
- описания переменных языка C, которые используются при описании грамматики. Эти описания заключаются в скобки %{ … }% , они будут перенесены в текст результирующей программы без изменения.
Например,
%{ int myCount; }%
- определения типов, значения которых возвращаются как значения семантик. Эти типы определяются как элементы объединенного типа
%union { type1 id1; ... }
- объявления терминальных символов (лексических классов, tokens ) грамматики в форме %token lc1 lc2 ...
Например,
%token MINUS_LC PLUS_LC TIMES_LC %token PLUS_TO_LC TIMES_TO_LC
Лексические классы нумеруются либо пользователем, либо самим YACC'ом. В последнем случае лексические классы получают номера, начиная с 257.
- объявления нетерминальных символов грамматики в форме %type <id> name
Например,
%type <id1> conditional_stmt
- определения ассоциативности и приоритетов операций в форме
- %left op1 op2 ...
- %right op3 op4 ...
- %nonassoc op5 op6 ...
Эти определения должны размещаться в порядке увеличения проиритетов.
Например,
%nonassoc PLUS_TO_LC /* операция += */ %left MINUS_LC PLUS_LC /* бинарные операции плюс и минус */ %left TIMES_LC /* операция умножения */
Содержание раздела