- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
Кс-грамматика входного языка
КС-грамматика входного языка разбита на подграмматики. КС-грамматика является грамматикой слабого предшествования. Терминалы, показанные жирным шрифтом являются нетерминалами соответствующего терминала.
Основная грамматика
Терминалы :
( = ( ; ) = ) ; voi = void ;
mai = main ; des = объявления ; sop = сост_опер ;
Нетерминалы :
PRG = программа 2 ; GD = глобал_описание 2 ;
Правила :
1) PRG -> voi mai ( ) sop
2) PRG -> GD voi mai ( ) sop
3) GD -> GD des
4) GD -> des
Подграмматика составного оператора
Терминалы:
{ = { ; } = } ; op = оператор ;
Нетерминалы:
SOP = сост_оператор 2 ; SET = множ_операторов 2 ;
Правила :
1) SOP -> { SET }
2) SOP -> { }
3) SET -> SET op
4) SET -> op
Подграмматика оператора
Терминалы :
( = ( ; ) = ) ; ; = ; ;
: = : ; , = , ; id = идентиф ;
got = goto ; scn = scan ; var = переменная ;
opn = операторы ; sop = сост_опер ; out = опер_вывод ;
Нетерминалы :
OP = оператор 2 ; LOP = метка 1 ;
OPS = оператор_1 6 ; GOT = оп_безусл_перех 1 ;
IN = оператор_ввода 1 ; LIN = перемен_ввода 2 ;
Правила :
1) OP -> LOP OPS
2) OP -> OPS
3) LOP -> id :
4) OPS -> opn
5) OPS -> GOT
6) OPS -> IN
7) OPS -> out
8) OPS -> sop
9) OPS -> ;
10) GOT -> got id ;
11) IN -> scn ( LIN ) ;
12) LIN -> LIN , var
13) LIN -> var
Подграмматика оператора_вывода
Терминалы :
( = ( ; ) = ) ; ; = ; ;
, = , ; prn = print ; aex = ар_выраж ;
Нетерминалы :
OUT = оператор_вывода 1 ; LO = значения_вывода 2 ;
Правила :
1) OUT -> prn ( LO ) ;
2) LO -> aex
3) LO -> LO , aex
Подграмматика для операторов
Терминалы :
; = ; ; ( = ( ; ) = ) ;
= = = ; if = if ; els = else ;
for = for ; > = > ; < = < ;
>= = >= ; <= = <= ; == = == ;
!= = != ; var = переменная ; aex = ар_выражен ;
op = оператор ;
Нетерминалы :
OPN = операторы 3 ; FOR = цикл 1 ;
HD = загловок_цикла 2 ; HD0 = заголовок0 2 ;
HD1 = заголовок1 2 ; IF = опер_усл_перех 2 ;
IF1 = усл_перех1 1 ; CON = усл 1 ;
GIV = оп_присваивания 1 ; OGV = опер_присвоения 1 ;
LEX = логич_выражение 3 ; LE1 = условие 5 ;
Правила :
1) OPN -> FOR
2) OPN -> IF
3) OPN -> GIV
4) FOR -> for HD ) op
5) HD -> HD0 OGV
6) HD -> HD0
7) HD0 -> HD1 LEX ;
8) HD0 -> HD1 ;
9) HD1 -> ( ;
10) HD1 -> ( GIV
11) IF -> IF1
12) IF -> IF1 els op
13) IF1 -> if CON ) op
14) CON -> ( LEX
15) GIV -> OGV ;
16) OGV -> var = aex
17) LEX -> LEX != LE1
18) LEX -> LEX == LE1
19) LEX -> LE1
20) LE1 -> aex
21) LE1 -> LE1 > aex
22) LE1 -> LE1 < aex
23) LE1 -> LE1 >= aex
24) LE1 -> LE1 <= aex