Изменения

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

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

728 байт добавлено, 13:31, 6 июня 2015
Пример работы с атрибутами в нисходящем разборе
В данной реализации рекурсивные функции от нетерминалов получают на вход(если необходимо) наследуемые атрибуты узла и возвращают вершины дерева разбора, в атрибутах которых записан результат вычислений соответствующего подвыражения. Как мы видим, $val$ - синтезируемый атрибут, $acc$ - наследуемый атрибут, $ADD$ - транслирующий символ. Синим подсвечены строки, отвечающие за работы с атрибутами.
 
Здесь <tex>\mathtt{Node}</tex> {{---}} структура следующего вида:
'''struct''' Node
children : '''map<String, Node>'''
val : '''string''' <font color="green">// атрибут нетерминала</font>
'''function''' addChild('''Node''') <font color="green">// функция, подвешивающая поддерево к данному узлу</font>
 
E() : '''Node'''
'''switch''' (curToken)
'''case''' n, '(' :
res.addChild(T()) <font color="green">// подвешиваем левого сына</font> <font color="blue">temp = res.children[T].val</font> <font color="green">// атрибут левого сына</font> <font color="blue">res.addChild(E'(temp)) </font> <font color="green">// отдадим атрибут левого сына правому как наследуемый атрибут</font>
'''break'''
'''default''' :
497
правок

Навигация