Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
13. ТЯП-госы.doc
Скачиваний:
5
Добавлен:
26.08.2019
Размер:
502.27 Кб
Скачать

Триады – многоадресный код с неявно именуемым результатом.

<операция>(<операнд1>,<операнд2>)

Один или оба операнда могут быть ссылками на другую триаду, если в качестве операнда данной триады выступает рез-т выполнения другой триады.

A:=B*C+D-B*10

1. * (B,C) 2. + (^1,D) 3. * (B,10) 4. – (^2,^3) 5. := (A,^4)

Преимущества триад:

1) Триады представляют собой линейн последоват-сть. Поэтому для них несложно написать алгоритм, который будет преобразовывать последоват-сть триад в последоват-сть команд результирующей программы. Однако здесь треб-ся алгоритм, отвечающ за распределение памяти, необходимой для хранения промежуточных результатов вычисления, так как временные переменные для этой цели не используются. В этом отличие триад от тетрад.

2) Триады представляют собой машинно-независимую форму внутреннего представления программы,

3) Триады требуют меньше памяти для своего представления, чем тетрады,

4) Триады явно отражают взаимосвязь операций между собой, что делает их применение удобным.

Косвенные триады - представление трехадресного кода состоит в использовании списка указателей на триады вместо списка самих триад.

1. ^11 2. ^12 3. ^13 4. ^14 5. ^15

11. *(B,C) 12. +(^1,D) 13. * (B, 10) 14. –(^2,^3) 15. := (A,^4)

Синтаксические деревья

Синтаксическое дерево (дерево операций) - это структура, представляющая собой результат работы синтаксического анализатора. Она отражает синтаксис конструкций входного языка и явно содержит в себе полную взаимосвязь операций.

Дерево разбора. Преобразование дерева разбора в дерево операций

В синтаксическом дереве внутренние узлы (вершины) соответствуют операциям, а листья представляют собой операнды. Как правило, листья синтаксического дерева связаны с записями в таблице идентификаторов. Структура синтаксиче­ского дерева отражает синтаксис языка программирования, на котором написана исходная программа.

Дерево операций можно непосредственно построить из дерева вывода, порожденного синтаксическим анализатором. Для этого достаточно исключить из де­рева вывода цепочки нетерминальных символов, а также узлы, не несущие семантической (смысловой) нагрузки при генерации кода. Примером таких узлов могут служить различные скобки, которые меняют порядок выполнения операций и операторов, но после построения дерева никакой смысловой нагрузки не несут, так как им не соответствует никакой объектный код.

Алгоритм преобразования дерева вывода в дерево операций:

1). Если в дереве больше не содержится узлов, помеченных нетерминальны­ми символами, то выполнение алгоритма завершено, иначе — перейти к шагу 2.

2). Выбрать крайний левый узел дерева, помеченный нетерминальным символом грамматики и сделать его текущим. Перейти к шагу 3.

3). Если текущий узел имеет только один нижележащий узел, то текущий узел необходимо удалить из дерева, а связанный с ним узел присоединить к узлу вышележащего уровня (исключить из дерева цепочку) и вернуться к шагу 1;

иначе — перейти к шагу 4.

4). Если текущий узел имеет нижележащий узел (лист дерева), помеченный терминальным символом, который не несет семантической нагрузки, тогда этот лист нужно удалить из дерева и вернуться к шагу 3; иначе — перейти к шагу 5.

5). Если текущий узел имеет один нижележащий узел (лист дерева), помеченный терминальным символом, обозначающим знак операции, а остальные узлы помечены как операнды, то узел, помеченный знаком операции, надо уда­лить из дерева, текущий узел пометить этим знаком операции и перейти к шагу 1; иначе — перейти к шагу 6.

6). Если среди нижележащих узлов для текущего узла есть узлы, помечен­ные нетерминальными символами грамматики то необходимо выбрать крайний левый среди этих узлов, сделать его текущим узлом перейти к шагу 3; иначе — выполнение алгоритма завершено.

Дерево операций является формой внутреннего представления программы, ко­торой удобно пользоваться на этапах синтаксического разбора, семантического анализа и подготовки к генерации кода, когда еще нет необходимости работать непосредственно с кодами команд результирующей программы.

Преимущества внутреннего представления в виде дерева операций:

1) четко отражает связь всех операций между собой, поэтому его удобно использовать для преобразований, связанных с перестановкой и переупорядочиванием операций без изменений конечного результата;

2) синтаксические деревья – это машинно-независимая форма внутреннего представления программы.

Недостаток синтаксических деревьев заключается в том, что они представляют собой сложные связанные структуры, а поэтому не могут быть тривиальным образом преобразованы в линейную последовательность команд результирующей программы. Тем не менее, они удобны при работе с внутренним представлением программы на тех этапах, когда нет необходимости непосредственно обращаться к командам результирующей программы.

Синтаксические деревья могут быть преобразованы в другие формы внутреннего представления программы, представляющие собой линейные списки, с учетом семантики входного языка. Эти преобразования выполняются на основе принципов СУ-компиляции.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]