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

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

Функции, используемые для реализации Генератора кода

void StrGen(char *) – анализирует полученный код и запускает генерацию, соответствующую данному коду.

void TtlGen(void) – генерирует заголовок программы.

void IntGen(char*) – генерирует объявление переменных типа Integer.

void RealGen(char*) – генерирует объявление переменных типа Real.

void PBASE_Gen(char *) – генерирует оператор PBASE.

void ReadGen(char *) – генерирует оператор ввода.

void WriteGen(char *) – генерирует оператор вывода.

void AsgnGen(char *) – генерирует оператор присваивания.

void EndGen(void) – генерирует конец программы.

2.4 Реализация p-ичной библиотеки

Функции, используемые для реализации р-ичной билиотеки

int ptoi(char *) – переводит р-чное число в целое.

float ptof(char *) – переводит р-чное число в вещественное.

void itop(int,char *) – переводит целое число в р-чное.

void ftop(float,char *) – переводит целое число в p-ичное.

int IntOp(char *) – проверяет операнд на принадлежность ко множеству целых чисел, в случае успеха функция возвращает единицу и ноль в обратном случае.

void ppop(char *) – выводит из стека один операнд.

void ppush(char *) – вставляет в стек один операнд.

void padd(char *, char *) – реализует сложение.

void pnot(char *) – реализует логическое «НЕ».

void por(char *, char *) – реализует логическое «ИЛИ».

void pand(char *, char *) – реализует логическое «И».

void psub(char *, char *) – реализует вычитание.

void pmul(char *, char *) – реализует умножение.

void pmax(char *, char *) – возвращает наибольшее число из двух.

void pabs(char *, char*) – возвращает модуль числа.

void ple(char *, char *) – реализует сравнение «меньше» двух операндов

void pre(char *, char *) – реализует сравнение «больше» двух операндов

void pleq(char *, char *) – реализует сравнение «меньше или равно» двух операндов.

void preq(char *, char *) – реализует сравнение «больше или равно» двух операндов.

void pneq(char *, char *) – реализует сравнение на неравенство двух операндов.

void peq(char *, char *) – реализует сравнение на равенство двух операндов.

void pumin(char *s) – реализует унарный минус.

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

Ошибки, которые может исправлять программа:

  1. Лексический блок:

Текст программы:

PROGRAM;

INT a,b,c,fб;

REAL e;

PBASE(16);

READ(a,c);

b=MAX(a,b)+ABS(a);

f=AND(a,b);

WRITE(b);

END.

Результат работы:

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

1)Текст прграммы:

PROGRAM;

INT a,b,c,f;

REAL e;

PBASE(16);

READ(a,c);

b=MAX(a,b)+ABS(a);

f=AND(a,b)

WRITE(b);

END.

Результат работы:

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

Текст программы:

PROGRAM;

INT a,b,c,f;

REAL e;

PBASE(10);

READ(a,b);

c=MAX(a,b)+ABS(a);

f=AND(a,b)+5;

WRITE(c);

END.

Заключение

В процессе разработки процессора были получены навыки программирования на языке C++. Произошло ознакомление с принципами написания компилятора, состоящего из 3-х блоков (лексического, синтаксического и генератора кода) и р-ичной библиотеки.