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

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

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

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

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

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

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

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

на тему

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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