Разработка транслятора на языке Си

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

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



аботав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.

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

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

Синтаксический анализатор - компонента компилятора, осуществляющая проверку исходных операторов на соответствие синтаксическим правилам и семантике данного языка программирования. Несмотря на название, анализатор занимается проверкой и синтаксиса, и семантики. Он состоит из нескольких блоков, каждый из которых решает свои задачи. Более подробно будет рассмотрен при описании структуры транслятора.

Любой транслятор выполняет следующие основные задачи:

анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;

генерирует выходную программу (ее часто называют объектной) на языке машинных команд;

распределяет память для объектной программы.

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

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

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

По условию задания, требуется, чтобы транслятор переводил следующие операторы:

-integer

while le1 do

assign, reset, read

-файлы

А так же обрабатывал арифметическое (см. рисунок 1) и логическое выражение (см. рисунок 2).

Рисунок 1 - Арифметическое выражение ae1

Рисунок 2 - Логическое выражение le1

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

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

Таблица1 - Таблица эквивалентных конструкций

Конструкция на ПаскалеЭквивалентная конструкция на СиОператорные скобки beginтАжend{...}Оператор var var "name": "type"; "name", "name": "type"; "name": array[1..n] of "type";"type" "name", "name"; "type" "name"; "type" "name"[n];Тип переменной "name": integer;int "name";Оператор while "le1" do;while ("le1");{ комментарий 1 } (*комментарий 2*)/*комментарий 1*/ /*комментарий 2*/

Ниже приведен пример работы транслятора с языка программирования Пскаль на язык С++.

Исходный код на языке ПаскальИсходный код на языке C++program Test; var a,b : integer; Arr: array[1..10] of integer; begin a:=0; {Oneline comment} read(a); while a<>10 do begin a:=a+1; read(Arr[a]); end; b:=a*10; (*Multi line comment*) write(a); end.void main(void) int a,b; int Arr [10]; { a=0; /*Oneline comment*/ read(a); while (a!=10) { a=a+1; read(Arr[a]); } b=a*10; /*Multi line comment*/ write(a); }

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

Программа представляет собой исполняющий файл p2c.exe. При запуске программы открывается окно, изображенное на рисунке 3.

Рисунок 3 - Интерфейс программы

Для работы программы необходимо, что бы в папке с исполняющим файлом находился текстовый документ с именем "CodePas.txt", содержащий исходный код на языке программирования Паскаль.

В случае отсутствия соответствующего файла, программа при запске выдаст сообщение об ошибке (см. рисунок 4).

Рисунок 4 - Сообщение об ошибке

В окне программы расположены два элем