- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
Подграмматика объявлений
Терминалы :
id = id ; int = int ; num = num ;
flt = float ; fmt = fmatr ; ; = ; ;
, = , ; [ = [ ; ] = ] ;
dc = об_констан ;
Нетерминалы :
DES = объявления 3 ; DVA = об_перем_и_масс 2 ;
DMT = об_матриц 1 ; TYP = тип 2 ;
LI = список_идентиф 2 ; LA = список_массивов 2 ;
IA = индекс_массива 2 ; LMT = список_матриц 2 ;
Правила :
1) DES -> DVA
2) DES -> DMT
3) DES -> dc
4) DVA -> TYP LI ;
5) DVA -> TYP LA ;
6) DMT -> fmt LMT ;
7) TYP -> int
8) TYP -> flt
9) LI -> LI , id
10) LI -> id
11) LA -> LA , id IA
12) LA -> id IA
13) IA -> [ num ]
14) IA -> IA [ num ]
15) LMT -> LMT , id [ num , num ]
16) LMT -> id [ num , num ]
Подграмматика объявления констант
Терминалы :
con = const ; int = int ; flt = float ;
num = num ; fnm = fnum ; id = индетифик ;
= = = ; ; = ; ; , = , ;
Нетерминалы :
DC = объявл_констант 2 ; LC = список_констант 2 ;
LC1 = 2 ;
Правила :
1) DC -> con int LC ;
2) DC -> con flt LC1 ;
3) LC -> LC , id = num
4) LC -> id = num
5) LC1 -> LC1 , id = fnm
6) LC1 -> id = fnm
Подграмматика арифметических выражений
Терминалы :
( = ( ; ) = ) ; num = inum ;
fnm = fnum ; + = + ; - = - ;
* = * ; / = / ; det = det ;
var = переменная ; trn = транспонир ;
Нетерминалы :
AEX = арифмет_выражен 3 ; T = слагаемое 3 ;
P = множитель 6 ;
Правила :
1) AEX -> AEX + T
2) AEX -> AEX - T
3) AEX -> T
4) T -> P
5) T -> T * P
6) T -> T / P
7) P -> ( AEX )
8) P -> det ( AEX )
9) P -> trn ( AEX )
10) P -> num
11) P -> fnm
12) P -> var
Подграмматика переменной
Терминалы :
[ = [ ; ] = ] ; , = , ;
id = индетифик ; aex = ар_выраж ;
Нетерминалы :
VAR = переменная 3 ; IM = индекс_массива 2 ;
Правила :
1) VAR -> id
2) VAR -> id [ aex , aex ]
3) VAR -> id IM
4) IM -> [ aex ]
5) IM -> IM [ aex ]
Описание промежуточного языка.
Перевод условного оператора:
IF (логическое_выражение) оператор
Указанный оператор будет переводиться следующим образом:
логическое_выражение
переход_по_ложь m1
оператор
безусловный_переход m1
m1:
IF (логическое_выражение) оператор1 ELSE оператор2
Перевод:
логическое_выражение
переход_по_ложь m1
оператор1
безусловный_переход m2
m1:
оператор2
m2:
Представление оператора цикла с параметром
FOR (выражение1 ; выражение2; выражение3) оператор
Указанный оператор будет
переводиться следующим образом:
выражение1
m1:
выражение2
переход_по_ложь m4
безусловный_переход m3
m2:
выражение3
безусловный переход m1
m3:
оператор
безусловный_переход m2
m4:
При отсутствии некоторых параметров цикла необходимо обеспечить соответствующую семантику цикла с параметром
