Изменения

Перейти к: навигация, поиск

Атрибутные транслирующие грамматики

9 байт убрано, 17:00, 11 февраля 2019
Атрибуты в ANTLR
==Атрибуты в ANTLR==
Общедоступный генератора генератор разборщиков ANTLR<ref>[http://www.antlr.org/ ANTLR {{---}} Parser generator]</ref> поддерживает синтаксически управляемое определение.
Рассмотрим для той же грамматики арифметических выражений с операторами <tex>+,\ *</tex>, скобками и выводом результата выражениая выражения пример на ANTLR.
grammar Expression;
Стартовый нетерминал печатает результат:
s : expr { System.out.println($expr.valueval); };
В продукции для нетерминала <code>expr</code> определяется возвращаемое значение (<code>['''int''' valueval]</code>). Обращение к этому атрибуту имеет вид <code>$expr.value</code>. В фигурных скобках записаны семантические правила.
Разобранные нетерминалы возвращают результат, вычисленный в поддереве(<code>returns [int val]</code>) как свой синтезируемый атрибут, процесс вычисления которого описан в фигурных скобках <code>{ $val = $exprP.val; }</code>.
term '''returns''' ['''int''' val]
: fact termP[$fact.val] { $val = $termpPtermP.val; }
;
Анонимный участник

Навигация