Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


КУРСОВАЯ РАБОТА



 

1 Афанасьев А.Н. Формальные языки и грамматики: Учебное пособие. – Ульяновск: УлГТУ, 1997. – 84с.

2 Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструменты.: Пер. с англ. – М.: Изд. дом «Вильямс», 2001. – 768с.

3 Братчиков И.Л. Синтаксис языков программирования / Под ред. С.С. Лаврова. – М.: Наука, 1975. - 262с.

4 Вайнгартен Ф. Трансляция языков программирования / Под ред. Мартынюка В.В.- М.: Мир, 1977. - 192с.

5 Вильямс А. Системное программирование в Windows 2000 для профессионалов. – СПб.: Питер, 2001. – 624с.

6 Волкова И.А., Руденко Т.В. Формальные языки и грамматики. Элементы теории трансляции. – М.: Диалог-МГУ, 1999. – 62с.

7 Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. – СПб: Питер, 2001. – 736с.

8 Грис Д. Конструирование компиляторов для цифровых вычислительных машин: Пер. с англ. – М.: Мир, 1975. – 544с.

9 Дворянкин А.И. Основы трансляции: Учебное пособие. – Волгоград: ВолгГТУ, 1999. – 80с.

10 Жаков В.И., Коровинский В.В., Фильчаков В.В. Синтаксический анализ и генерация кода. – СПб.: ГААП, 1993. – 26с.

11 Ишакова Е.Н. Теория формальных языков, грамматик и автоматов: Методические указания к лабораторному практикуму. – Оренбург: ГОУ ВПО ОГУ, 2004. – 54с.

12 Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. – СПб.: Корона принт, 2000. – 256с.

13 Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов. - М.: Мир, 1979. - 654с.

14 Пантелеева И.А. Методы трансляции: Конспект лекций. – Новосибирск: Изд-во НГТУ, 1998. – Ч.2. – 51с.

15 Пратт Т., Зелковиц М. Языки программирования: разработка и реализация / Под ред. А. Матросова. – СПб: Питер, 2002. – 688с.

16 Рейуорд-Смит В. Теория формальных языков. Вводный курс: Пер. с англ. – М.: Радио и связь, 1988. – 128с.

17 Серебряков В.И. Лекции по конструированию компиляторов. – М.: МГУ, 1997. – 171с.

18 Соколов А.П. Системы программирования: теория, методы, алгоритмы: Учеб. пособие. – М.: Финансы и статистика, 2004. – 320с.

19 Федоров В.В. Основы построения трансляторов: Учебное пособие. – Обнинск: ИАТЭ, 1995. – 105с.

20 Хантер Р. Проектирование и конструирование компиляторов: Пер. с англ. – М.: Финансы и статистика, 1984. – 232с.



Приложение А

(обязательное)

Пример оформления титульного листа курсовой работы

 

Министерство образования и науки Российской Федерации

 

Федеральное агентство образования

 

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

“ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”

 

Факультет информационных технологий

 

Кафедра программного обеспечения вычислительной техники

и автоматизированных систем

 

 

КУРСОВАЯ РАБОТА

(16 пт)

по теории языков программирования и методов трансляции

 

Разработка компилятора модельного языка

(16 пт)

Пояснительная записка

 

ГОУ ОГУ 220400.5404.13 ПЗ

                                                                 Руководитель работы

                                                                      _______________Ишакова Е.Н.

                                                                      "____"______________2004г.

                                                                      Исполнитель

                                                             студент гр. 01ПО1                                                                               _______________Ковальчук С.В.

                                                               "____"______________2004г.

 

Оренбург 2004

           Примечание – Остальные надписи размером 14 пт.



Приложение Б

(обязательное)

Правила присвоения классификационного кода

 

Приложение В

(обязательное)

Пример оформления содержания курсовой работы

 



Содержание

Введение........................................................................................... 3

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

2 Формальная модель задачи.......................................................... 5

3 Спецификация основных процедур и функций........................... 8

3.1 Лексический анализатор............................................................ 8

3.2 Синтаксический анализатор...................................................... 9

3.3 Семантический анализатор...................................................... 10

3.4 Генерации внутреннего представления программы............... 11

3.5 Интерпретатор программы..................................................... 12

4 Структурная организация данных............................................. 13

4.1 Спецификация входной информации...................................... 13

4.2 Спецификация выходной информации................................... 14

5 Разработка алгоритма решения задачи..................................... 15

5.1 Укрупненная схема алгоритма программного средства........ 16

5.2 Детальная разработка алгоритмов отдельных подзадач....... 18

6 Установка и эксплуатация программного средства.................. 20

7 Работа с программным средством............................................. 21

Заключение..................................................................................... 24

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

Приложение А – Текст программы............................................... 26

Приложение Б – Контрольный пример........................................ 31

 

 



Алгоритм решения задачи

 

Укрупненная схема алгоритма программного средства представлена на рисунке 6.1.



Приложение Г

(обязательное)

Пример оформления приложений курсовой работы





Приложение А

(обязательное)

Контрольный пример

Результаты работы лексического анализатора представлены на рисунке А.1.

 

 

Рисунок А.1 – Выходные данные лексического анализатора

26


Приложение Б

(обязательное)



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

 



La.h

 

#include <grids.hpp>

#include <fstream.h>

#include <string.h>

#include <vector>

#include <string>

 

using std::string;

using std::vector;

 

// структура, описывающая лексему

struct par{

long n; // номер таблицы

long k; // номер в таблице

};

 

typedef vector<string> wordtable;

typedef vector<par> parvec;

// состояния диаграммы

enum states {SH, // начало

                               SI, // идентификатор

                               SN, // число (до точки)

                               SND, // дробная часть

                               SNS, // знак порядка

                               SNP, // порядок

                               SO, // ограничитель

                               SC, // комментарий

                               SL, // <

                               SG, // >

                               SS, // :

                               SDT, // .

                               SER, // ошибка

                               SV}; // выход

 

class LA;

 

// класс сканер

class Scanner{

public:

   LA * A; // связанный лексический анализатор

   string instr; // входная строка с исходным текстом

unsigned long pos; // позиция в строке

   long z; // найденная позиция в таблице

   long errcode; // код ошибки

   char cur; // текущий символ

   string S; // строка, формирующая лексему

   states State; // состояние дмаграммы

       

 

int Scan(); // метод-сканер

   char gc(){ // считывание следующего символа

       if (pos >= instr.size()){

           State = SV;

           return cur;

       }

       return (cur = instr[pos++]);

   }

   bool letter(){ // проверка символа на букву

       return isalpha(cur);

   }

   bool digit(){ // проверка символа на цифру

       return isdigit(cur);

   }

   long look(wordtable * t); // поиск лексемы S в таблице t

   long put(wordtable * t){ // помещение лексемы в таблицу

       z = look(t);

       if (z >= 0)

           return z;

       t->push_back(S);

       return (z = (t->size() - 1));

   }

   void out(long n, long z);

};

 

// класс лексический анализатор

class LA{

public:

   wordtable R; // таблица служебных слов

   wordtable D; // таблица разделителей

   wordtable I; // таблица идентификаторов

   wordtable N; // таблица чисел

   parvec res; // вектор пар чисел - результат лексического анализа

     

Scanner S; // сканер

   void InTables(char *fname); // ввод таблиц R и D из файла

   void OutTable(TStringGrid * G, wordtable * X); // вывод таблицы в StringGrid

   int Scan(string s); // сканирование

   string ErrorMsg(int code); // сообщение об ошибке по коду

   string GetResult(); // сформировать результат в виде строки

   void OutTables(char *fname); // вывод таблиц I и N в файл

   void OutResult(char *fname); // вывод результата в файл

};

 



La.cpp

 


#include "la.h"

 

// перевод строки в нижний регистр

void tolower(string &s){

for (unsigned long i = 0; i < s.length(); i++)

   s[i] = tolower(s[i]);

}

 

int Scanner::Scan(){

par t;

pos = 0;

State = SH;

errcode = 0;

gc();

while(State != SV && State != SER){

   while(State != SV && cur != '\n' && isspace(cur))

       gc();

   if (State == SV)

       break;

   if (letter()){ // буква

       State = SI;

       S = cur;

       for(gc(); State != SV && (letter() || digit()); gc())

           S += cur;

       //tolower(S);

       look(&A->R);

       if (z >= 0)

           out(0, z);

       else {

           put(&A->I);

           out(3, z);

       }

   } else if (digit()){ //число

       State = SN;

       S = cur;

       for(gc(); State != SV && (digit() || strchr("ABCDEFabcdef", cur)); gc())

           S += cur;

       if (strchr("HhDdOoBb", cur)){

           S += cur;

           gc();

        } else if (cur == '.'){ // дробная часть

       State = SND;

           S += cur;

           for(gc(); State != SV && digit(); gc())

               S += cur;

           if (cur == 'e' || cur == 'E'){ // порядок

                     S += cur;

               gc();

               State = SNS;

               if (cur == '+' || cur == '-'){

                   S += cur;

                   gc();

               }

 

 

               State = SNP;

               for(; State != SV && digit(); gc())

                   S += cur;

           }

       } else if ((digit() || cur == '+' || cur == '-') && (S[S.length() - 1] == 'e' || S[S.length() - 1] == 'E')){ // порядок

             State = SNP;

           for(gc(); State != SV && digit(); gc())

               S += cur;

       }

       put(&A->N);

       out(2, z);

   } else if (cur == '{'){ // комментарий

       State = SC;

        for(gc(); State != SV && cur != '}'; gc());

       if (State == SV){

           errcode = 1;

           break;

       }

       gc();

   } else if (cur == '<'){ // < <= <>

       State = SL;

       gc();

       if (cur == '=' || cur == '>'){

           S = "<";

           S += cur;

           gc();

       }

       else

           S = "<";

       look(&A->D);

       out(1, z);

   } else if (cur == '>'){ // > >=

       State = SG;

       gc();

       if (cur == '='){

           S = ">=";

           gc();

       }

       else

           S = ">";

       look(&A->D);

       out(1, z);

   } else if (cur == ':'){ // : :=

       State = SS;

       gc();

       if (cur == '='){

           S = ":=";

           gc();

       }

       else

           S = ":";

       look(&A->D);

       out(1, z);

 

32

 


Поделиться:



Последнее изменение этой страницы: 2019-06-09; Просмотров: 176; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.106 с.)
Главная | Случайная страница | Обратная связь