Назначение синтаксических анализаторов.



Задачи синтаксического анализа:

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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!