Presentation is loading. Please wait.

Presentation is loading. Please wait.

Лекции 11-12 25 марта 2016 г.. оператор объявления переменных : int a; char a, b = 5, c; присваивание ( Assign ): id = ; пустой оператор ; if( ) else.

Similar presentations


Presentation on theme: "Лекции 11-12 25 марта 2016 г.. оператор объявления переменных : int a; char a, b = 5, c; присваивание ( Assign ): id = ; пустой оператор ; if( ) else."— Presentation transcript:

1 Лекции 11-12 25 марта 2016 г.

2 оператор объявления переменных : int a; char a, b = 5, c; присваивание ( Assign ): id = ; пустой оператор ; if( ) else while( ) for( |ε; ; | |ε) switch( ) { case значение1: … case значениеN: [default: ] } ввод значения с клавиатуры в переменную : in a; вывод значения выражения : out ; печать текста на экран : out “Hello, world!”; блок кода : { }

3 DeclareVars → Type DeclVarList ; Type → char | int DeclVarList → InitVar DeclVarList’ DeclVarList’ →, InitVar | ε InitVar → id InitVar’ InitVar’ → = num | ε StmtList → Stmt StmtList’ StmtList’ → Stmt StmtList’ | ε Stmt → DeclareVars | AssignOp | WhileOp | ForOp | IfOp | SwitchOp | IOp | OOp | ; | {StmtList} AssignOp → Assign ; Assign → id = E

4 WhileOp → while (E) Stmt ForOp → for (ForInit; ForExp; ForLoop) Stmt ForInit → Assign | ε ForExp → E | ε ForLoop → Assign | ++ id | -- id | ε IfOp → if ( E ) Stmt ElsePart ElsePart → else Stmt | ε SwitchOp → switch ( E ) { Cases } Cases → ACase Cases’ Cases’ → ACase Cases’ | ε ACase → case num : Stmt | default : Stmt IOp → in id ; OOp → out OOp’ ; OOp’ → E | str

5 № ПравилоСемантическое определение 1 DeclareVars → Type p DeclVarList q ; q = p 2 Type p → char p = char 3 Type p → int p = int 4 DeclVarList p → InitVar q DeclVarList’ r r = p; q = r 5 DeclVarList’ p →, InitVar q q = p 6 DeclVarList’ p → ε 7 InitVar p → id q InitVar’ r setIdType(q,p); r = q 8 InitVar’ p → = num val {MOV} val,,p 9 InitVar’ p → ε 10 StmtList → Stmt StmtList’ 11 StmtList’ → Stmt StmtList’ 12 StmtList’ → ε

6 № ПравилоСемантическое определение 1313 Stmt → DeclareVars 1414 Stmt → AssignOp 1515 Stmt → WhileOp 16 Stmt → ForOp 17 Stmt → IfOp 18 Stmt → SwitchOp 19 Stmt → IOp 20 Stmt → OOp 21 Stmt → ; 22 Stmt → {StmtList} 23 AssignOp → Assign ; 24 Assign → id p = E q {MOV} q,,p checkId(p) 25 WhileOp → while {LBL},,l1 ( E p ) {EQ} p,0,l2 Stmt {JMP},,l1 {LBL},,l2 l1 = newlab(); l2 = newlab()

7 № ПравилоСемантическое определение 26 ForOp → for ( ForInit ; {LBL},,l1 ForExp p ; {EQ} p,0,l4 {JMP},,l3 {LBL},,l2 ForLoop {JMP},,l1 ) {LBL},,l3 Stmt {JMP},,l2 {LBL},,l4 l1 = newlab(); l2 = newlab() l3 = newlab(); l4 = newlab() 27 ForInit → Assign 28 ForInit → ε 29 ForExp p → E q p = q 30 ForExp p → ε p = ‘1’ 31 ForLoop → Assign 32 ForLoop → ++ id p {ADD} p1p checkId(p) 33 ForLoop → ε 34 IfOp → if ( E p ) {EQ} p,0,l1 Stmt {JMP},,l2 {LBL},,l1 ElsePart {LBL},,l2 l1 = newlab(); l2 = newlab() 35 ElsePart → else Stmt 36 ElsePart → ε

8 № ПравилоСемантическое определение 37 SwitchOp → switch ( E p ) { Cases q,end } {LBL},,end q = p; end = newlab() 38 Cases p,end → ACase q,end1,def1 Cases’ r,end2,def2 q = r = p; end1 = end2 = end; def2 = def1 q = r = p; end1 = end2 = end; if(def >= 0 && def1 >= 0){ SYNTAX ERROR: two default sect. } else def2 = max(def, def1) 39 Cases’ p,end,def → ACase q,end1,def1 Cases’ r,end2,def2 40 Cases’ p,end,def → ε {JMP},,q if (def >= 0) q = def; else q = end 41 ACase p,end,def → case num val {NE} p,val,next : Stmt {JMP},,end {LBL},,next next = newlab(); def = -1 42 ACase p,end,def → default : {JMP},,next {LBL},,def Stmt {JMP},,end {LBL},,next next = newlab(); def = newlab() 43 IOp → in id p ; {IN},,p checkId(p) 44 OOp → out OOp’ ; 45 OOp’ → E p {OUT},,p 46 OOp’ → str s {OUT},,s

9 № ПравилоСемантическое определение 15E4 p → E3 q E4’ rs p = s; r = q 16E4’ pq → + E3 r {ADD} prs E4’ st q = t; s = Alloc() 17E4’ pq → - E3 r {SUB} prs E4’ st q = t; s = Alloc() 18 E4’ pq → ε q = p 19E3 p → E2 q E3’ rs p = s; r = q 20E3’ pq → * E2 r {MUL} prs E3’ st q = t; s = Alloc() 21 E3’ pq → ε q = p 22E2 p → ! E1 q {NOT} q,,r r = Alloc(); p = r 23E2 p → E1 q p = q 24E1 p → ++ id q {ADD} q1q p = q; checkId(q) 25E1 p → ( E q )p = q 26E1 p → num val p = val 27E1 p → id q E1’ rs p = s; r = q; checkId(q) 28E1’ pq → ++ {MOV} p,,r {ADD} p1p r = Alloc(); q = r 29E1’ pq → ε q = p

10 Напишите список атомов, который будет сгенерирован для следующих инструкций 1.if (a==b) while (x<y) Stmt 2.for (i = 1; i<=100; i = i+1) for (j = 1; j<=i; j = j+1) Stmt 3.if (a==b) for (i=1; i<=20; i=i+1) Stmt1 else while (i>0) Stmt2 4.if (a==b) if (b>0) Stmt1 else while (i>0) Stmt2 Упражнение 1

11 Напишите список атомов, который будет сгенерирован для следующего кода int a, b = 0; in a; while(a > 0){ a = a / 10; b++; } out a; Упражнение 2


Download ppt "Лекции 11-12 25 марта 2016 г.. оператор объявления переменных : int a; char a, b = 5, c; присваивание ( Assign ): id = ; пустой оператор ; if( ) else."

Similar presentations


Ads by Google