• Задать вопрос менеджеру

Twitter новости

Обучение письменному иноязычному общению на основе ИКТ http://t.co/IK2NAjncrk

Online-опрос

Антиплагиат онлайнДипломант
Яндекс.Метрика

Теория языков программирования и методы трансляции

Предмет:Информатика
Тип:Курсовая
Объем, листов:26
Word
Получить полную версию работы
Релевантные слова:ap_name, tmpstr, strdupyytext, return, ap_opbr, ap_clbr, программирования, ap_com, код, языка, описание, программы, кода, языке, компилятора
Процент оригинальности:
88 %
Цена:300 руб.
Содержание:

СОДЕРЖАНИЕ. 2

ВВЕДЕНИЕ. 3

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

2. Грамматика языка программирования обработки строк . 7

3. Описание детерминированной автоматной модели синтаксического анализатора. 8

4. Описание структуры системы программирования. 20

5. Руководство пользователя. 21

ЗАКЛЮЧЕНИЕ. 23

БИБЛИОГРАФИЧЕСКИЙ СПИСОК. 24

Приложение. 25

Вступление:

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

Компилятор – это программа, предназначенная для трансляции высокоуровневого языка в абсолютный код или, иногда, в язык ассемблера. Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).

Виды компиляторов:

Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.

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

Диалоговый. См. : диалоговый транслятор.

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

Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.

Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.

Отладочный. Устраняет отдельные виды синтаксических ошибок.

Резидентный. Постоянно находится в основной памяти и доступен для повторного использования многими задачами.

Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.

Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.

Процесс компиляции состоит из следующих этапов:

1. Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.

2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

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

5. Генерация кода. Из промежуточного представления порождается код на целевом языке.

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

Большинство компиляторов переводит программу с некоторого языка высокого уровня программирования в машинный код, который может быть непосредственно выполнен центральным процессором. Как правило, этот код также ориентирован на исполнение в среде конкретной операционной системы, поскольку использует предоставляемые ею возможности (системные вызовы, библиотеки функций).

Некоторые компиляторы (например, Java) переводят программу не в машинный код, а в программу на некотором специально созданном низкоуровневом языке. Такой язык — байт-код — также можно считать языком машинных команд, поскольку он подлежит интерпретации виртуальной машиной. Например, для языка Java это JVM (язык виртуальной машины Java), или так называемый байт-код Java (вслед за ним все промежуточные низкоуровневые языки стали называть байт-кодами).

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

Заключение:

При выполнении данного курсового проекта были использованы утилиты FLEX и BISON. BISON – это генератор лексических анализаторов общего назначения, который преобразует описание контекстно-свободной LLR(1) грамматики в программу на языке C для разбора этой грамматики.

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

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

Список литературы:

1. А. В. Бржезовский, Т. М. Максимова, А. А. Янкелевич. Теория языков программирования и методы трансляции. Средства автоматизации построения синтаксических анализаторов. Методические указания. – СПб. : СПбГУАП, 2006. – 36с.

2. Побегайло А. П. С/С++. – СПб. : БХВ-Петербург, 2006. – 528 с.

3. Пратт Т. Языки программирования. Разработка и реализация. – М. : Мир, 1979. – 574с.

4. ru. wikipedia. org

Бесплатные работы:

Готовые работы:

Рекомендованные документы: