Изменения

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

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

492 байта добавлено, 13:37, 6 июня 2015
Пример работы с атрибутами в нисходящем разборе
'''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(Node rightSon = E'(temp)) </font> <font color="green">// отдадим атрибут левого сына правому как наследуемый атрибут</font> <font color="blue">res.addChild(rightSon) </font> <font color="green">// подвешиваем правого сына сына</font>
'''break'''
'''default''' :
res.addChild(Node("+"))
res.addChild(T())
<font color="blue">temp = res.children["T"].val ADD.res = ADD(acc, temp)<font color="green">// ADD проведет вычисления из наследуемого атрибута add и атрибута ребенка "T"</font> res.addChild(E'(ADD.res))<font color="green">// результат вычислений будет передан правому ребенку как наследуемый атрибут</font> res.val = res.children["E'"].val</font>
'''break'''
'''case''' '$', ')' :
res.addChild(Node("("))
res.addChild(E())
<font color="blue">rev.val = res.children["E"].val</font>
consume(')')
res.addChild(Node(")"))
497
правок

Навигация