Пример готовой курсовой работы по предмету: Программирование
Содержание
Оглавление
ВВЕДЕНИЕ 3
Основные фазы компиляции: 6
1.Лексический анализ 6
2. Синтаксический анализ 7
3. Семантический анализ 7
4. Оптимизация 7
5. Генерация кода 8
Построение компилятора 8
1. Этапы построения компилятора 8
1.
1. Построение лексического анализатора 8
1.2. Построение синтаксического анализатора 11
Описание в виде правил КС-грамматики 12
Описание грамматики в форме Бэкуса-Наура 15
Описание грамматики на языке синтаксических диаграмм 17
Синтаксический анализатор грамматики операторного предшествования 23
Алгоритм функционирования синтаксического анализатора 27
1.3. Построение дерева разбора 28
1.4. Внутреннее представление 28
1.5. Аннотированное дерево 29
2. Сведения о программе 31
2.1 Общие сведения 31
2.2. Функциональное назначение 31
3.3. Логическая структура программы 31
2.4. Используемые технические средства 33
2.5. Вызов и загрузка 33
2.6. Входные данные 33
2.7. Выходные данные 34
3. Протокол выполнения программы 34
ЗАКЛЮЧЕНИЕ 35
СПИСОК ЛИТЕРАТУРЫ 36
ПРИЛОЖЕНИЕ 1 37
ПРИЛОЖЕНИЕ 2 46
ПРИЛОЖЕНИЕ 3 49
ПРИЛОЖЕНИЕ 4 122
ПРИЛОЖЕНИЕ 5 13
Выдержка из текста
Каждая вычислительная машина имеет свой собственный язык программирования — язык команд или машинный язык — и может исполнять программы, записанные только на этом языке. С помощью машинного языка, в принципе, можно описать любой алгоритм, но затраты на программирование будут чрезвычайно велики. Это обусловлено тем, что машинный язык позволяет описывать и обрабатывать лишь примитивные структуры данных — бит, байт, слово. Программирование в машинных кодах требует чрезмерной детализации программы и доступно лишь программистам, хорошо знающим устройство и функционирование ЭВМ. Преодолеть эту трудность и позволили языки высокого уровня (Фортран, ПЛ/1, Паскаль, Си, Ада, и др.) с развитыми структурами данных и средствами их обработки, не зависящими от языка конкретной ЭВМ.
Алгоритмические языки высокого уровня обладают достаточно высокой изобразительной силой, они дают возможность программисту достаточно просто и удобно описывать алгоритмы решения многих прикладных задач. Такое описание называют исходной программой, а язык высокого уровня — входным языком.
Языковым процессором называют программу на машинном языке, по-зволяющую вычислительной машине понимать и выполнять программы на входном языке. Различают два основных типа языковых процессоров: интерпретаторы и трансляторы [2].
Интерпретатор — это программа, которая в качестве входа допускает программу на входном языке и по мере распознавания конструкций входного языка реализует их, выдавая на выходе результаты вычислений, предписанные исходной программой.
Транслятор — это программа, которая допускает на входе исходную программу и порождает на своем выходе программу, функционально-эквивалентную исходной, называемую объектной. Объектная программа записывается на объектном языке. В частном случае, объектным языком может служить машинный язык, и в этом случае полученную на выходе транслятора программу можно сразу же выполнить на ЭВМ (проинтерпретировать).
При этом ЭВМ является интерпретатором объектной программы в машинных кодах. В общем случае объектный язык необязательно должен быть машинным или близким к нему (автокодом).
В качестве объектного языка может служить некоторый промежуточный язык — язык, лежащий между входным и машинным языками.
Если в качестве объектного языка используется промежуточный язык, то возможны два варианта построения транслятора.
Первый вариант — для промежуточного языка имеется (или разрабатывается) другой транслятор — с промежуточного языка на машинный, и он используется в качестве последнего блока проектируемого транслятора.
Второй вариант построения транслятора с использованием промежу-точного языка — построить интерпретатор команд промежуточного языка и использовать его в качестве последнего блока транслятора. Преимущество интерпретаторов проявляется в отладочных и диалоговых трансляторах, обеспечивающих работу пользователя в диалоговом режиме, вплоть до внесений изменений в программу без ее повторной полной перетрансляции.
Интерпретаторы используются также и при эмуляции программ — ис-полнении на технологической машине программ, составленных для другой (объектной) машины) Данный вариант, в частности, используется при отладке на универсальной ЭВМ программ, которые будут выполняться на специализированной ЭВМ.
Транслятор, использующий в качестве входного языка язык, близкий к машинному (автокод или ассемблер), традиционно называют ассемблером. Транслятор для языка высокого уровня называют компилятором.
В построении компиляторов за последние годы достигнуты значитель-ные успехи. Первые компиляторы использовали так называемые прямые методы трансляции — это преимущественно эвристические методы, в которых на основе общей идеи для каждой конструкции языка разрабатывался свой алгоритм перевода в машинный эквивалент [2].
Эти методы были медленные и не носили структурного характера. В основе методики проектирования современных компиляторов лежит композиционный синтаксически-управляемый метод обработки языков. Композиционный в том смысле, что процесс перевода исходной программы в объектную реализуется композицией функционально независимых отображений с явно выделенными входными и выходными структурами данных. Отображения эти строятся из рассмотрения исходной программы, как композиции основных аспектов (уровней) описания входного языка: лексики, синтаксиса, семантики и прагматики, и выявления этих аспектов из исходной программы в ходе ее компиляции.
Перевод программы с одного языка на другой, в общем случае, состоит в изменении алфавита, лексики и синтаксиса языка программы с сохранением ее семантики. Процесс трансляции исходной программы в объектную обычно разбивается на несколько независимых подпроцессов (фаз трансляции), которые реализуются соответствующими блоками транслятора. Удобно считать основными фазами трансляции лексический анализ, синтаксический анализ, семантический анализ и синтез объектной программы. Тем не менее, во многих реальных компиляторах эти фазы разбиваются на несколько подфаз, могут также быть и другие фазы (например, оптимизация объектного кода) [2].
На рис.1 показана упрощенная функциональная модель транслятора.
Список использованной литературы
1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. – СПб.: Питер, 2002.
2. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. – СПб.: КОРОНА принт, 2000.
3. Альфред Ахо, Равви Сети, Джеффри Ульман. Компиляторы. Принципы, технологии, инструменты. – М.: Издательский дом «Вильямс», 2003.