Описание кс-грамматики входного языка
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 ;
Правила :
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 ;
Правила :
Cyc -> do blk whl opp lge clp
ГРАММАТИКА VARIABLE.
Терминалы :
var = varname ; sem = semicolon ; typ = type ;
Нетерминалы :
Dvr = DeclVar 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