Изменения

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

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

1586 байт добавлено, 09:55, 5 июня 2015
Нет описания правки
</wikitex>
==Пример работы с атрибутами в нисходящем разборе==
<wikitex>
Рассмотрим работы с атрибутами на примере $LL(1)$-грамматики арифметических выражений, которая уже была разобрана [[Построение FIRST и FOLLOW#Пример | ранее]] и расширим код [[Предиктивный_синтаксический_анализ | разборщика]] для нее:
 
$
E \to TE' \\
E' \to +TE' \mid \varepsilon \\
T \to FT' \\
T' \to * FT' \mid \varepsilon \\
F \to n \mid (E)
$
 
 
E() : '''int'''
T.val = T()
E'.val = E'(T.val)
'''return''' E'.val
 
E'(acc) : '''int'''
'''switch''' (curToken)
'''case''' '+' :
consume('+')
T.res = T()
ADD.res = ADD(acc, T.val)
E'.val = E'(ADD.res)
'''return''' E'.val
'''break'''
'''case''' '\varepsylon':
'''return''' acc
'''default'''
<font color="red">error</font>("unexpected char")
 
F() : '''int'''
'''switch''' (curToken)
'''case''' n :
consume(n)
F.val = n.val
'''return''' F.val
'''case''' '(' :
consume('(')
F.val = E()
consume(')')
'''return''' F.val
'''default''' :
<font color="red">error</font>("unexpected char")
 
Функции для $T$ и $T'$ строятся аналогично.
 
</wikitex>
==Атрибуты в ANTLR==
497
правок

Навигация