Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
17
Добавлен:
02.01.2020
Размер:
108.09 Кб
Скачать

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

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра экономической информатики

Расчетно-графическая работа

по дисциплине «Лингвистическое обеспечение информационных систем»

на тему

«Процессор 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. Проектирование компилятора

    1. Общие сведения

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

Рис 1 – Схема компилятора

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

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

Генератор кода преобразует синтаксически верную последовательность символов в последовательность команд для ЭВМ.

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

  • .lex - результат работы лексического блока;

  • .snt - результат работы синтаксического блока;

  • .cpp - результат работы генератора кода.

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

  • открывается файл с текстом программы на исходном языке, читается его содержимое, из цепочек литер составляется цепочки символов, эти символы записываются в файл с расширением .lex, оба файла закрываются;

  • открывается файл с цепочками символов, производится синтаксическая проверка этих цепочек в соответствии с порождающими правилами грамматики языка, выполняется реорганизация этих цепочек с точки зрения выполняемых ими функций, преобразованные цепочки символов записываются в файл с расширением .snt, оба файла закрываются;

  • открывается файл с расширением .snt, описывающий по сути дела порядок выполняемых в программе действий, производится генерация, т.е. формирование и запись в выходной файл с расширением .cpp этих действий в виде последовательности команд на выходном языке компилятора, оба файла закрываются.