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

Министерство высшего и профессионального образования Российской Федерации

Новосибирский Государственный Технический Университет

Кафедра программных систем и баз данных

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

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

Вариант № 9

Факультет: Бизнеса

Группа: ФБИ-21

Выполнил:

Проверил: Поздняков Б. С.

Новосибирск, 2014

Оглавление

Введение 3

1. Проектирование компилятора 3

1.1 Общие сведения 3

1.2 Грамматика 5

1.3 Интерфейс программы 6

2. Реализация компилятора 8

2.1 Реализация Лексического Блока 8

2.2 Реализация Сиснтаксического Блока 9

2.3 Реализация Генератора Кода 10

Тестирование 12

14

Заключение 14

Введение

Целью расчетно-графической работы является разработка процессора р-ичной арифметики. В процессе выполнения расчетно-графической работы необходимо разработать грамматику языка и реализовать для нее лексический, синтаксический блоки и генератор кода на языке программирования Си++. Реализуемый процессор все операции выполняет над данными, представленными строками p-ичных символов. Во всех вариантах используются формы представления чисел в виде целого и вещественного. Основание системы счисления p может быть задано от 2 до 16, его значение в разрабатываемом языке определяет функция или оператор PBASE. В выражении используются скобки.

N

п/п

Операции

Функции

9

+ - * / ** > >= < <= <> =

OR NOT

AND MAX ABS

1. Проектирование компилятора

1.1 Общие сведения

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

Синтаксический блок

Лексический блок

Генератор кода

Рис 1.1 Упрощенная структурная схема компилятора

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

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

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

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

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

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

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

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

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

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

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