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

2.3. Реализация генератора кода

Процесс работы компилятора можно представить двумя стадиями: синтеза и анализа. Все о чем мы ранее говорили, ЛБ и СБ, это и есть анализ. А вот генерация кода – это синтез.

Основной задачей ГК является преобразование исходного текста программы в машинный код.

  • void StrGen(char *s) – разбор целого текста.

  • void TtlGen(void) – разбор начала программы.

  • void DclGen(char *s) – разбор оператора INTEGER и REAL.

  • void PbaseGen(char *s) – разбор оператора PBASE.

  • void ReadGen(char *s) – разбор оператора READ.

  • void WriteGen(char *s) – разбор оператора WRITE.

  • void AsgnGen(char *str) – генерация выражений.

  • void EndGen(void) – разбор окончания программы.

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

P-ичная библиотека реализована с помощью следующих функций:

  • int intOp(char *s) – проверяет, является ли строка целой;

  • void pumin(char *s) – унарный минус;

  • void padd(char *, char *) – операция сложение;

  • void psub(char *, char *) – операция вычитание;

  • void pint(char *) – целая часть числа;

  • void pmul(char *, char *) – умножение;

  • void pdiv(char *, char *) – деление;

  • void ppow(char *, char *) – возведение в степень;

  • void peq(char *, char *) – операция «равно»;

  • void pneq(char *, char *) – операция «не равно»;

  • void plt(char *, char *) – операция «меньше»;

  • void pgt(char *, char *) – операция «больше»;

  • void pmin(char *, char *) – находит минимум из двух чисел;

  • void ple(char *, char *) – операция «меньше либо равно»;

  • void pge(char *, char *) – операция «больше либо равно»;

  • void pnot(char *) – операция «не»;

  • void pand(char *, char *) – операция «и»;

  • void por(char *, char *) – операция «или»;

  • float ptof(char *s) – перевод из р-ичной строки в вещественную;

  • void itop(int f, char *s) – перевод из целого числа в р-ичную строку;

  • int ptoi(char *s) – перевод из р-ичной строки в целую;

  • void ppush(char *s) – занесение операнда в стэк;

  • void ppop(char *s) – извлечение операнда из стэка;

  • void ftop(float f, char *s) – перевод из вещественного числа в p-ичную строку;

  • pabs(char *) – нахождение модуля числа.

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

Вид компилятора на рис. 2.

Рис.2 – Текстовый редактор

Тест лексического блока без ошибок и с ошибкой на рис. 3.

Рис.3 – Лексический блок

Тест синтаксического блока отображен на рис.4.

Рис.4 – Синтаксический блок

Тест генератора кода отображен на рис.5.

Рис.5 – Генератор кода

Заключение

В процессе работы были закреплены навыки в разработке программного обеспечения, были реализованы лексический, синтаксический блоки, а также генератор кода и р-ичная библиотека.

Список использованной литературы

  1. Либерти, Джесс. Освой самостоятельно C++ за 21 день. – М.: Вильямс, 2001. – 816 c.

  2. Липпман, С. Основы программирования на C++. – М.: Вильямс, 2002. – 256 c.

  3. Секунов, Н.Ю. Самоучитель Visual C++ 6.0. – СПб: BHV, 2004. – 960 c.

  4. Алексанкин В. Начинаем работать в Borland C++ Builder/ Алексанкин В., Елманова Н.// Компьютер-Пресс – 1997 – N 4.

  5. Вахтеров М. Четвертый BORLAND С++ и его окружение/ Вахтеров М., Орлов С., 1994 г.