Разработка сканера
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
Министерство образования РФ
Тульский государственный университет
Кафедра АТМ
Курсовая работа
по курсу
Теория вычислительных процессов
Тула 2003
Содержание:
Введение……………………………………………………………………3
1.Постановка задачи….……………………………………………………4
1.1. Задание…………………………………………..……………………..4
2.1. Глобальные переменные и необходимые подпрограммы…….….…4
3.1. Диаграмма состояний………………………………..………………..5
2.Текст программы………………………………………………………...7
3. Инструкция пользователю……………………………………………..14
4. Тестовый пример……………………………………………………….14
Вывод………………………………………………………………............14
Список использованных источников……………………………………15
Введение:
На сегодняшний момент существует огромное количество разнообраз -ных языков программирования. Все они имеют свою историю, свою область применения, и перечислять даже наиболее известные из них не имеет смысла. Но все эти языки построены на основе одних и тех же принципов, основы которых определяет теория формальных языков и грамматик.
- Постановка задачи:
1.1. Задание:
В данной контрольно-курсовой работе необходимо выполнить лексический анализ текста программы на некотором условном языке программирования. Таким образом требуется разработать сканер, который считывает литеры первоначальной, исходной программы и строит слова, или иначе символы, исходной программы (идентификаторы, служебные слова, одно- или двулитерные разделители).
Символами в языке, для которого необходимо разработать сканер являются:
1.Служебные слова: Цикл …;
Пока … Делать;
Продолжить;
Вещественный;
Двойной.
2.Операторы: +, -, *, /, (, ), =, .
3.Идентификаторы: ( рус.буква | _ ), ( рус.буква | _ | цифра )*.
4.Логические операции: И, ИЛИ, НЕ.
5.Комментарий: {*…*}, {{ -до конца строки.
1.2. Глобальные переменные и необходимые подпрограммы:
Для работы сканера требуются следующие переменные и подпрограммы:
- char c, где c глобальная переменная, значением которой всегда будет сканируемая литера исходной программы.
- int Class, где Class содержит целое число, которое характеризует класс литеры, находящейся в с. Будем считать, что если Class = 1 то это цифра, Class = 2 буква, Class = 3 литера {, Class = 4 оператор, Class = 5 недопустимое выражение.
- 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>