- •Введение
- •1. Проектирование компилятора
- •1.1 Общие сведения
- •1.2 Грамматика
- •1.3 Интерфейс программы
- •2. Реализация компилятора
- •2.1 Реализация Лексического Блока
- •2.2 Реализация Сиснтаксического Блока
- •2.3 Реализация Генератора Кода
- •2.4 Реализация p-ичной библиотеки
- •Тестирование
- •Лексический блок:
- •2) Синтаксический блок
- •3) Генератор кода
- •Заключение
2. Реализация компилятора
2.1 Реализация Лексического Блока
Функции, используемые для реализации Лексического Блока
void Lex(char *s) – основная функция лексического блока, возвращает в качестве параметра строку, распознает комментарии и запускает функции, разделяющие и анализирующие лексемы.
char *NextLex(char *, char *) – возвращает в качестве параметров строку и перешагивает лексему, возвращает функция указатель на место в строке после проанализированной лексемы. Во второй параметр функция копирует выделенную и перейденную лексему. Фактически функция выделяет лексемы.
int IsDlm(char) – возвращает в качестве параметра символ и анализирует его на предмет того, является этот символ лексемой или нет.
int LexRecogn(char *s) – возвращает в качестве параметра строку и запускает функции, анализирующие выделенную лексему.
int TermRecogn (char *s) – возвращает в качестве параметра строку и анализирует ее на предмет служебного слова, возвращая в случае успеха код лексемы и 0 в случае неудачи.
int IdRecogn(char *str) – возвращает в качестве параметра строку и анализирует ее на предмет идентификатора, возвращая в случае успеха код идентификатора и «0» в случае неудачи.
int ConstRecogn (char *) – возвращает в качестве параметра строку и анализирует ее на предмет константы, возвращая в случае успеха код константы и 0 в случае неудачи.
int DlmRecogn (char *) – возвращает в качестве параметра строку и анализирует ее на принадлежность к символам резделения, возвращая в случае успеха код константы и 0 в случае неудачи.
2.2 Реализация Сиснтаксического Блока
Функции, используемые для реализации Синтаксического блока
void ALARM(void) – сдвигает разбор до первой встреченной точки с запятой.
void DclOp(void) – анализирует оператор объявления.
void End(void) – анализирует наличие конца в программе.
void ExeOp(void) – анализирует исполняемые операторы.
void List(void) – анализирует список идентификаторов в операторе объявления.
void PBASE_Op(void) – анализирует оператор PBASE.
void ReadOp(void) – анализирует оператор ввода.
void WriteOp(void) – анализирует оператор вывода.
void AsgnOp(void) – анализирует оператор присваивания.
void ListIO (void) – анализирует список ввода/вывода.
void Expr(void) – разбирает выражения.
void litem2(void) – разбирает логическую операцию OR.
void litem(void) – разбирает логическую операцию AND.
void lfactor (void) – разбирает операцию сравнения.
void lfactor2(void) – разбирает логическую операцию с AND.
void compare(void) – разбирает операцию сложения или вычитания.
void arithm2(void) – разбирает операцию сложения или вычитания.
void arithm(void) – разбирает операцию умножения.
void factor2(void) –разбирает операцию умножения.
void factor(void) – разбирает операции, самого высокого приоритета(функции,выражения в скобках и унарный минус).
void Snt(void) – заключает в себе функции, анализирующие составляющие программы (заголовок, операторы описания, исполняемые операторы, конец программы).
void pow(void) – разбирает операцию возведения в степень
void pow2(void) – разбирает операцию возведения в степень
void Title(void) –анализирует наличие заголовка, имени программы и точки с запятой после имени программы в программе.
int NextSymb(void) – возвращает следующий код, содержащийся в блокноте, если кончается строка, то функция увеличивает переменную, содержащую номер текущей строки, если в строке, содержащей необходимые коды, есть что-то, то функция вернет коды из этой строки.
struct tbl *FndLit(int) – ищет в таблице констант адрес искомой записи по коду константы.
struct tbl *FndIdCode(int) – ищет в таблице идентификаторов адрес искомой записи по коду идентификатора.