Разработка транслятора для перевода программы, написанной на языке Паскаль, в текст программы на языке Си

Дипломная работа - Компьютеры, программирование

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



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

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

Государственное образовательное учреждение высшего профессионального образования

Северо-Кавказский государственный университет

КУРСОВОЙ ПРОЕКТ

по диiиплине Программирование на языке высокого уровня

Вариант 8

Исполнитель:

Заболотнев В.А.

Группа АСОУ-091

Руководитель:

Братченко Н.Ю.

Ставрополь 2011

Оглавление

Введение

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

. Внешняя спецификация

. Описание алгоритма

. Структура программы и описание функций и операторов

. Листинг программы

. Распечатка тестов и результатов

Выводы

Список литературы

Введение

Язык программирования Си, а точнее его развитие Си++, на сегодняшний день является самым распространенным языком программирования. Он завоевал такую славу благодаря своей гибкости и скорости работы. С другой же стороны язык Паскаль был создан для обучения, и не столь гибок и эффективен. Но, несмотря на это, на нем написано множество различных программ. Написание транслятора позволит увеличить рынок потенциальных разработчиков, а так же повысит быстродействие программы. Конечно, после этого программу следует доработать человеком, но вся рутинная работа по переводу программы будет выполнено транслятором.

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

транслятор программа язык паскаль лексический

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

-char

-case

-assign

-rewrite

-write

-файлы

А так же арифметическое выражение (рис. 1.1) и логическое выражение (рис. 1.2)

Транслятор пишется на языке Си. Программа должна обрабатывать код программы на языке Паскаль и за счет эквивалентных операторов генерировать программу на Си.

Арифметическое выражение Ae2:

Рисунок 1.1 - Схема разбора арифметического выражения

Логическое выражение Le2:

Рисунок 1.2 - Схема разбора логического выражения

В качестве задания, приведем таблицу правил перевода операторов.

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

Конструкция на ПаскалеЭквивалентная конструкция на СиОператорные скобки beginтАжend{...}Оператор var var { комментарий 1 } (*комментарий 2*)/*комментарий 1*/ /*комментарий 2*/

Приведем пример перевода программы с языка Си на Паскаль

Таблица 1.2 - Вид программы на Паскале и Си

ПаскальСиvar i,k:integer; m:char; fl:file of char; begin assign(fl,'c:tuc\tuc.txt'); rewrite(fl); Case k of 1 : Begin write('text'); End; 2 : Begin write('text1'); End; 3 : Begin write(fl,'text to file'); End; End; {End Case1} end.#include int i,k; char m; FILE *fl; void main() { fl = fopen("c:tuc\tuc.txt","w"); fcreate(fl); switch(k){ case 1: { printf("text); break; case 2: { printf("text1); break; case 3: { fprintf(fl,"text to file"); break; }/*End Case1*/ }

. Внешняя спецификация

На вход программы будет поступать входной файл. При этом на экран будет выведено сообщение:

Пожалуйста, укажите файл для трансляции:

Имя результирующего файла тоже задается пользователем, таким образом, на экран будет выведено сообщение:

Пожалуйста, введите имя для транслята:

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

Программа будет не требовательна к аппаратному обеспечению. Компьютер оснащенный 500 Гц процессором и оперативной памятью более 32 Мб подойдет.

3. Описание алгоритма

Практически во всех трансляторах (и в компиляторах, и в интерпретаторах) в том или ином виде присутствует большая часть перечисленных ниже процессов:

лексический анализ

синтаксический анализ

семантический анализ

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

оптимизация

генерация объектной программы.

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

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

Поэтому наиболее разумным будет построение однопроходного транслятора. Лексический анализатор читает фрагмент исходного текста, необходимый для получения одной лексемы. После формирования лексемы им осуществляется вызов синтаксического анализатора и передача ему созданной лексемы в качестве параметра. Если синтаксический анализатор может построить очередной элемент промежуточного представления, то он делает это и передает построенный фрагмент генератору кода. В противном случае синтаксический анализатор возвращает управление сканеру, давая, тем самым, понять, что очередная лексема обработана и нужны новые данные.