Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
30.04.2013
Размер:
328.19 Кб
Скачать

23) Компиляторы. Синтаксический анализатор. Методы построения синтаксического дерева вывода.

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

Процесс компиляции состоит из следующих этапов: 1.)Лексический анализ - на этом этапе последовательность символов исходного файла преобразуется в последовательность лексем. 2.)Синтаксический анализ - последовательность лексем преобразуется в семантическое дерево. 3.)Семантический анализ, включающий: оптимизацию - выполняется удаление лишних конструкций и упрощение семантического дерева, генерация кода - семантическое дерево преобразуется в целевой язык.

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

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

Результатом синтаксического анализа является синтаксическое дерево со ссылками на таблицы объектов. В процессе синтаксического анализа также обнаруживаются ошибки, связанные со структурой программы.

Только при отсутствии ошибок возможна работа последующих модулей компилятора.

Методы построения дерева вывода разбиваются на два больших класса ВОСХОДЯЩИЕ и НИСХОДЯЩИЕ - в соответствии с порядком построения дерева pазбоpа. НИСХОДЯЩИЕ(методы свеpху-вниз) начинаются с коpня деpева и пытаются так его наращивать, чтобы последующие узлы дерева соответствовали синтаксису анализируемого выражения. ВОСХОДЯЩИЕ (методы снизу-вверх) начинают с элементов предложения(с "листьев") и отыскивают в грамматике какому понятию они соответствуют, т.е. определяют родительскую вершину для этих элементов, и т.д. пока не приходят к корню дерева. В современных компиляторах применяются как нисходящие, так и восходящие методы.

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

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

Соседние файлы в папке Материал