Назначение синтаксических анализаторов.
Задачи синтаксического анализа:
1) найти и выделить осн-е синтакс-ие конструкции в тексте входной программы
2) установить тип и проверить правильность каждой синтакс-ой констр-ции
3) представить синтакс-ие констр-ции в виде удобном для дальнейшей генерации текста.
В синтаксическом дереве внутренние узлы соответствуют операциям, а листья представляют собой операнды.
Листья синтаксического дерева связаны с записями таблицы идентификатора.
В том случае, когда синтаксическому дереву соответствует некоторая последовательность операций, говорят о дереве операций.
Дерево операций.
В синтакс-м дереве все вершины соотв-ют операциям, а листья операндам, как правило, листья синтакс-го дерева связаны с записями табл. идентификаторов.
Генерация объектного кода – это перевод компилятора внутреннего представления программы в цепочку символов выходного языка на язык машинных команд.
Генерацию объектного кода можно выполнять после того, как выполнили синтаксический анализ, распределено адресное пространство, проверили на соответствие имен, типов переменных и констант и т.д.
Синтаксически управляемый (СУ) перевод – это основнойметод порождения кода результирующей программы на основании результата синтаксического анализа.
Суть СУ-перевода заключается в следующем: с каждой вершины дерева синтаксического разбора n связываются цепочно некоторого промежуточного кода C(N). Код для вершины N строится путем сцепления в конкретной последовательности кода с C(N) и последовательности кодов, связанных со всеми вершинами, являющимися прямыми потомками N.
|
|
Процесс перевода идет снизу вверх, в строго установленном порядке, определяемом в структуре дерева.
Если в компиляторе фазы синтаксического анализа и генерации кода, объединены в одну, то для таких компиляторов используется термин СУ-компиляция. СУ-компилятор можно реализовать не для всех языков, а СУ-перевод для всех.
34. Способы внутреннего представления программ.
Формы внутреннего представления программы:
-связочные списочные структуры или синтаксическое дерево
-многоадресный код с явно именуемым результатом (тетрады)
-многоадресный код с неявно именуемым результатом (триадой)
-ассемблерный код или машинные команды
-обратная польская запись операции (постфиксная)
Синтакс-ое дерево – это структура предст-ая собой рез-тат работы синт-кого анализ-ра. Она отражает синтаксис конструкции вх языка и явно содержит в себе полную взаимосвязь операций.
Нед-ок: Поск-ку синт-кие деревья предст-ют собой сложные связанные стр-ры, поэтому они не млжет быть тривиальным образом преобразованы в лин-ую послед-ть команд результир-ей проги.
|
|
Многоадресный код с явно именуемым результатом.(Тетрады). Тетрады предст-ют собой запись операций сост-ей из 4 составляющих: <операция>(<операнд1><операнд2><результат>). Тетрады предст-ют собой лин-ю послед-ть команд, выч-ся послед-но одна за другой. Если какой-то из операндов отст-ет, то он м\быть опущен или заменен пустым операндом. Рез-тат выч-ия не м\быть опущен. Поск-ку тетрады предст-ют лин-ую завис-ть, поэтому для них дост-но просто написать тривиальный алгор-м, кот-ый будет преобраз-ть послед-ть тетрад в послед-ть команд. Такая форма предст-ия не зависит от архит-ры выч-ой сис-мы, на кот-ую ориентирована.
Машинно независимая форма
1. Треб больше памяти, чем триады
2) не отражают явно взаимосвязь операций м/у собой
Многоадресный код с неявно именуемым рез-том. (триады)
<операция>(<операнд1><операнд2>)
Триады предст-ют собой записи операций в 3-х состояниях. Особенностью триад яв-ся то, что один или оба операнда м\быть ссылками на другую триаду. В отличии от тетрад здесь треб-ся наличие алг-ма, отвеч-го за распред-ие памяти (для хран-ия промеж-ых рез-ов выч-ия). Триады требуют меньше памяти для своего представления, они явно отражают взаимосвязь операций между собой.
|
|
Преимущества:1) т,к, триады предст собой лин-ю послед-ть команд, то для них достаточно просто написать алг-м преобр-ия послед-ти триад в посл-ть команд рез-щей программы. Здесь необх. исп-ть спец. алг-м, отвеч-щий за распределение памяти, необх-ой для хранения промеж-х рез-в выч-я.
Машинно независимая форма внутр. предст. программ.
Дост-ва: требует меньше памяти для своего предст-ния; явно отражает взаимосвязь операций между собой.
Ассемблерный код и машинные команды.
Машинные команды удобны тем, что при исп. внутр-ее предст-ие прог-мы полностью соответс-ет объектному коду и сложные преобразования не требуются.
Команды ассемблера это форма записи машин-х команд, Здесь треб-ся доп-ные стр-ры для отобр-ия и взаимосвязи операций. Данная форма – машинно зависимая форма прелст-ия программ.
Обратная польская запись операции. Это постфиксная запись операции. По сравнению с индексной записью операции, в польской записи операнды следуют в том же порядке, а знаки операции строго в порядке их выполнения. Для выч-ия исполь-ся стек.
Нед-ок: Поск-ку нам доступна верхушка стека,то выраж-ия не поддаются оптимизации. Выр-ия просматриваются слева-направо и встреч-ся эл-ты, обрабатывающиеся по след правилам:
Алгоритм:
Если встечается знак операнд, то он помещ-ся в стек (становится верхушкой стека)
Если встреч-ся знак унарной операции, то один операнд вытаскивается из стека, опер-я вып-ся и рез-тат занос-ся в верх-ку стека.
Если встеч-ся знак бинарной операции, то из стека вытаскивается 2 операнда, вып-ся операция и рез-т помещается в стек.
Дата добавления: 2018-05-31; просмотров: 451; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!