Скачиваний:
16
Добавлен:
01.05.2014
Размер:
381.95 Кб
Скачать

Управляющая таблица подграмматики оператора вывода

МАТРИЦА ПРЕДШЕСТВОВАНИЯ :

---- ( количество элементов : 9 * 9 ) :

=========================================

I IOUT!LO !( !) !; !, !prn!aex!EpsI

=========================================

IOUTI ! ! ! ! ! ! ! ! I

I---I---+---+---+---+---+---+---+---+---I

ILO I ! ! ! = ! ! = ! ! ! I

I---I---+---+---+---+---+---+---+---+---I

I( I !=< ! ! ! ! ! ! < ! I

I---I---+---+---+---+---+---+---+---+---I

I) I ! ! ! ! = ! ! ! ! I

I---I---+---+---+---+---+---+---+---+---I

I; I ! ! ! ! ! ! ! ! > I

I---I---+---+---+---+---+---+---+---+---I

I, I ! ! ! ! ! ! ! = ! I

I---I---+---+---+---+---+---+---+---+---I

IprnI ! ! = ! ! ! ! ! ! I

I---I---+---+---+---+---+---+---+---+---I

IaexI ! ! ! > ! ! > ! ! ! I

I---I---+---+---+---+---+---+---+---+---I

I + I ! ! ! ! ! ! < ! ! I

=========================================

ФУНКЦИИ ТИПА "ПЕРЕНОС-СВЕРТКА" :

---- функция "перенос" ( количество элементов : 10 * 7 ) :

====================================

I I( !) !; !, !prn!aex!EpsI

====================================

IOUT IОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I

I------I---+---+---+---+---+---+---I

ILO IОШ !ПЕР!ОШ !ПЕР!ОШ !ОШ !ОШ I

I------I---+---+---+---+---+---+---I

I( IОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ I

I------I---+---+---+---+---+---+---I

I) IОШ !ОШ !ПЕР!ОШ !ОШ !ОШ !ОШ I

I------I---+---+---+---+---+---+---I

I; IОШ !ОШ !ОШ !ОШ !ОШ !ОШ ! C I

I------I---+---+---+---+---+---+---I

I, IОШ !ОШ !ОШ !ОШ !ОШ !ПЕР!ОШ I

I------I---+---+---+---+---+---+---I

Iprn IПЕР!ОШ !ОШ !ОШ !ОШ !ОШ !ОШ I

I------I---+---+---+---+---+---+---I

Iaex IОШ ! C !ОШ ! C !ОШ !ОШ !ОШ I

I------I---+---+---+---+---+---+---I

I + IОШ !ОШ !ОШ !ОШ !ПЕР!ОШ !ОШ I

I------I---+---+---+---+---+---+---I

I + OUTIОШ !ОШ !ОШ !ОШ !ОШ !ОШ !ДОПI

====================================

---- функция "свертка" ( количество элементов : 9 * 3 ) :

=================

I I1 !2 !3 I

=================

IOUT IОШ!ОШ!ОШI

I------I--+--+--I

ILO IОШ!ОШ!ОШI

I------I--+--+--I

I( IОШ!2 !3 I

I------I--+--+--I

I) IОШ!ОШ!ОШI

I------I--+--+--I

I; IОШ!ОШ!ОШI

I------I--+--+--I

I, IОШ!ОШ!ОШI

I------I--+--+--I

Iprn IОШ!ОШ!ОШI

I------I--+--+--I

Iaex IОШ!ОШ!ОШI

I------I--+--+--I

I + I1 !ОШ!ОШI

=================

--- правила грамматики :

1) OUT -> prn ( LO ) ;

2) LO -> aex

3) LO -> LO , aex

Реализация компилятора

На этапе лексического анализа формируются файлы:

token.bin – последовательность лексем в формате {тип лексич. единицы, номер} (см. раздел лексический анализ)

token1.txt – последовательность лексем

token2.txt - последовательность лексем в формате {тип лексич. единицы, номер}

tables.bin

t_id_.txt – таблица идентификаторов

t_i_const_.txt – таблица целых констант

t_f_const_.txt – таблица вещественных констант

tables.bin – таблицы в бинарном формате

На этапе синтаксического анализа формируются файлы:

t_id.syn – таблица идентификаторов

t_i_const.syn – таблица целых констант

t_f_const.syn – таблица вещественных констант

t_var.syn – таблица переменных

t_mark.syn – таблица меток

atoms.txt - последовательность тетрад в текстовом формате

atoms.bin - последовательность тетрад в бинарном формате

link.txt - последовательность тетрад после линковки

out.asm – ассемблерный код

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

tasm out.asm – генерация out.obj

tlink out.obj – генерация out.exe

Запуск лексического и синтаксического анализа и компиляции ассемблерного кода

make

Запуск скомпилированного файла

run

Таблица переменных (6)

Тип

Атрибут

Размер (в байтах)

Адрес памяти

Cмещение

0

1

..

Таблица переменных содержит информацию о распределении памяти. Поле “Адрес памяти” хранит адрес переменной, относительно начала сегмента данных. “Смещение” служит для индексации элементов матриц и массивов (содержит ссылку на переменную, значение которой нужно прибавить к текущему адресу для доступа к элементу матрицы или массива). Поле “Атрибут” содержит информацию о размерностях массива и матриц.

Распределение памяти

Распределение памяти происходит на этапе синтаксического анализа.

Так как в данном языке объявление переменных происходит до основной программы, то применяется следующий алгоритм:

В процессе распределения памяти, область памяти выделяется на область объявленных переменных и область временных переменных

Соседние файлы в папке kurs