---> Рассмотрят ниже грамматику:Синтаксис Направленного Определения для грамматики, чтобы напечатать строку синтаксического анализа
S->SaS|bB
B->AcB| ε
A->dAd| ε
для грамматики, приведенной выше, запись Синтаксиса направленного определения, что печатает строку, которая в настоящее время анализируется и постройте аннотированное дерево разбора для строки «bddcab».
Решение:
Теперь переписывания выше грамматики мы имеем:
S->S1aS2
S->bB
B->AcB1
B-> ε
A->dA1d
A-> ε
(The numbers 1 and 2 following the non-terminal actually denote subscripts. And the subscripts in above grammar denote instances of the non-terminal.)
выше грамматика наряду с семантическими правилами.
Productions Semantic Rules
S->S1aS2 S.val=S1.val+a.lexval + S2.val { print S.val }
S->bB S.val=b.lexval + B.val { Print S.val}
B->AcB1 B.val=A.val+c.lexval + B1.val
B-> ε
A->dA1d A.val=d.lexval + A1.val + d.lexval
A-> ε
** The '+' operator is merely for concatenation.
Это решение в порядке? У меня такое чувство, что это может быть неточно.
Вот аннотированное дерево синтаксического разбора.
Вы правы. Путь к работе! И да, у вас есть проблема с аннотированным деревом. Я только что опирался на синтезированные атрибуты. Нужно ли нам использовать унаследованные атрибуты? Я думаю, в этом случае для использования унаследованных атрибутов вам нужно изменить всю грамматику на не левую рекурсивную. – Jiwan