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

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

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



Вµнта "Edit Box", в которые выводится исходный и преобразованный код. Эти элементы защищены от редактирования пользователем, т.к. по условию курсового проекта исходный код должен читаться из файла и преобразованный код тоже выгружаться в файл.

Также, в окне программы расположены две кнопки "Translate" и "Close". При нажатии на кнопку "Translate" запускается серия подпрограмм, которые осуществляют трансляцию исходного кода. При нажатии на кнопку "Close" окно программы закрывается.

Аппаратные и системные требования для запуска программы: ОС Windows XP, Windows Vista и 7. Процессор не менее 1 ГГц, ОЗУ 256Мб и более. Также необходима установка библиотеки компонентов Microsoft Net.Framework 2.0.

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

Семантика языков программирования изменяется в очень широких пределах. Они отличаются не только по особенностям реализации отдельных операций, но и по парадигмам программирования, определяющим принципиальные различия в методах разработки программ. Специфика реализации операций может касаться как структуры обрабатываемых данных, так и правил обработки одних и тех же типов данных. Большинство языков работают в основном со скалярами, предоставляя для обработки массивов процедуры и функции, написанные программистами. Но даже при выполнении операции сложения двух целых чисел такие языки, как C++ и Паскаль могут вести себя по-разному. Наряду с традиционным процедурным программированием, называемым также императивным, существуют такие парадигмы как функциональное программирование, логическое программирование и объектно-ориентированное программирование. Структура понятий и объектов языков сильно зависит от избранной парадигмы, что также влияет на реализацию транслятора. Даже один и тот же язык может быть реализован нескольким способами. Это связано с тем, что теория формальных грамматик допускает различные методы разбора одних и тех же предложений. В соответствии с этим трансляторы разными способами могут получать один и тот же результат (объектную программу) по первоначальному исходному тексту. Вместе с тем, все языки программирования обладают рядом общих характеристик и параметров. Эта общность определяет и схожие для всех языков принципы организации трансляторов.

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

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

.Для любого языка определяется:

Множество символов, которые можно использовать для записи правильных программ (алфавит), основные элементы.

Множество правильных программ (синтаксис).

"Смысл" каждой правильной программы (семантика).

Язык программирования, как и любая сложная система, определяется через иерархию понятий, задающую взаимосвязи между его элементами. Эти понятия связаны между собой в соответствии с синтаксическими правилами. Каждая из программ, построенная по этим правилам, имеет соответствующую иерархическую структуру.

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

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

Структуру классов программы очень удобно просмотреть в закладке "Class View" среды MS Visual Studio 2008. В этой среде автоматизирован процесс построения диаграммы классов для того, чтобы наглядней можно было проследить наследование (см. рисунок - 5).

Рисунок 5 - Диаграмма классов программы

Назначение подпрограмм:

fRead - данная подпрограмма производит построчное считывание информации из текстового файла. Считанная информация записывается в строковый массив и выводится на экран.

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

fMain - производит поиск и замену операторных скобок, а также вставляет функцию "void main()".

fComment - производит поиск и замену комментариев, в соответствии с синтаксисом языка программирования С++.

fvar - данная подпрограмма производит поиск и обработку объявления переменных типа integer, а также объявления массивов. В данной подпрограмме также реализован поиск и замена оператора присваивания.

fWhile - данная подпрограмма ищет и модифицирует оператор цикла "while", а также основные логические операторы приводит в соответствие с синтаксисом языка С++.

Описание переменных:

CString CodeP[n] - Строковый массив, в который с помощью функции fRead() помещается исходный код на языке Паскаль, который содержится в текстовом файле

CString CodeC[n] - Строковый массив, который содержит результат транслирования исходного кода на языке Паскаль в исходный код на языке С++. Содержимое этого массива построчно выводится в файл.

CString* pCodeC - Указатель на строку в строковом массиве. Передается функциям в качестве аргумента.

CString* pCodeP - Указатель на строку в строковом массиве. Передается функциям в качестве аргумента.