- •Расчетно-графическая работа
- •Оглавление
- •Введение
- •Проектирование компилятора
- •Общие сведения
- •Грамматика языка
- •Разработка интерфейса
- •Реализация компилятора
- •2.1. Реализация лексического блока
- •2.2. Реализация синтаксического блока
- •2.3. Реализация генератора кода
- •2.4. Реализация р-ичной библиотеки
- •Тестирование и анализ результатов
- •Заключение
- •Список использованной литературы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра экономической информатики
Расчетно-графическая работа
по дисциплине «Лингвистическое обеспечение информационных систем»
на тему
«Процессор p-ичной арифметики»
Выполнил:
Факультет Бизнеса
Группа: ФБИ-22
Преподаватель: Поздняков Б.С.
Новосибирск 2014
Оглавление
ВВЕДЕНИЕ 3
1.ПРОЕКТИРОВАНИЕ КОМПИЛЯТОРА 4
1.1.Общие сведения 4
1.2.Грамматика языка 5
1.3.Разработка интерфейса 7
2.РЕАЛИЗАЦИЯ КОМПИЛЯТОРА 9
2.1. Реализация лексического блока 9
2.2. Реализация синтаксического блока 10
2.3. Реализация генератора кода 12
2.4. Реализация р-ичной библиотеки 12
3.ТЕСТИРОВАНИЕ И АНАЛИЗ РЕЗУЛЬТАТОВ 14
ЗАКЛЮЧЕНИЕ 21
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 22
Введение
Целью РГЗ является закрепление навыков в области разработки программного обеспечения. В процессе выполнения РГЗ необходимо разработать грамматику языка и реализовать для нее лексический, синтаксический блоки и генератор кода на заданном языке программирования (Си++ Builder 6.0). Реализуемый процессор все операции выполняет над данными, представленными строками p-ичных символов. В разрабатываемом языке есть операторы ввода (READ), вывода (WRITE) и присваивания. Во всех вариантах используются формы представления чисел в виде целого и вещественного. Основание системы счисления p может быть задано от 2 до 16, его значение в разрабатываемом языке определяет оператор задания основания системы счисления PBASE. В выражении используются скобки.
Таблица 1 – Вариант 13
Nп/п |
Операции |
Функции |
13 |
+ - * / >>= <<= <> = AND OR NOT |
POW CEIL FLOOR |
-
Проектирование компилятора
-
Общие сведения
-
Работа компилятора состоит в том, чтобы перевести наборы символов, представляющих программу, написанную на некотором исходном языке программирования, в последовательность машинных команд, выполняющих то, что задумал программист. Взаимодействие основных блоков компилятора представлено ниже.
Рис 1 –Схема компилятора
Программа на исходном языке поступает на вход лексического блока в виде цепочки литер. Назначением лексического блока является преобразование этой цепочки в последовательность символов языка, при этом используются таблицы имен, в которых ищутся понятия языка и в которые заносятся понятия, вводимые программистом. В этом смысле лексическая обработка эквивалентна группировке букв в слова и поиску этих слов в словаре.
Синтаксический блок переводит последовательность символов в другую, более непосредственно отражающую тот порядок, в котором должны выполняться операции в программе. Одновременно выполняется проверка предложений исходного языка на синтаксис в соответствии с правилами грамматики и окончательное заполнение таблиц имен.
Генератор кода преобразует синтаксически верную последовательность символов в последовательность команд для ЭВМ.
Работа компилятора может быть организована различными способами, так же он может содержать еще и другие блоки, например, семантический, оптимизации и т.д. В данной работе использована эта, так называемая, трехпроходная модель компилятора, в которой предполагаем, что каждый блок организован в виде отдельного прохода. Результаты каждого прохода записываются в свой файл, для файлов использованы следующие расширения:
-
.lex - результат работы лексического блока;
-
.snt - результат работы синтаксического блока;
-
.cpp - результат работы генератора кода.
Таким образом, компилятор будет представлять собой программу, в которой последовательно выполняются следующие действия:
-
открывается файл с текстом программы на исходном языке, читается его содержимое, из цепочек литер составляется цепочки символов, эти символы записываются в файл с расширением .lex, оба файла закрываются;
-
открывается файл с цепочками символов, производится синтаксическая проверка этих цепочек в соответствии с порождающими правилами грамматики языка, выполняется реорганизация этих цепочек с точки зрения выполняемых ими функций, преобразованные цепочки символов записываются в файл с расширением .snt, оба файла закрываются;
-
открывается файл с расширением .snt, описывающий по сути дела порядок выполняемых в программе действий, производится генерация, т.е. формирование и запись в выходной файл с расширением .cpp этих действий в виде последовательности команд на выходном языке компилятора, оба файла закрываются.