Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые проекты / курса не мои / Ильшатей / spo_sanya / Пояснительная записка_my.doc
Скачиваний:
35
Добавлен:
02.05.2014
Размер:
245.76 Кб
Скачать

2.3 Схема распознавателя

Описанный выше входной язык может быть построен с помощью регулярного языка G({for, do, <, >, =, a, :=, (, ), ;}, {S, F, T, E}, P, S) с правилами P:

SF;

Ffor (T) do F│a:=a

T → F;E;F│;E;F│F;E;;E;

Ea<a│ a>a a=a

Лексемами данного языка являются:

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

  • разделители: открывающая и закрывающая круглые скобки, точка с запятой;

  • знаки арифметических операций и знак присваивания;

  • римские числа.

Под идентификатором понимается произвольная последовательность малых и прописных букв латинского алфавита (от A до Z и от a до z), цифр (от 0 до 9) и знака подчеркивания.

Граф конечного детерминированного автомата, используемого для распознавания входных цепочек языка, представлен на рисунке 1 в приложении Б.

Начальное и конечное состояния при нормальной работе лексического анализатора совпадают (на рисунке состояние "q"). В случае ошибочной входной цепочки автомат попадает в состояние ошибки ERROR. При этом работа автомата останавливается.

Кроме того, типичными для автомата являются состояния ID (переменная) и CONSTANT (константа). Остальные состояния автомата определяются допустимыми для компилятора исходного языка лексемами.

Каждый переход в конечное состояние "q" сообщает о конце текущей входной цепочки. В этом случае производится анализ распознанной цепочки и перезапуск автомата для очередной входной цепочки символов. Заметим также, что возможна повторная обработка некоторых символов входной цепочки символов. Это необходимо в тех случаях, когда символ, приведший к переходу автомата в конечное состояние, является началом следующей цепочки символов.

2.4 Результаты

Текст входной программы:

for ( srt := qwer ; qwa = a ; rt := 12312.2314e1 ) do wet := 12312.2314e1 ;

Построен лексический анализатор на основе конечного автомата. Построенный лексический анализатор позволяет выделять в тексте исходной программы лексемы следующих типов:

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

  • константы;

  • знаки операций;

  • разделители;

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

Таблица 1. Таблица лексем

Строка

Хэш/Символ терминал

Значение

Тип

for

for

for

Ключевое слово

(

(

(

Ключевое слово

srt

a

srt

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

:=

:=

:=

Знак присвоения

qwer

a

qwer

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

;

;

;

Ключевое слово

qwa

a

qwa

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

=

=

=

Условие

a

a

a

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

;

;

;

Ключевое слово

rt

a

rt

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

:=

:=

:=

Знак присвоения

12312.2314e1

a

12312.2314e1

Константа

)

)

)

Ключевое слово

do

do

do

Ключевое слово

wet

a

wet

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

:=

:=

:=

Знак присвоения

12312.2314e1

a

12312.2314e1

Константа

;

;

;

Ключевое слово

Соседние файлы в папке spo_sanya