Разработка транслятора на языке Си
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
Вµнта "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 - Указатель на строку в строковом массиве. Передается функциям в качестве аргумента.