Транслятор на языке Си для перевода текста программы с языка Паскаль на язык Си (integer, repeat тАж until, procedure, type, record (для type))

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

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

оступления) в интерпретаторах отсутствует фаза оптимизации. А также на последнем этапе ? этапе генерации кода ? машинные команды не записываются в объектный файл, а выполняются.

Кроме того, далеко не все языки программирования допускают построение интерпретаторов, которые выполняли бы исходные программы по мере поступления команд.

Последнее требование предусматривает существование компилятора, разбирающего исходную программу за один проход.

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

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

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

Долгое время интерпретаторы были менее распространены, чем компиляторы, и существовали для относительно простых языков программирования (Basic). Профессиональные средства разработки ПО с высокими требованиями к производительности строились на базе компиляторов.

Такое положение существовало до момента широкого распространения глобальных вычислительных сетей. Как правило, такие сети представляют собой набор ЭВМ различной архитектуры. Из-за этого на первый план выходит требование единообразного выполнения на каждой ЭВМ сети исходной программы.

Многие языки программирования, которые используются в сети Интернет, предусматривают механизм интерпретации исходного текста программы вместо компиляции. В качестве примера интерпретируемого языка широкого распространения выступает HTML (Hypertext Markup Language) язык описания гипертекста. Он лежит в основе функционирования большинства структур сети Интернет. Языки Java и Java Script сочетают функции компиляции и интерпретации. На первом этапе исходная программа компилируется в некоторый двоичный код, который является промежуточным и не зависит от архитектуры целевого компьютера. Этот код передается по сети и выполняется принимающим компьютером в виде интерпретации.

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

Требуется написaть прoграмму-трaнслятор, выполняющую трансляцию с языка программирования Пaскaль нa язык прoгрaммирoвaния Си. Прогрaммa дoлжнa быть нaписaнa нa языке Си и транслировать лишь некоторые конструкции, такие кaк:

- integer

repeat тАж until Le

procedure

type

record (для type)

Так же программа должна обрабатывать арифметическое и логическое выражения, схемы которых представлены ниже.

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

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

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

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

Представим ниже таблицу того, как программа должна переводить конструкции.

Таблица 1.1 - Таблица значений для перевода

Конструкции PascalКонструкции COператoрные скoбки beginтАжеnd{...}Оператoр vаr vаr )

Пример обработки программы

Таблица 1.2 - Пример обработки программы

ПаскальСи(* New Programm *) { Variant 5 } var f:boolean; r: integer; procedure testpr(var a:integer); var i,j:integer; begin repeat r:=i+3*8; r:=r+3*8; until ((a /* New Programm */ /* Variant 5 */ int f; int r; void testpr(int & a) { int i,j; { do { r=i+3*8; r=r+3*8; } while (((a<9&&a<3)||1)); } void main() { f=r==1; }

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

Нa вхoд прoгрaммa будет зaпрaшивaть фaйл с рaзрeшeниeм .pas или любым другим. На экране будет следующее сooбщение:

Выберите файл для трансляции:

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

Произошла ошибка при открытии!

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

Введите имя для записи результата:

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

Произошла ошибка при создании файла!

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

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

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