Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
02.05.2014
Размер:
2.11 Mб
Скачать

2.1. Исходные данные

Для выполнения данной части курсовой работы требуется написать программу, которая выполняет лексический анализ входного текста в соответствии с заданием и порождает таблицу лексем с указанием их типов и значений. Текст на входном языке задан в виде текстового файла. Программа должна выдавать сообщения о наличие во входном тексте ошибок, которые могут быть обнаружены на этапе лексического анализа. Программа должна допускать наличие комментариев неограниченной длины во входном файле.

В соответствии с заданием должны распознаваться:

 ключевые слова : «prog», «end.», «begin», «end», «if», «then», «else», «for», «to», «downto», «do», «and», «or», «not»;

 идентификаторы: любые последовательности латинских символов и цифр; идентификатор должен начинаться с символа;

 константы: двоичное представление числа;

 знаки операций: «=», «<», «>», «–», «+», «*», «/»;

 оператор присваивания: «:=»;

 разделитель: «;»;

 комментарии, заключенные в «{», «}».

    1. Принципы работы лексического анализатора

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

Конечный автомат задается пятеркой:

M=(Q,S,d,q0,F), где:

Q - конечное множество состояний автомата;

S - конечное множество допустимых входных символов;

d – множество функций перехода автомата;

q0ÎQ - начальное состояние автомата;

FQ - множество конечных состояний автомата.

Работа автомата выполняется по тактам. На каждом очередном такте i автомат, находясь в некотором состоянии qiQ, считывает очередной символ vV из входной цепочки символов и изменяет свое состояние на qi+1=(qi,v), после чего указатель в цепочке входных символов передвигается на следующий символ и начинается такт i+1. Так продолжается до тех пор, пока цепочка входных символов не закончится. Конец цепочки символов часто помечают особым символом . Считается также, что перед тактом 1 автомат находится в начальном состоянии q0.

Графически автомат отображается нагруженным однонаправленным графом, в котором вершины представляют состояния, дуги отображают переходы из одного состояния в другое, а символы нагрузки (пометки) дуг соответствуют входному символу. Если функция перехода предусматривает переход из состояния q в q по нескольким символам, то между ними строится одна дуга, которая помечается всеми символами, по которым происходит переход из q в q’.

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

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

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

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

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

    1. Результаты

На основе сравнения методов организации таблиц идентификаторов, проведенного в первой части курсовой работы, выбран метод цепочек. На основе таблицы идентификаторов, заполненной по методу цепочек, организована таблица лексем. На рис. 5 и рис. 6 представлены таблица идентификаторов и таблица лексем, построенные при обработке следующего текстового файла:

prog ttt;

Begin

for j:=p7p downto 1001b do begin

if(t<f)and t then {rt rrrr}

c:=c*111111111b

else 5jhg;

End.

Содержимое файла:

Рис. 5. Результат работы лексического анализатора таблица идентификаторов.

Содержимое файла: Неизвестные лексемы:

Рис. 6. Результат работы лексического анализаторатаблица лексем.

Соседние файлы в папке Курсовая СПО