Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы.doc
Скачиваний:
99
Добавлен:
04.11.2018
Размер:
5.13 Mб
Скачать

4.3.2. Лексичекий анализ в сп

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

Итак, при лексическом проходе исходный текст разбивается на базовые элементы языка - лексемы (разделители, ключевые слова, идентификаторы, константы и т.п.) и строится промежуточное представление текста в виде последовательности лексем. При этом игнорируются комментарии и “лишние” символы (пробелы, знаки табуляции, перевод строки). По ходу лексического анализа могут быть выявлены и диагностированы ошибки типа “нераспознаваемая лексема” (например, сочетание символов 1В25А7) или “незакрытые скобки комментария”. В случае отсутствия лексических ошибок на первом проходе формируется выходной файл “Строка лексем”, который состоит из записей различной длины, каждая из которых определяет лексему (содержит её атрибуты). Обязательными атрибутами являются тип лексемы, позиция её первого символа в файле исходного текста и количество символов, которое занимает лексема в исходном тексте. Кроме обязательных атрибутов запись лексемы может содержать дополнительную информацию, которая приведена в таблице 4.1.

Таблица 4.1.

Лексема

Код

Начало

Длина

Целое

Действительное

Индекс

Размер лексемы

Идентификатор

1

+

+

-

-

-

6 байт

Целое число

2

+

+

+

+

-

18 байт

Действительное число

3

+

+

+

+

-

18 байт

Конец файла

5

+

+

-

-

-

6 байт

Терминал (ключевое слово)

6

+

+

-

-

+

8 байт

Разделитель

7

+

+

-

-

+

8 байт

Здесь представлены следующие поля:

Код, Начало, Длина - соответствуют трём обязательным атрибутам,

Целое - представление лексемы в виде целого числа,

Действительное - представление лексемы в виде числа с плавающей точкой,

Индекс - индекс в таблице терминалов или разделителей.

Значком + отмечено присутствие соответствующего поля в записи лексемы данного типа, а - помечает отсутствие поля.