Разработка сканера

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

Министерство образования РФ

Тульский государственный университет

Кафедра АТМ

 

 

 

 

 

Курсовая работа

по курсу

Теория вычислительных процессов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тула 2003

Содержание:

 

Введение……………………………………………………………………3

1.Постановка задачи….……………………………………………………4

1.1. Задание…………………………………………..……………………..4

2.1. Глобальные переменные и необходимые подпрограммы…….….…4

3.1. Диаграмма состояний………………………………..………………..5

2.Текст программы………………………………………………………...7

3. Инструкция пользователю……………………………………………..14

4. Тестовый пример……………………………………………………….14

Вывод………………………………………………………………............14

Список использованных источников……………………………………15

Введение:

 

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

  1. Постановка задачи:

 

1.1. Задание:

 

В данной контрольно-курсовой работе необходимо выполнить лексический анализ текста программы на некотором условном языке программирования. Таким образом требуется разработать сканер, который считывает литеры первоначальной, исходной программы и строит слова, или иначе символы, исходной программы (идентификаторы, служебные слова, одно- или двулитерные разделители).

Символами в языке, для которого необходимо разработать сканер являются:

1.Служебные слова: Цикл …;

Пока … Делать;

Продолжить;

Вещественный;

Двойной.

2.Операторы: +, -, *, /, (, ), =, .

3.Идентификаторы: ( рус.буква | _ ), ( рус.буква | _ | цифра )*.

4.Логические операции: И, ИЛИ, НЕ.

5.Комментарий: {*…*}, {{ -до конца строки.

 

1.2. Глобальные переменные и необходимые подпрограммы:

 

Для работы сканера требуются следующие переменные и подпрограммы:

  1. char c, где c глобальная переменная, значением которой всегда будет сканируемая литера исходной программы.
  2. int Class, где Class содержит целое число, которое характеризует класс литеры, находящейся в с. Будем считать, что если Class = 1 то это цифра, Class = 2 буква, Class = 3 литера {, Class = 4 оператор, Class = 5 недопустимое выражение.
  3. char s[20] массив который будет содержать цепочку литер, составляющих символ.

4. void Getchar(char, int&) функция, задача которой состоит в том, чтобы выбрать следующую литеру исходной программы и поместить ее в с, а класс литера в Class.

5. int LookUp(char* ) - функция которая осуществляет поиск символа, набранного в s, по таблице служебных слов и логических операций. Если символ является служебным словом, то LookUp возвратит 1, если символ это логическая операция то LookUp вернет 2, в противном случае функция вернет 3.

 

1.3. Диаграмма состояний:

 

Метка D используется вместо любой из меток 0, 1, 2, … , 9, т. е. D представляет класс цифр. Это делается для упрощения диаграммы. Аналогично метка L представляет класс буквы А, Б, … , Я, а, б, … , я, а DELIM представляет класс разделителей (операторов). Литера { обрабатывается особым образом.

Некоторые дуги не помечены. Эти дуги будут выбраны, если сканируемая литера не совпадает ни с одной из литер, которыми помечены другие дуги.

Добавим семантику в диаграмму состояний. Введем команду Gc, сокращенно обозначив таки образом функцию void Getchar(char, int&). Под первой дугой, ведущей к состоянию S, записана команда init, которая указывает на необходимость выполнения подготовительных действий и начальных установок, а именно проверка содержимого с, и если там пробел, то повторно вызывается void Getchar(char, int&) до тех пор, пока в с не окажется литера, отличная от пробела если команда init определит конец файла то программа будет завершена. Команда ADD означает, что литера с добавляется к строке s. В состоянии Print int печатается определенное программой целое число, в Print sl служебное слово, в Print log логическая операция, в Print id - идентификатор, в Print com - комментарий, в Print еrror недопустимое выражение. Из любого состояния Print дуги ведут в состояние S до тех пор, пока init не определит конец файла.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 1. Диаграмма состояний с семантическими процедурами.

2. Текст программы:

 

#include

#include

#include

#include

#include

#include

#include

int Prov_itn(); //Проверка на ввод целого положительного числа

int LookUp (char*); //Поиск символа по таблице служебных сл?/p>