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

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) – ищет в таблице идентификаторов адрес искомой записи по коду идентификатора.