- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
Управляющая таблица подграмматики оператора вывода
МАТРИЦА ПРЕДШЕСТВОВАНИЯ :
---- ( количество элементов : 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 |
|
|
|
|
|
.. |
|
|
|
|
|
Таблица переменных содержит информацию о распределении памяти. Поле “Адрес памяти” хранит адрес переменной, относительно начала сегмента данных. “Смещение” служит для индексации элементов матриц и массивов (содержит ссылку на переменную, значение которой нужно прибавить к текущему адресу для доступа к элементу матрицы или массива). Поле “Атрибут” содержит информацию о размерностях массива и матриц.
Распределение памяти
Распределение памяти происходит на этапе синтаксического анализа.
Так как в данном языке объявление переменных происходит до основной программы, то применяется следующий алгоритм:
В процессе распределения памяти, область памяти выделяется на область объявленных переменных и область временных переменных