Разработка транслятора с языка программирования Паскаль на язык C - Курсовая работа

бесплатно 0
4.5 121
Разработка консольного приложения, которое обрабатывает входной файл с расширением .pas и транслирует в выходной файл с расширением .cpp или .txt (по выбору пользователя). Синонимичные операторы языков Паскаль и С. Разработка алгоритма решения задачи.


Аннотация к работе
Теория языков программирования и методы трансляции - это дисциплина, изучение которой позволит создавать полномасштабные трансляторы. Полученные представления и знания будут полезны в других случаях: Понимание особенностей языков программирования (как самого языка, так и транслятора), нюансов выполнения написанных на них программ, вытекающих из принятых традиционных способов организации трансляторов (компиляция и интерпретация, время связывания, статические и динамические свойства). Связь синтаксической и семантической компонент работает на принципах динамического связывания и событийного программирования.В работе требуется рассмотреть такое понятие, как формальная грамматика, объяснить принципы построения грамматики. На основе построенной грамматики разработать транслятор, обрабатывающий следующие конструкции:-char Программа должна обрабатывать код программы на языке Паскаль и за счет эквивалентных операторов генерировать программу на Си.Для более полного понимания сути вещей, введем следующие термины: Терминал (терминальный символ) - объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы»).Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода. Чтобы задать грамматику, требуется задать алфавиты терминалов и нетерминалов, набор правил вывода, а также выделить в множестве нетерминалов начальный. P - набор правил вида: «левая часть» > «правая часть», где: «левая часть» - непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминалВ отличие от порождающих грамматик, аналитическая (распознающая) грамматика задает алгоритм, позволяющий определить, принадлежит ли данное слово языку.По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу): тип 0. неограниченные грамматики - возможны любые правила тип 1. контекстно-зависимые грамматики - левая часть может содержать один нетерминал, окруженный «контекстом» (последовательности символов, в том же виде присутствующие в правой части); сам нетерминал заменяется непустой последовательностью символов в правой части. тип 2. контекстно-свободные грамматики - левая часть состоит из одного нетерминала. тип 3. регулярные грамматики - более простые, эквивалентны конечным автоматам.Чтобы ясно понять принцип работы приложения, можно представить себе англо - русский словарь, где на странице в левом столбце приведены слова на английском языке, а справа дается эквивалент на русском языке. Точно таким же образом представим синонимичные операторы языков Паскаль и С (Таблица 2.2.1): Конструкция на Паскале Эквивалентная конструкция на С Операторные скобки begin…end {...} = file of FILE * case of switch(){Практически во всех трансляторах (и в компиляторах, и в интерпретаторах) в том или ином виде присутствует большая часть перечисленных ниже процессов: лексический анализ синтаксический анализ семантический анализ генерация внутреннего представления программы оптимизация генерация объектной программы. В данной работе не реализуется этап оптимизации и генерации объектной программы, так как это этапы построения компиляторов, а мы лишь касаемся первой части - трансляции. Лексический анализатор читает фрагмент исходного текста, необходимый для получения одной лексемы. Если синтаксический анализатор может построить очередной элемент промежуточного представления, то он делает это и передает построенный фрагмент генератору кода.Программа представляет собой консольное приложение, которое обрабатывает входной файл с расширением .pas (исходный код на языке Паскаль) и транслирует в выходной файл с расширением .cpp или .txt (по выбору пользователя). Var - подпрограмма обработки блока var и определяющие их типы как file или char в соответствии запускаются подпрограммы: File - подпрограмма обработки файловой переменной; Write - подпрограмма обрабатывающая оператор write и в зависимости от его записи запускает подпрограммы: TOFILE - подпрограмма обрабатывающая write при записи в файл; rewrite - подпрограмма обрабатывающая оператор rewrite; case - подпрограмма обрабатывающая оператор case."begin", "end", "var", "char", "boolean", "false", "true", "and", "or", "case", "assign", "write", "rewrite" #define ww_char 4 {WORDLEN = 1; return WORDTYPE = w_char; } else {WORDLEN = 0; return WORDTYPE = w_error; } break; } void put_char(char c){ cfile[outlen] = c; } int TREQU(char * s){ return (!scmp(&pasfile[paspos],s,WORDLEN));Для проверки работоспособности транслятора создадим какую-нибудь простую программу на языке Паскаль и сохраним ее исходный код в файл с расширением .PAS, например, example.PAS (рис. Затем запустим консольное приложение, где укажем имя наше

План
ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

1. ПОСТАНОВКА ЗАДАЧИ

2. АНАЛИЗ, ФОРМАЛИЗОВАННОЕ ОПИСАНИЕ ЗАДАЧИ, ВЫБОР МОДЕЛИ

2.1 Понятие формальной грамматики

2.1.1 Порождающие грамматики

2.1.2 Аналитические грамматики

2.1.3 Типы грамматик

2.2 Описание задачи

2.2.1 Таблица синонимичных операторов

2.3 Средства приложения

3. ВЫБОР ИЛИ РАЗРАБОТКА АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ

4. ПРОЕКТИРОВАНИЕ ОБЩЕЙ СТРУКТУРЫ ПРОГРАММЫ

5. КОДИРОВАНИЕ

6. ОТЛАДКА И ВЕРИФИКАЦИЯ ПРОГРАММЫ

7. ПОЛУЧЕНИЕ РЕЗУЛЬТАТА, ИНТЕРПРЕТАЦИЯ, ПОСЛЕДУЮЩАЯ МОДИФИКАЦИЯ МОДЕЛИ

8. ПУБЛИКАЦИЯ ИЛИ ПЕРЕДАЧА ЗАКАЗЧИКУ РЕЗУЛЬТАТА РАБОТЫ И СОПРОВОЖДЕНИЕ ПРОГРАММЫ

ЗАКЛЮЧЕНИЕ

БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?