Декорирование дерева разбора с использованием атрибутной грамматики

Учитывая следующую грамматику атрибута для объявлений типов, мне нужно иметь возможность создать дерево разбора для любой заданной строки, например "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 список построен, и красные стрелки показывают, как результат синтезируется в исходный символ

Другие вопросы по тегам