Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

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

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Изучение устройства и механизма процессов в компиляторах и интерпретаторах. Понятие трансляции как процедуры перевода программного кода с языка Паскаль на язык С++. Описание интерфейса программы и автоматизация процесса построения диаграммы классов.
Краткое сожержание материала:

Размещено на

Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования "Северо-Кавказский Государственный Технический Университет"

Факультет информационных технологий и телекоммуникаций

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

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

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

Вержбо Д. С.

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

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

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

Ставрополь

2011

Оглавление

  • Введение
    • 1. Теоретическая часть
      • 2. Постановка задачи
      • 3. Внешняя спецификация
      • 4. Описание алгоритма
      • 5. Структура программы и описание функций и операторов
      • 6. Листинг программы
      • 7. Описание тестовых прогонов
      • Заключение
      • Список используемой литературы
      • Введение
      • На сегодняшний день, Windows является безусловно лидирующей операционной системой на рынке персональных компьютеров. Поэтому успех современного программиста напрямую зависит от его умения разрабатывать качественные и эффективные приложения Windows. Приложения постоянно усложняются и требуют все большего времени для их создания. Для облегчения программирования Windows-приложений фирмой Microsoft была разработана библиотека MFC (Microsoft Foundation Classes - Базовые Классы Microsoft), которая впервые была представлена на рынке в 1992 г вместе с компилятором Microsoft C/C++ 7.0. Сейчас она представляет собой мощный набор классов C++, которые позволяют программировать приложения на достаточно высоком уровне абстракции, и вместе с тем открывают для опытных программистов легкий доступ к функциям более низкого уровня, что позволяет писать эффективные приложения и полностью использовать все возможности операционной системы.
      • 1. Теоретическая часть
      • Поскольку текст, записанный на языке программирования, непонятен компьютеру, то требуется перевести его на машинный код. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется она специальными программами - трансляторами.
      • Транслятор - обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.
      • В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы.
      • Ассемблер - системная обслуживающая программа, которая преобразует символические конструкции в команды машинного языка. Специфической чертой ассемблеров является то, что они осуществляют дословную трансляцию одной символической команды в одну машинную. Таким образом, язык ассемблера (еще называется автокодом) предназначен для облегчения восприятия системы команд компьютера и ускорения программирования в этой системе команд. Программисту гораздо легче запомнить мнемоническое обозначение машинных команд, чем их двоичный код.
      • Вместе с тем, язык ассемблера, кроме аналогов машинных команд, содержит множество дополнительных директив, облегчающих, в частности, управление ресурсами компьютера, написание повторяющихся фрагментов, построение многомодульных программ. Поэтому выразительность языка намного богаче, чем просто языка символического кодирования, что значительно повышает эффективность программирования.
      • Компилятор - это обслуживающая программа, выполняющая трансляцию на машинный язык программы, записанной на исходном языке программирования. Также как и ассемблер, компилятор обеспечивает преобразование программы с одного языка на другой (чаще всего, в язык конкретного компьютера). Вместе с тем, команды исходного языка значительно отличаются по организации и мощности от команд машинного языка. Существуют языки, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Однако есть и такие языки, в которых каждой команде может соответствовать 100 и более машинных команд. Кроме того, в исходных языках достаточно часто используется строгая типизация данных, осуществляемая через их предварительное описание. Программирование может опираться не на кодирование алгоритма, а на тщательное обдумывание структур данных или классов. Процесс трансляции с таких языков обычно называется компиляцией, а исходные языки обычно относятся к языкам программирования высокого уровня (или высокоуровневым языкам). Абстрагирование языка программирования от системы команд компьютера привело к независимому созданию самых разнообразных языков, ориентированных на решение конкретных задач. Появились языки для научных расчетов, экономических расчетов, доступа к базам данных и другие.
      • Интерпретатор - программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы. Но интерпретатор позволяет начать обработку данных после написания даже одной команды. Это делает процесс разработки и отладки программ более гибким. Кроме того, отсутствие выходного машинного кода позволяет не "захламлять" внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.
      • Синтаксис - совокупность правил некоторого языка, определяющих формирование его элементов. Иначе говоря, это совокупность правил образования семантически значимых последовательностей символов в данном языке. Синтаксис задается с помощью правил, которые описывают понятия некоторого языка. Примерами понятий являются: переменная, выражение, оператор, процедура. Последовательность понятий и их допустимое использование в правилах определяет синтаксически правильные структуры, образующие программы. Именно иерархия объектов, а не то, как они взаимодействуют между собой, определяются через синтаксис. Например, оператор может встречаться только в процедуре, а выражение в операторе, переменная может состоять из имени и необязательных индексов и т.д. Синтаксис не связан с такими явлениями в программе как "переход на несуществующую метку" или "переменная с данным именем не определена". Этим занимается семантика.
      • Семантика - правила и условия, определяющие соотношения между элементами языка и их смысловыми значениями, а также интерпретацию содержательного значения синтаксических конструкций языка. Объекты языка программирования не только размещаются в тексте в соответствии с некоторой иерархией, но и дополнительно связаны между собой посредством других понятий, образующих разнообразные ассоциации. Например, переменная, для которой синтаксис определяет допустимое местоположение только в описаниях и некоторых операторах, обладает определенным типом, может использоваться с ограниченным множеством операций, имеет адрес, размер и должна быть описана до того, как будет использоваться в программе.
      • Синтаксический анализатор - компонента компилятора, осуществляющая проверку исходных операторов на соответствие синтаксическим правилам и семантике данного языка программирования. Несмотря на название, анализатор занимается проверкой и синтаксиса, и семантики. Он состоит из нескольких блоков, каждый из которых решает свои задачи. Более подробно будет рассмотрен при описании структуры транслятора.
      • Любой транслятор выполняет следующие основные задачи:
      • - анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;
      • - генерирует выходную программу (ее часто называют объектной) на языке машинных команд;
      • - распределяет память для объектной программы.
      • 2. Постановка задачи
      • компилятор трансляция программный язык
      • В данном курсовом проекте требуется написать транслятор на языке С++, который будет выполнять перевод программный код на языке Паскаль в программный код на языке С++.
      • По условию задания, требуется, чтобы транслятор переводил следующие операторы:
      • - integer
      • - while le1 do
      • - assign, reset, read
      • - файлы
      • А так же обрабатывал арифметическое (см. рисунок 1) и логическое выражение (см. рисунок 2).
      • Рисунок 1 - Арифметическое выражение ae1
      • Рисунок 2 - Логическое выражение le1
      • Программа должна так же обрабатывать комментарии и операции присваивания, а при встрече незнакомых конструкций выдавать сообщение об ошибке. Между лексемами может быть любое количество пробелов или знаков табуляции, переводов строк и тд. Программа должна реагировать только на верные или ошибочные конструкции. При формировании можно не учитывать правила отступа, но для реализации более удобочитаемых программ этот пункт желателен.
      • Программа будет предоставлять пользователю выбрать входной файл и путь по которому будет записан выходной файл. При этом должна быть предусмотрена обработка ошибок ввода и запрос о повторном вводе пути файла. Для того чтобы упростить понимание поставленной задачи, составим таблицу эквивалентных конструкций.

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

Конструкция на Паскале

Другие файлы:

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

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

Разработка учебного транслятора с упрощенного текстового языка высокого уровня
Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализ...

Разработка транслятора-интерпретатора учебного языка программирования
Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оп...

Учебный транслятор
Разработка учебного транслятора на языке программирования C# в среде объектно-ориентированного программирования Visual Studio 2012. Выделение лексем и...