Зав. кафедрой ___________
  
 ТЕМА:
  РАСЧЕТНО - ПОЯСНИТЕЛЬНАЯ ЗАПИСКА 
  Выполнил студент группы Д – 1061 _________ А.И. Кузнецов
  Руководитель проекта ст. преподаватель _________
  Консультант по профессор, д.т.н. _________
  охране труда
  Консультант по эко- доцент, к.т.н. _________
  номической части
  Председатель экс- ст. преподаватель _________
  пертной комиссии
 Воткинск 2003
 
Определения
 В настоящем дипломном проекте применяются следующие термины с соответствующими определениями.
 Ассемблер - программа, которая переводит исходную программу, написанную на автокоде или на языке ассемблера (что, суть, одно и то же), в объектный (исполняемый) код.
 БНФ (Бэкуса нормальная форма) – грамматика, состоящая из конечного множества правил, определяющих в совокупности язык программирования.
 Выражение – правила получения нового значения с помощью знаков операций и скобок, частным случаем выражения может быть просто одиночный элемент, т.е. константа или переменная.
 Идентификатор – имя переменной, процедуры, функции, программы.
 Инструкция – синтаксическая структура, содержащая ключевые, шумовые слова и конструкции. Бывают простые и структурированные. Простые инструкции не содержат в себе других вложенных инструкций (присваивание, GOTO). Структурированные инструкции могут содержать вложенные инструкции (IF <булево выражение> THEN <безусловный оператор> ELSE<оператор>).
 Компилятор – системная программа, выполняющая преобразование программы, написанной на одном алгоритмическом языке, в программу на языке, близком к машинному, и в определенном смысле эквивалентную первой.
 Лексема – единица программы, получающаяся в результате лексического анализа, например: for, i, 10, integer, + и т. п.
 Лексический анализ – выделение в исходной программе элементарных составляющих: идентификаторов, ограничителей, символов операторов, чисел, ключевых слов, шумовых слов, пробелов, комментариев и т. п.
 Литера – любой символ, множество литер составляют лексему.
 Литерал – численное или строковое значение, заданное один раз, и не изменяемое в течение программы.
 Метод операторного предшествования – восходящий метод грамматического разбора, основан на анализе пар последовательно расположенных операторов исходной программы и решении вопроса о том, какой из них должен выполняться первым.
 Нетерминальный символ – имя конструкции, определенной внутри грамматики.
 Рекурсивный спуск – нисходящий метод грамматического разбора, основан на том, что для каждого нетерминального символа, определенного в грамматике, существует отдельная процедура обработки. При этом в процессе своей работы она может вызывать подобные процедуры
 Семантика языка программирования - это смысл, который закладывается в каждую конструкцию языка.
 Семантический анализ - это проверка смысловой правильности конструкции. Например, если мы в выражении используем переменную, то она должна быть определена ранее по тексту программы, а из этого определения может быть получен ее тип. Исходя из типа переменной, можно говорит о допустимости операции с данной переменной.
 Семантический анализ – в нем обрабатываются структуры, распознанные синтаксическим анализатором, и начинает обретать очертания выполняемый код.
 Символьное имя – одно из имен, разрешенных в языке, не являющееся терминальным символом.
 Синтаксис языка программирования - это правила составления предложений языка из отдельных слов. Такими предложениями являются операции, операторы, определения функций и переменных. Особенностью синтаксиса является принцип вложенности (рекурсивность) правил построения предложений. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя. Например, в определении оператора цикла телом цикла является оператор, частным случаем которого является все тот же оператор цикла.
 Синтаксический анализ (грамматический разбор) – формирует синтаксическую единицу – выражение, инструкцию, вызов подпрограммы, декларацию, которые далее обрабатываются семантическим анализатором. Пример структуры: FOR <выражение> TOintDO <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
  Каждый преподаватель вправе преподносить материал и обучать студентов по любой из дисциплин так, как он считает нужным.
 Преподаватель желает, чтобы знания по преподаваемым наукам лучше усваивались студентами. Часто материал не усваивается из-за того, что нет его наглядного представления, нет материалов, будь то программных или выполненных в виде плакатов, стендов, способствующих более глубокому пониманию.
 Для того чтобы создать демонстрационный вспомогательный материал следует наработать необходимую базу. Что занимает много времени и требует определенных усилий и больших временных затрат. В результате могут быть получены плакаты, методические пособия, программные средства (тестовые, обучающие) и др. Некоторые из них можно применять и в отсутствии преподавателя для самообучения, для контроля знаний и т. п.
 Для проверки знаний часто используют тестовые системы, в которых проверка знаний происходит в интерактивном режиме. Некоторые из них лишь выдают какой-то общий результат, другие определяют, где и на каком этапе возникла ошибка, и сообщают об этом пользователям (используется в компиляторах).
 
  Транслятор - это программа, которая переводит исходную программу в эквивалентную ей объектную программу. Если объектный язык представляет собой автокод или некоторый машинный язык, то транслятор называется компилятором.
 Автокод очень близок к машинному языку; большинство команд автокода - точное символическое представление команд машины.
 Ассемблер - это программа, которая переводит исходную программу, написанную на автокоде или на языке ассемблера (что, суть, одно и то же), в объектный (исполняемый) код.
 Компиляторы пишутся как на автокоде, так и на языках высокого уровня. Кроме того, существуют и специальные языки конструирования компиляторов - компиляторы компиляторов.