Изменения

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

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

179 байт добавлено, 11:45, 4 июня 2015
Нет описания правки
$
В примерах Заметим, что для нисходящего разборщика нужно [[Устранение_левой_рекурсии| устраним устранить левую рекурсию]]:
$
В нашем примере видно, что $.val$ зависит только от детей, то есть это синтезируемый атрибут. Результат умножителя ($MUL.res$) зависит только от атрибутов атрибутов самого умножителя ($MUL.op_1$ и $MUL.op_2$), а значит тоже является синтезируемым(аналогично с сумматором $ADD$).
[[Файл:3mul5add4.png|600px|thumb|center|аннотированное дерево разбора для '''3*5+4|600px''']]
После такого разбора, в $S.val$ будет лежать вычисленное значение выражения. Можно, например сразу напечатать его, добавив правило к нему правило $\{print(S.val)\}$.
Семантическое правило $L.inh = T.type$, связанное с продукцией $D \to TL$, определяет наследуемый атрибут $L.inh$ как тип объявления. Затем приведенные правила распространяют этот тип вниз по дереву разбора с использованием атрибута $L.inh$. Транслирующий символ ENTRY, связанный с продукциями для $L$, вызывает процедуру $addtype$ для добавления типа каждого идентификатора к его записи в таблице символов (по ключу, определяемому атрибутом $entry$).
[[Файл:Real_id1,_id2,_id3.png|600px|center|thumb|аннотированное дерево разбора для 3*5+4'''real id1, id2, id3'''|600px]]
</wikitex>
* Альфред Ахо, Рави Сети, Джеффри Ульман. Компиляторы. Принципы, технологии, инструменты. Издательство Вильямс. Второе издание. 2008. Стр. 383 {{---}} 398.
* [https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Parser+Rules#ParserRules-RuleAttributeDefinitions| ANTLR Documentation - Rule Attribute Definitions]
* [http://www.amazon.com/The-Definitive-ANTLR-4-Reference/dp/1934356999| The Definitive ANTLR 4 Reference]
[[Категория: Методы трансляции]]
496
правок

Навигация