Разработка компиляторов

       

Секция описаний


Секция описаний содержит:

  • описания переменных языка 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

  • определения ассоциативности и приоритетов операций в форме
    1. %left op1 op2 ...
    2. %right op3 op4 ...
    3. %nonassoc op5 op6 ...

    Эти определения должны размещаться в порядке увеличения проиритетов.

    Например,

    %nonassoc PLUS_TO_LC /* операция += */ %left MINUS_LC PLUS_LC /* бинарные операции плюс и минус */ %left TIMES_LC /* операция умножения */



Содержание раздела