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