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

Программно-методический комплекс для обучения процессу создания компиляторов

82

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

ВОТКИНСКИЙ ФИЛИАЛ ИЖ Г Т У

Кафедра Организации вычислительных процессов и систем управления

К защите допустить “____”_________ 2003 г

Зав. кафедрой ___________

дипломный проект

ТЕМА:

РАСЧЕТНО - ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

Выполнил студент группы Д - 1061 _________ А.И. Кузнецов

Руководитель проекта ст. преподаватель _________

Консультант по профессор, д.т.н. _________

охране труда

Консультант по эко- доцент, к.т.н. _________

номической части

Председатель экс- ст. преподаватель _________

пертной комиссии

Воткинск 2003

Определения

В настоящем дипломном проекте применяются следующие термины с соответствующими определениями.

Ассемблер - программа, которая переводит исходную программу, написанную на автокоде или на языке ассемблера (что, суть, одно и то же), в объектный (исполняемый) код.

БНФ (Бэкуса нормальная форма) - грамматика, состоящая из конечного множества правил, определяющих в совокупности язык программирования.

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

Идентификатор - имя переменной, процедуры, функции, программы.

Инструкция - синтаксическая структура, содержащая ключевые, шумовые слова и конструкции. Бывают простые и структурированные. Простые инструкции не содержат в себе других вложенных инструкций (присваивание, GOTO). Структурированные инструкции могут содержать вложенные инструкции (IF <булево выражение> THEN <безусловный оператор> ELSE <оператор>).

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

Лексема - единица программы, получающаяся в результате лексического анализа, например: for, i, 10, integer, + и т. п.

Лексический анализ - выделение в исходной программе элементарных составляющих: идентификаторов, ограничителей, символов операторов, чисел, ключевых слов, шумовых слов, пробелов, комментариев и т. п.

Литера - любой символ, множество литер составляют лексему.

Литерал - численное или строковое значение, заданное один раз, и не изменяемое в течение программы.

Метод операторного предшествования - восходящий метод грамматического разбора, основан на анализе пар последовательно расположенных операторов исходной программы и решении вопроса о том, какой из них должен выполняться первым.

Нетерминальный символ - имя конструкции, определенной внутри грамматики.

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

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

Семантический анализ - это проверка смысловой правильности конструкции. Например, если мы в выражении используем переменную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа переменной, можно говорит о допустимости операции с данной переменной.

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

Символьное имя - одно из имен, разрешенных в языке, не являющееся терминальным символом.

Синтаксис языка программирования - это правила составления предложений языка из отдельных слов. Такими предложениями являются операции, операторы, определения функций и переменных. Особенностью синтаксиса является принцип вложенности (рекурсивность) правил построения предложений. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя. Например, в определении оператора цикла телом цикла является оператор, частным случаем которого является все тот же оператор цикла.

Синтаксический анализ (грамматический разбор) - формирует синтаксическую единицу - выражение, инструкцию, вызов подпрограммы, декларацию, которые далее обрабатываются семантическим анализатором. Пример структуры: FOR <выражение> TO int DO <body>.

Синтаксический разбор - процесс получения дерева синтаксического разбора на основе заданной грамматики.

Сканер (лексический анализатор) - программа распознавания лексем.

Спецификатор - порядковый номер в таблице, куда занесена лексема.

Терминальный символ - конечный неделимый элемент конструкции языка, является зарезервированным словом (например READ, (, +).

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

  • Содержание
  • Введение 19
  • 1 Анализ предметной области 20
    • 1.1 Компиляторы 20
    • 1.2 Логическая структура компилятора 21
    • 1.3 Лексический анализ. Сканер 24
    • 1.4 Синтаксический и семантический анализ 28
    • 1.5 Грамматики 31
    • 1.6 Формирование промежуточного кода 34
      • Метод четверок 36
    • 1.7 Обоснование создания учебного комплекса 37
    • 1.8 Обзор существующих разработок 38
    • 1.9 Обоснование разработки 39
  • 2 Создание учебной разработки 42
    • 2.1 Краткое описание учебного компилятора 42
    • 2.2 Описание учебного языка 43
    • 2.3 Лексический анализатор LEXAN 46
      • 2.3.1 Таблица терминальных символов 47
      • 2.3.2 Таблица символических имен 48
      • 2.3.3 Таблица литералов 49
      • 2.3.4 Работа сканера 50
      • 2.3.5 Структура листинга 50
      • 2.3.6 Структура выходного файла 50
      • 2.3.7 Примерное задание для студента 52
      • 2.3.8 Описание работы лексического анализатора 53
    • 2.4 Синтаксический анализатор SinAn 56
      • 2.4.1 Таблица переходов 56
      • 2.4.2 Правила работы с таблицей переходов 60
      • 2.4.3 Правила таблицы переходов для написания программы 62
      • 2.4.4 Формируемая таблица переходов. Правила заполнения 65
      • 2.4.5 Правила заполнения формируемой таблицы переходов 66
      • 2.4.6 Построение деревьев 81
      • 2.4.7 Семантический анализ 83
    • 2.5 Формирование промежуточного кода 85
      • Циклы 85
  • 3 Определение трудоемкости по стадиям разработки 89
    • 3.1 Методика расчета 89
    • 3.2 Определение затрат на выполнение проекта по стадиям разработки 92
    • 3.3 Расчет затрат на выполнение проекта по этапам 94
  • 4 Рекомендации по охране труда при работе с учебным комплексом 95
  • Заключение 97
  • Список использованных источников 98
  • Приложения 99

Введение

Каждый преподаватель вправе преподносить материал и обучать студентов по любой из дисциплин так, как он считает нужным.

Преподаватель желает, чтобы знания по преподаваемым наукам лучше усваивались студентами. Часто материал не усваивается из-за того, что нет его наглядного представления, нет материалов, будь то программных или выполненных в виде плакатов, стендов, способствующих более глубокому пониманию.

Для того чтобы создать демонстрационный вспомогательный материал следует наработать необходимую базу. Что занимает много времени и требует определенных усилий и больших временных затрат. В результате могут быть получены плакаты, методические пособия, программные средства (тестовые, обучающие) и др. Некоторые из них можно применять и в отсутствии преподавателя для самообучения, для контроля знаний и т. п.

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

1 Анализ предметной области

1.1 Компиляторы

Транслятор - это программа, которая переводит исходную программу в эквивалентную ей объектную программу. Если объектный язык представляет собой автокод или некоторый машинный язык, то транслятор называется компилятором.

Автокод очень близок к машинному языку; большинство команд автокода - точное символическое представление команд машины.

Ассемблер - это программа, которая переводит исходную программу, написанную на автокоде или на языке ассемблера (что, суть, одно и то же), в объектный (исполняемый) код.

Компиляторы пишутся как на автокоде, так и на языках высокого уровня. Кроме того, существуют и специальные языки конструирования компиляторов - компиляторы компиляторов.

Компилятор компиляторов (КК) - система, позволяющая генерировать компиляторы; на входе системы - множество грамматик, а на выходе, в идеальном случае, - программа. Иногда под КК понимают язык программирования, в котором исходная программа - это описание компилятора некоторого языка, а объектная программа - сам компилятор для этого языка. Исходная программа КК - это просто формализм, служащий для описания компиляторов, содержащий, явно или неявно, описание лексического и синтаксического анализаторов, генератора кодов и других частей создаваемого компилятора. Обычно в КК используется реализация схемы т.н. синтаксически управляемого перевода. Кроме того, некоторые из них представляют собой специальные языки высокого уровня, на которых удобно описывать алгоритмы, используемые при создании компиляторов.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.