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

       

Секция правил грамматики


Секция правил грамматики

A: production_body { program_fragment; } ;

Секция грамматических правил состоит из правил, которые записываются следующим образом:

A: production_body;

где A - имя нетерминала, production_body -последовательность нуля или большего количества имен и литералов.

Имена могут быть произвольной длины и содержать буквы, цифры (как обычно, цифра не может быть первой литерой имени), подчеркивания и точки. Литерал состоит из литер, заключенных в апострофы. Как и в языке C, литера обратная косая черта (backslash) используется для задания управляющей последовательности (escape sequence).

Если имеется несколько грамматических правил с одинаковой левой частью, то может использовать литера вертикальная черта для объединения всех правил в одно:

A: production_body_1 | production_body_2 ;

Заметим, что каждое имя, не объявленное как терминал, считается нетерминалом. Каждый нетерминал должен появиться в левой части, хотя бы одного правила. Нетерминал, являющийся левой частью первого правила, по умолчанию считается аксиомой. Вообще говоря, аксиому можно определить в секции объявлений как:

%start axiom.



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