
Подграмматика операторов
|
EXP |
LEX |
LABEL |
VAR |
IDENT |
for |
goto |
if |
else |
cin>> |
cout<< |
= |
+= |
-= |
*= |
/= |
( |
) |
; |
ε |
COP |
|
|
|
SOP,1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SOP |
|
|
|
OP;SOP,2 |
|
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
|
|
|
|
|
OP;SOP,2 |
|
|
ε,3 |
OP |
|
|
LABELq: ULO,4 |
ULO, 22 |
|
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
|
|
|
|
|
ULO, 22 |
|
|
|
ULO |
|
|
|
EQO, 6 |
|
for(EQOname; LEXend; EQOstep) {begin_cycle} m1, m2, p1, p2, p3, p4 COP {end_cycle}p1, p2, p3, p4 , 5 |
goto LABEL,8 |
if(LEX)COP ELO,10 |
|
cin>>VAR p {CIN} m, 15 |
cout<<VAR p {COUT} m , 16 |
|
|
|
|
|
(LEX)? (EXP): EXP),20 |
|
|
|
ELO |
|
|
|
|
|
|
|
|
else COP,11 |
|
|
|
|
|
|
|
|
|
|
|
EQO |
|
|
|
VAR EQRS, 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EQRS |
|
|
|
|
|
|
|
|
|
|
|
= EXP p,17 |
+= EXP p,18 |
-= EXP p,19 |
*=EXP p p,20 |
/=EXP p p,21 |
|
|
|
|
EXP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LEX |
|
LEX┴, 63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VAR |
|
|
|
VAR┴,61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXP |
EXP┴, 62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LABEL |
|
|
|
|
LABELq → IDENTp {DEFLq, , }q ,9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IDENT |
|
|
|
|
ВЫЗОВ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cin>> |
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
|
cout<< |
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
+= |
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
-= |
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
*= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
/= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
выброс |
|
{CIN} m |
ВЫДАЧА{CIN} m |
|||||||||||||||||||
{COUT} m |
ВЫДАЧА{COUT} m |
|||||||||||||||||||
{begin_cycle} m1, m2, p1, p2, p3, p4 |
ВЫДАЧА{begin_cycle} m1, m2, p1, p2, p3, p4 |
|||||||||||||||||||
{end_cycle}p1, p2, p3, p4 |
ВЫДАЧА{end_cycle}p1, p2, p3, p4 |
|||||||||||||||||||
{DEFLq, , }q |
ВЫДАЧА{DEFLq, , }q |
|||||||||||||||||||
┴ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
СВЁРТКА,74 |
COP → SOP (1)
SOP → OP; SOP (2)
SOP → (3)
OP → LABELq: ULO (4)
OP → ULO
ULO →for(EQOname; LEXend; EQOstep) {begin_cycle} m1, m2, p1, p2, p3, p4 COP {end_cycle}p1, p2, p3, p4 (5)
m1 <- NewLabel
m2 <- NewLabel
p1 <- name
p2 <- begin
p3 <- step
p4 <- end
ULO → EQO (6)
EQO →VAR q EQRS t,e {ASS}p1, p2, p3t (7)
p2 <- q //адрес переменной в таблице
p1<-t
p3 <-e
ULO → goto LABEL p {BRL} q (8)
p <- q //адрес
LABELq → IDENTp {DEFLq, , }q (9)
q <- p
ULO → IF2p OP{DEFL}m (10)
mp
IF2p → if (LEXvalue) {BF}m, v (11)
m NewLabel
p m
vvalue
ULO → IF2p COP IF3q1, q2 COP {DEFL}m (12)
mq1
q2p
IF3q1, q2 → else{BRL}m1{DEFL}m2 (13)
m1 NewLabel
q1 m1
m2q2
OP -> (14)
ULO → cin>>VAR p {CIN} m (15)
p <- m
ULO →cout <<VAR p {COUT} m (16)
m <- p
EQRS t,e → =EXP p (17)
t <- код для операции =
e <- p
EQRS t,e → +=EXP p (18)
t <- код для операции +=
e <- p
EQRS t,e → -=EXP p (19)
t <- код для операции -=
e <- p
EQRS t,e → *=EXP p (20)
t <- код для операции *=
e <- p
EQRS t,e → /=EXP p (21)
t <- код для операции .=
e <- p