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

Кс-грамматика входного языка

КС-грамматика входного языка разбита на подграмматики. КС-грамматика является грамматикой слабого предшествования. Терминалы, показанные жирным шрифтом являются нетерминалами соответствующего терминала.

Основная грамматика

Терминалы :

( = ( ; ) = ) ; 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

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