Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВАЯ СПО.DOC
Скачиваний:
9
Добавлен:
22.11.2019
Размер:
181.25 Кб
Скачать

4. Проект архитектуры

Алгоритм работы:

Работу данного компилятора можно разбить на три основные части:

  1. Генерация таблицы идентификаторов

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

  1. Генерация кода и его запись в некоторый временный файл

На данном этапе из входного файла считывается строка либо же её некоторая часть и определяется класс лексемы (метка, выражение, условие, переход) и в зависимости от этого вызывается соответствующая функция генерации кода

  1. Cоздание окончательного asm файла

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

Работа на данном этапе сводится к тому чтобы добавить в ассемблерный файл объявления дополнительных переменных, дописать процедуру вывода на экран, скопировать код, полученный на втором этапе и записать в конечный файл.

Спецификации функций:

void geuUnicName(char firstFor[5],int n,char uni[ID_NAME_SIZE]);

генерарция уникального имени

SentenseType analyseSentense()

Возвращает какое ключевое слово находится в прочитанной строке

void gotoToAsm()

генерация ассемблерского кода для оператора goto

void labelToAsm()

генерация аасемблерского кода для метки

void ifToAsm()

генерация ассемблерного кода для if

Дерево вызовов

Main

|_genIdTable

| |_readUpTo

| | |_error

| |

| |_addToIdTable

| | |_IdTable.add

| |

| |_ stringComp

| |_error

| |_correctIdentifier

| |_stringComp

|

|_reinterpret

| |_readUpTo

| | |_error

| |

| |_gotoToAsm

| | |_IdTable.find

| | |_error

| |

| |_labelToAsm

| | |_IdTable.find

| | |_error

| |

| |_analyseSentense

| | |_stringComp

| |

| |_ifToAsm

| | |_stringComp

| | |_error

| | |_readUpTo

| | |_genUnicName

| | |_reinterpret

| |

| |_createPolishString

| | |_Stack.push

| | |_Stack.pop

| | |_Stack.getFirst

| | |_error

| |

| |_exprToAsm

| | |_genUnicName

| | |_modifyExpr

| |

| |_writeToAsm

| | |_IdTable.find

| | |_error

| |

| |_stringComp

| |_reinterpret

| |_error

|

|_genEndFile

|_stringComp

|_genUnicName