Лексический и синтаксический анализ

Различают следующие виды лексем:

· идентификаторы;

· ключевые слова;

· числа;

· последовательности знаков;

· особые знаки и их комбинации;

· комментарии.

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

Пример1: Структура лексического анализа.

СЛ – модуль, распознающий следующую лексему;

СЗ – модуль, распознающий следующий знак;

БУ – буква;

ЦИ – цифра.

Допустимы следующие символы:

/* */, —подавляются,

идентификаторы (начинаются с буквы) – код 9,

:= – код 10,

:> – код 11,

: – код 12,

|| – код 13,

; – код 14,

, – код 15,

(– код 16,

) – код 17,

|¾ – код 0.

Если верно, то направо, если неверно, то вниз.

 
 

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

Для синтаксического анализа могут применяться сценарии лексического анализа со следующими изменениями:

· проверки относятся не к последнему знаку, а к коду последней лексемы;

· функция «возврат кода» лексему кодом не заменяет. Параметр служит для различения мест возврата;

· кроме модуля следующей лексемы могут вызываться другие модули, представленные в виде сценария;

· ошибка приводит к остановке анализа.

Пример2: Структура синтаксического анализа.

 
 

Каждый подсценарий анализирует определенные отрезки текста, которые называются синтаксическими единицами: ввод, вывод, имя и т.д. В каждом сценарии определенные лексемы проверяются непосредственно, а для проверки синтаксических единиц вызываются другие сценарии.

 
 

Пример3: Вид подсценария.

Пример4: Программа, написанная на входном языке,анализ которого разобран выше.

СТАРТ СОБРАТЬ

В SD, ZG, BK;

ИЗ SDO, AUSG, AUSZ;

AUSG:=AG(BK:>(SD||ZG));

SDO:=SD||ZG;

AUSZ:=BK:>ZG;

СТОП.

Описанный выше принцип анализа называется LF(1) – метод или метод рекурсивного спуска.

При синтаксическом анализе строится дерево синтаксического разбора, листья которого – лексемы исходного текста, вершины отвечают синтаксическим единицам, каждая из которых состоит из лексем либо из других синтаксических единиц.

Пример5: Построение синтаксического дерева.

Выражение: SDO:=SD||ZG;

 
 

Для машины удобнее одномерное представление дерева в виде свернутой строки.

[[SDO]результат:=[[SD]операнд[||]оператор[ZG]операнд]выражение;]присваивание.

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

1. При вызове модуля СЛ выдается последняя проанализированная лексема.

2. При входе в сценарий выдается открывающая синтаксическая скобка.

3. При выходе из сценария выдается закрывающая синтаксическая скобка и название сценария, из которого производится выход.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: