Через несколько лет, я надеюсь, вы хорошо закончили свою домашнюю работу:)
о вашем упражнении:
decl.t
и decl_tail.t
- это синтезированные атрибуты, которые копируют имя типа (ID.n
) и передают его для каждого родительского производства в дереве синтаксического анализа
при достижении производства decl -> ID decl_tail
атрибут in_tab
сохраняет своего рода список взаимосвязей между идентификаторами и типами (неясно, тип in_tab
, но мы можем принять список кортежей (identifier; type)
). Этот атрибут наследуется, поэтому список начнет составляться в самом верхнем производстве (крайний левый идентификатор), продолжит его конструирование слева направо и завершит его в крайнем правом идентификаторе.
Затем список заканчивается для построения, когда достигается decl_tail -> : ID;
, поэтому синтезированный атрибут (out_tab
) используется для повторного синтеза результата с начальным символом.
этот рисунок был лучшим, что я мог сделать для рисования декорированного дерева и графика зависимости:
Синие стрелки - это синтез атрибута t
, зеленые стрелки - как составлен список in
, а красные стрелки - как результат синтезируется в исходный символ