Декорирование дерева разбора с использованием атрибутной грамматики
Учитывая следующую грамматику атрибута для объявлений типов, мне нужно иметь возможность создать дерево разбора для любой заданной строки, например "A, B: C;", а затем украсить дерево.
Обычно я могу сделать это для простых грамматик атрибутов и когда становится очевидным, что это за атрибуты, но я не могу расшифровать, что out_tab
а также in_tab
являются. Да, это моя домашняя работа, и я не прошу решения, я прошу руководство о том, что означают эти атрибуты, и возможные примеры, чтобы помочь мне.
decl -> ID decl_tail
decl.t := decl_tail.t
decl_tail.in_tab := insert(decl,in_tab, ID.n, decl_tail.t)
decl.out_tab := decl_tail.out_tab
decl_tail -> , decl
decl_tail.t := decl.t
decl.in_tab := decl_tail.in_tab
decl_tail.out_tab := decl.out_tab
decl_tail -> : ID ;
decl_tail.t := ID.n
decl_tail.out_tab := decl_tail.in_tab
1 ответ
Через несколько лет, я надеюсь, вы хорошо закончили свою домашнюю работу:)
о ваших упражнениях:
decl.t
а также decl_tail.t
синтезируются атрибуты, которые копируют имя типа (ID.n
) и передать его для каждого родительского производства в дереве синтаксического анализа
когда производство decl -> ID decl_tail
достигается, in_tab
attributte хранит своего рода список отношений между идентификаторами и типами (неясно, тип in_tab
но мы можем принять список кортежей (identifier; type)
). Этот атрибут наследуется, поэтому список начнет формироваться в самом верхнем производстве (крайний левый идентификатор), и будет продолжаться построение слева направо и заканчиваться в крайнем правом идентификаторе.
Тогда список заканчивается, чтобы быть построенным, когда decl_tail -> : ID;
достигается так синтезированный атрибут (out_tab
) используется для повторного синтеза результата в начальный символ.
этот рисунок был лучшим, что я мог сделать для рисования декорированного дерева и графика зависимости:
Синие стрелки - это синтез t
атрибут, зеленые стрелки, как in
список построен, и красные стрелки показывают, как результат синтезируется в исходный символ