Различают следующие виды лексем:
· идентификаторы;
· ключевые слова;
· числа;
· последовательности знаков;
· особые знаки и их комбинации;
· комментарии.
Каждой лексеме (кроме комментариев) приписывается код. Комментарии и пробелы подавляются. Всем идентификаторам приписывается одинаковый код, также как числам и последовательностям знаков. Для лексического анализа порядок следования лексем не важен. Анализ происходит до тех пор пока не встретится лексема «конец текста».
Пример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. При выходе из сценария выдается закрывающая синтаксическая скобка и название сценария, из которого производится выход.