Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовик по ТЯПу.doc
Скачиваний:
14
Добавлен:
01.05.2014
Размер:
140.29 Кб
Скачать

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

Cls→ class classname op_brace DeclSet cl_brace

DeclSet → DeclSet Decl

DeclSet → Decl

Decl → DeclAtr

Decl → DeclMet

DeclAtr → Acs Type atrname semicolon

DeclMet → Acs Type methodname op_parent FormParams cl_parent op_brace Block cl_brace

Acs → public

Acs → private

Type → EmbType

Type → classname

EmbType → int

EmbType → float

EmbType → compl

EmbType → matr

EmbType → char

FormParams→ FormParams comma DeclVar

FormParams→ DeclVar

FormParams→ ε

Block → Block BlockEl

Block → BlockEl

BlockEl → DeclVar

BlockEl → Cycle

BlockEl → Cond

BlockEl → Assig

BlockEl → Expr semicolon

DeclVar→Type varname semicolon

Assign → LExpr assign Expr

LExpr→ LExpr ClAtr

LExpr→ varname

LExpr→ MatrEl

ClAtr → point atrname

Expr → Expr plusminus Item

Expr → Item

Item → Item multi Multiplier

Item → Multiplier

Multiplier → UOperation

Multiplier → UOperand

UOperation → UOperand incdecr

UOperand → FUOperand point specoper

UOperand → FUOperand

FUOperand → FUOperand MCall

FUOperand → Liter

FUOperand → op_parent Expr cl_parent

FUOperand → OpNew

FUOperand → LExpr

MatrEl→ varname op_bracket Expr comma Expr cl_bracket

MCall → point methodname op_parent FactParams cl_parent

FactParams → FactParams comma Expr

FactParams → Expr

FactParams → ε

OpNew → new classname op_parent FactParams cl_parent

Cond→ if op_parent LogExpr cl_parent op_brace Block cl_brace

Cond→ if op_parent LogExpr cl_parent op_brace Block cl_brace else op_brace Block cl_brace

Cycle → do op_brace Block cl_brace while op_parent LogExpr cl_parent

LogExpr → LogExpr or Conj

LogExpr → Conj

Conj→ Conj and LogOp

Conj→ LogOp

LogOp→not Rel

LogOp→Rel

Rel→ Expr comp Expr

Liter → int_num | float_num | ComplNum | Matrix

ComplNum → op_parent float_num semicolon float_num cl_parent

ComplNum → op_parent float_num semicolon cl_parent

ComplNum → op_parent semicolon float_num cl_parent

ComplSet → ComplSet comma ComplNum

ComplSet → CompNum

MatrStr → op_brace ComplSet cl_brace

StrSet → StrSet semicolon MatrStr

StrSet → MatrStr

Matrix → op_brace StrSet cl_brace

Разбиение на подграмматики

ГРАММАТИКА CLASS.

Терминалы :

cls = class ; opb = op_brace ; clb = cl_brace ;

dm = DecMember ; cln = classname ;

Нетерминалы :

Cls = Cls 1 ; DcS = DeclSet 2 ;

Dec = Decl 1 ;

Правила :

1) Cls -> cls cln opb DcS clb

2) DcS -> DcS Dec

3) DcS -> Dec

4) Dec -> dm

ГРАММАТИКА MEMBER.

Терминалы :

atn = atrname ; sem = semicolon ; mn = methodname ;

opp = op_parent ; clp = cl_parent ; blk = block ;

pub = public ; prv = private ; typ = type ;

dvr = declvar ; com = comma ;

Нетерминалы :

Dm = DeclMember 2 ; Dat = DeclAtr 1 ;

Dem = DeclMet 2 ; Acs = Acsess 2 ;

Frp = FormParams 3 ;

Правила :

1) Dm -> Dat

2) Dm -> Dem

3) Dat -> Acs typ atn sem

4) Dem -> Acs typ mn opp Frp clp blk

5) Dem -> Acs typ mn opp clp blk

6) Acs -> prv

7) Acs -> pub

8) Frp -> Frp com dvr

9) Frp -> com dvr

10) Frp -> dvr

ГРАММАТИКА TYPE.

Терминалы :

cln = classname ; int = int ; flo = float ;

com = compl ; mat = matr ; chr = char ;

Нетерминалы :

Typ = Type 2 ; Emb = EmbType 5 ;

Правила :

1) Typ -> Emb

2) Typ -> cln

3) Emb -> int

4) Emb -> flo

5) Emb -> com

6) Emb -> mat

7) Emb -> chr

ГРАММАТИКА BLOCK.

Терминалы :

opb = op_brace ; clb = cl_brace ; dvr = declvar ;

ass = assign ; con = cond ; cyc = cycle ;

exp = expr ; sem = semicolon ;

Нетерминалы :

Dcb = DeclBlock 1 ; Blk = Block 2 ;

Bel = BlockEl 5 ;

Правила :

1) Dcb -> opb Blk clb

2) Blk -> Blk Bel

3) Blk -> Bel

4) Bel -> dvr

5) Bel -> cyc

6) Bel -> con

7) Bel -> ass

8) Bel -> exp sem

ГРАММАТИКА ASSIGN.

Терминалы :

ass = assign ; lex = lexpress ; exp = expression ;

Нетерминалы :

Asg = Assign 1 ;

Правила :

  1. Asg -> lex ass exp

ГРАММАТИКА COND.

Терминалы :

if = if ; opp = op_parent ; clp = cl_parent ;

lge = logexpr ; blk = block ; els = else ;

Нетерминалы :

Con = Cond 2 ;

Правила :

1) Con -> if opp lge clp blk

2) Con -> if opp lge clp blk els blk

ГРАММАТИКА CYCLE.

Терминалы :

do = do ; blk = block ; whl = while ;

opp = op_parent ; clp = cl_parent ; lge = logexpr ;

Нетерминалы :

Cyc = Cycle 1 ;

Правила :

  1. Cyc -> do blk whl opp lge clp

ГРАММАТИКА VARIABLE.

Терминалы :

var = varname ; sem = semicolon ; typ = type ;

Нетерминалы :

Dvr = DeclVar 1 ;

Правила :

  1. Dvr -> typ var sem

ГРАММАТИКА LEXPR.

Терминалы :

var = varname ; pnt = point ; atn = atrname ;

opb = op_bracket ; clb = cl_bracket ; exp = expression ;

com = comma ;

Нетерминалы :

Lex = LExpr 3 ; Cat = ClAtr 1 ;

Mel = MatrEl 1 ;

Правила :

1) Lex -> Lex Cat

2) Lex -> var

3) Lex -> Mel

4) Cat -> pnt atn

5) Mel -> var opb exp com exp clb

ГРАММАТИКА EXPR.

Терминалы :

plm = plusminus ; mlt = multi ; inc = incdecr ;

pnt = point ; spc = specoper ; opp = op_parent ;

clp = cl_parent ; mn = methodname ; com = comma ;

new = new ; cln = classname ; int = int_num ;

flo = float_num ; cnm = complnum ; mat = matrix ;

lex = lexpr ;

Нетерминалы :

Exp = Expr 2 ; Itm = Item 2 ;

Mul = Multiplier 2 ; Upn = UOperation 1 ;

Upd = UOperand 2 ; Fuo = FUOperand 5 ;

Mcl = MCall 2 ; Lit = Liter 4 ;

Opn = OpNew 1 ; Fpr = FactParams 2 ;

Правила :

1) Exp -> Exp plm Itm

2) Exp -> Itm

3) Itm -> Itm mlt Mul

4) Itm -> Mul

5) Mul -> Upn

6) Mul -> Upd

7) Upn -> Upd inc

8) Upd -> Fuo pnt spc

9) Upd -> Fuo

10) Fuo -> Fuo Mcl

11) Fuo -> Lit

12) Fuo -> opp Exp clp

13) Fuo -> Opn

14) Fuo -> lex

15) Mcl -> pnt mn opp Fpr clp

16) Mcl -> pnt mn opp clp

17) Lit -> int

18) Lit -> mat

19) Lit -> cnm

20) Lit -> flo

21) Opn -> new cln opp Fpr clp

22) Fpr -> Fpr com Exp

23) Fpr -> Exp

ГРАММАТИКА MATRIX.

Терминалы :

com = comma ; sem = semicolon ; opb = op_brace ;

clb = cl_brace ; cnm = complnum ;

Нетерминалы :

Mat = Matrix 1 ; Str = StrSet 2 ;

Cos = ComplSet 2 ; Mst = MatrStr 1 ;

Правила :

1) Mat -> opb Str clb

2) Str -> Str sem Mst

3) Str -> Mst

4) Cos -> Cos com cnm

5) Cos -> cnm

6) Mst -> opb Cos clb

ГРАММАТИКА COMPL.

Терминалы :

opp = op_parent ; clp = cl_parent ; sem = semicolon ;

flo = float_num ;

Нетерминалы :

Cnm = ComplNum 3 ;

Правила :

1) Cnm -> opp flo sem flo clp

2) Cnm -> opp flo sem clp

3) Cnm -> opp sem flo clp

Соседние файлы в предмете Теория языков программирования