Разработка сканера
Int LookUp (char*) — функция которая осуществляет поиск символа, набранного в s, по таблице служебных слов и логических операций. Если символ является служебным словом, то LookUp возвратит 1, если символ это логическая операция то LookUp вернет 2, в противном случае функция вернет 3. Int Class, где Class содержит целое число, которое характеризует класс литеры, находящейся в с. Будем считать, что… Читать ещё >
Разработка сканера (реферат, курсовая, диплом, контрольная)
Министерство образования РФ Тульский государственный университет Кафедра АТМ
Курсовая работа
по курсу
«Теория вычислительных процессов»
Тула — 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*); //Поиск символа по таблице служебных слов
void Getchar (char, int&);//Определяет класс литеры
void main ()
{
char s[20], f_in[10]="in.txt", f_out[10], c, k, a;
int Class, Quit=0,Q=0,x, i, n, j=0;
char _ []="———————————-" ,
_cel[]=".Целое :" ,
_op []=".Оператор :" ,
_kom[]=".Комментарий :" ,
_id []=".Идентификатор :" ,
_sl []=".Служебное слово :" ,
_log[]=".Логическая операция :" ,
_err[]=".Недопустимое выражение:" ,
__ []="———————————-" ;
clrscr ();
fstream inFile, outFile;
cout<<" t———————————n" ;
cout<<" t¦ 1. Ввод с клавиатуры.¦n" ;
cout<<" t¦ 2. Ввод с файла. ¦n" ;
cout<<" tL———————————n" ;
do
cout<<" t Ваш выбор:" ;
n=Prov_itn ();
if (n<1 while (1);
if (n==1)
{
inFile.open (f_in, ios: trunc |ios:in | ios: out);
cout<<" nВводите текст (в конце текста введите !):n" ;
for (;(a=getchar ())≠'!';)