ВУЗ:
Составители:
6.5 Лексический анализ
Лексический анализ (ЛА)- этап предварительной обработки исходной
программы на лексемы и составные таблицы лексем. Сама же программа пред-
ставляется последовательностью пар – дескрипторов: <дескриптор>::=(<тип
лексемы>, <указатель>), где тип лексемы – код класса лексем, указатель – ссы-
лка на область памяти, где хранится лексема или номер в таблице, куда поме-
щено значение лексемы. Наиболее распространёнными классами лексем являю-
тся: идентификаторы, служебные слова, разделители, константы. Содержимое
таблиц дополняется на этапе семантического анализа исходной программы ге-
нерацией объектного кода программы.
Программа, выполняющая лексический анализ, называется лексическим
анализатором. Последовательность работ лексического анализатора следую-
щая. Сначала, при просмотре слева направо, выделяется последовательность
символов, которая предположительно является лексемой. Затем (или паралле-
льно) проводится идентификация лексемы и проверка правильности её записи.
Это делается, например, путём сравнения с эталонным значением. В случае не-
успешной идентификации формируются сообщения об ошибках. Могут выпол-
няться и другие виды лексического контроля: парность символов и т. п. При
успешной идентификации значение лексемы данного класса (если её там нет).
Выходной поток лексического анализатора поступает на вход синтаксического
анализатора. При построении лексических анализаторов используются форма-
льный математический аппарат – теория регулярных языков и грамматик.
Пример – Вход лексического анализатора
Program Glob;
Var a, b: integer;
Begin
a:=10;
b:=12;
a:=1+b;
writeln(a)
End.
Выход лексического анализатора
N Идентификатор NЗначение
константы
1 Glob 1 10
2 a 2 12
3 b
Последовательность дескрипторов: (10, 1)(30, 1)(20, 1)(10, 6)(30,
2)(20,2)…(30, 3)(20, 9).
Внимание! Здесь используются таблицы:
6.5 Лексический анализ Лексический анализ (ЛА)- этап предварительной обработки исходной программы на лексемы и составные таблицы лексем. Сама же программа пред- ставляется последовательностью пар – дескрипторов: <дескриптор>::=(<тип лексемы>, <указатель>), где тип лексемы – код класса лексем, указатель – ссы- лка на область памяти, где хранится лексема или номер в таблице, куда поме- щено значение лексемы. Наиболее распространёнными классами лексем являю- тся: идентификаторы, служебные слова, разделители, константы. Содержимое таблиц дополняется на этапе семантического анализа исходной программы ге- нерацией объектного кода программы. Программа, выполняющая лексический анализ, называется лексическим анализатором. Последовательность работ лексического анализатора следую- щая. Сначала, при просмотре слева направо, выделяется последовательность символов, которая предположительно является лексемой. Затем (или паралле- льно) проводится идентификация лексемы и проверка правильности её записи. Это делается, например, путём сравнения с эталонным значением. В случае не- успешной идентификации формируются сообщения об ошибках. Могут выпол- няться и другие виды лексического контроля: парность символов и т. п. При успешной идентификации значение лексемы данного класса (если её там нет). Выходной поток лексического анализатора поступает на вход синтаксического анализатора. При построении лексических анализаторов используются форма- льный математический аппарат – теория регулярных языков и грамматик. Пример – Вход лексического анализатора Program Glob; Var a, b: integer; Begin a:=10; b:=12; a:=1+b; writeln(a) End. Выход лексического анализатора N Идентификатор N Значение константы 1 Glob 1 10 2 a 2 12 3 b Последовательность дескрипторов: (10, 1)(30, 1)(20, 1)(10, 6)(30, 2)(20,2)…(30, 3)(20, 9). Внимание! Здесь используются таблицы:
Страницы
- « первая
- ‹ предыдущая
- …
- 98
- 99
- 100
- 101
- 102
- …
- следующая ›
- последняя »