Скачиваний:
10
Добавлен:
01.05.2014
Размер:
527.87 Кб
Скачать

3. 3. Построение диаграммы лексического анализатора.

3. 3. 1. Построение графов конечных автоматов для распознавания лексем.

Здесь S– начальное состояние конечного автомата,F- конечное состояние, соответствующее концу разбора лексемы.

Граф конечного автомата для распознавания лексем «идентификатор» и «ключевое слово».

Буква, Цифра

Id

Буква

S

F

1

Граф конечного автомата для распознавания лексемы «целая константа без знака».

2

Цифра

S

F

C

Цифра

Граф конечного автомата для распознавания лексемы «вещественная константа без знака».

Цифра

Цифра

., e+, e-, e

2

2

Цифра

S

Цифра

C

T

D

F

Графы конечных автоматов для распознавания лексем «однолитерный разделитель» и «двулитерный разделитель». Здесь “Знак1” – включает литеры класса «однолитерные разделители» и литеру «=».

3.3.2. Построение диаграммы лексического анализатора.

Здесь “Пробел” – класс, включающий пробелы, символы табуляции и перевода строки, “Не}” класс, включающий все литеры кроме литеры «}».

3. 3. 3. Спецификации функций лексического анализатора.

  1. Процедура ReadLexem – считывает лексему из входного потока и распознает ее тип.

Вход: входной поток литер текста программы.

Выход: лексема и ее тип.

  1. Процедура GetLexem – в зависимости от типа переданной лексемы вызывает одну из процедур:

  • GetId– для лексем «идентификатор» и «ключевое слово»;

  • GetNum– для лексем «целая константа без знака» и «вещественная константа без знака»;

  • GetLet– для лексем «однолитерный разделитель» и «двулитерный разделитель»;

Вход: лексема и ее тип.

  1. Процедура GetId – если переданная лексема является ключевым словом, определяет ее адрес в таблице ключевых слов и вызывает процедуру WriteToken;

в противном случае ищет запись об этой лексеме в таблице идентификаторов, если находит, то вызывает процедуру WriteToken, иначе вызывает процедуру AddLexem;

Вход: лексема типа «идентификатор» или «ключевое слово».

  1. Процедура GetNum – ищет запись о переданной лексеме (константе) в таблице констант, если находит, то вызывает процедуру WriteToken, иначе вызывает процедуру AddLexem;

Вход: лексема типа «целая константа без знака» или «вещественная константа без знака».

  1. Процедура GetLet – определяет адрес лексемы в таблице разделителей и вызывает процедуру WriteToken;

Вход: лексема типа «однолитерный разделитель» или «двулитерный разделитель»;.

  1. Процедура AddLexem – добавляет запись о лексеме в таблицу лексем заданного класса и вызывает процедуру WriteToken;

Вход: лексема и ее тип.

  1. Процедура WriteToken – формирует токен и записывает его в выходной поток токенов.

Вход: адрес лексемы в соответствующей таблице лексем.

3. 4. Таблицы лексем.

  1. Таблица ключевых слов.

Таблица ключевых слов

имя ключевого слова

  1. Таблица идентификаторов.

Таблица идентификаторов

имя

тип

значение

  1. Таблица констант.

Таблица констант

тип

значение

  1. Таблица разделителей.

Таблица разделителей

разделитель

Таблицы ключевых слов и разделителей – статические, таблицы идентификаторов и констант заполняются в процессе лексического и синтаксического анализа.

Соседние файлы в папке Курсовик (вар 1)