Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Diketahui produksi sbb : BOTTOM UP PARSING

E→T|EAT
T→F|TMF
F → (E) | int
A → + |-
M→*|/
a. Buatlah diagram transisi Go To
b. Buatlah SLR table-nya
c. Lakukan stack implementation untuk string : 3 + 16 / (4 – 2)

0. E’  E 6. F  int
1. ET 7. A+
2. EEAT 8. A-
3. TF 9. M*
4. TTMF 10. M/
5. F  (E)

Page 1 of 10
State Action Goto First Follow
int + - * / ( ) $ E T F M A E {int, (} {$, +, -, )}
0 S5 S4 1 2 3 T {int, (} {$, +, -, ), /, *}
1 S7 S8 Acc 6 F {int, (} {$, +, -, ), /, *}
2 R1 R1 S10 S11 R1 R1 9 M {/, *} {int, (}
3 R3 R3 R3 R3 R3 R3 A {+, -} {int, (}
4 S5 S4 12 2 3
5 R6 R6 R6 R6 R6 R6
6 S5 S4 13 3
7 R7 R7
8 R8 R8
9 S5 S4 14
10 R9 R9
11 R10 R10
12 S7 S8 S15 6
13 R2 R2 S10 S11 R2 R2 9
14 R4 R4 R4 R4 R4 R4
15 R5 R5 R5 R5 R5 R5

Page 2 of 10
Diketahui statement berikut: (5-2) * (4-3) SYNTAX DIRECTED TRANSLATION
Buatlah Annotated Parse Tree nya berdasarkan skema translasi
dibawah ini
A→ C {B.i = C.val}
B {A.val = B.s}
B→ -
C {B1.i = B.i – C.val}
B1 {B.s = B1.s}
B→ ε {B.s = B.i}
C→ E {D.i = E.val}
D {C.val = D.s}
D→ *
E {D1.i = D.i * E.val}
D1 {D.s = D1.s}
D→ ε {D.s =D.i}
E→ ( A ) {E.val = A.val}
E→ num {E.val = num.val}

Page 3 of 10
Buatlah annotated parsig tree untuk string : 0101000
Dan berapa hasil dari S.value ?
Gunakan Syntax Directed Translation berikut :
Production Semantic Rules
List.pos = 3
S → List 100 R R.Bits
S.value = (List.value + 4) * 2
R → R1 0 R.Bits = R1.Bits + 1
R→Ԑ R.Bits = 0
List1.pos = List.pos + 1
List → List1 Bit Bit.pos = List.pos
List.value = List1.value + Bit.value
Bit.pos = List.pos List.value =
List → Bit
Bit.value
Bit → 0 Bit.value = 0
Bit → 1 Bit.pos
Bit.value = 2

Page 4 of 10
Buatlah annotated parsig tree untuk string : 4, 2, 6, 3, 8 +
Dan berapa hasil dari S.value ?
Gunakan Syntax Directed Translation berikut :

Production Semantic Rules


S.val = A.val;
S → A Sign A.sign = Sign.sign;
print(A.val);
Sign → + Sign.sign=1
Sign → - Sign.sign=0
A→n A.val = value(n)
A1.sign=A.sign;
if(A.sign = 1) then
A →A1,n A.val = max (A1.val,value(n));
else
A.val = min (A1.val,value(n));

Page 5 of 10
Diketahui statement sebagai berikut: INTERMEDIATE CODE GENERATOR
A = - ((A + B) * (C / D)) – (D + E)

Buatlah:
a. Directed Acyclic Graph (DAG)
b. Quadruple
c. Triple

Directed Acyclic Graph (DAG)

=
-

uminus

+ /
+

A B C D E

Quadruple
Op Arg 1 Arg 2 Result
+ A B T1
/ C D T2
* T1 T2 T3
uminus T3 T4
+ D E T5
- T4 T5 T6
= T6 A

Triple
Op Arg 1 Arg 2
1 + A B
2 / C D
3 * (1) (2)
4 uminus (3)
5 + D E
6 - (4) (5)
7 = (6) A

Page 6 of 10
x:=1;
y:=x+10;
while (x<y) {
x:=x+1;
if (x%2==1) then
y:=y+1;
else y:=y-2;
}

Three Address Code Code Generator


01: mov 1, ,x 1: mov #1, x
02: add x, 10 , t1 2: mov x, R0
03: mov t1, ,y 3: add #10, R0
04: lt x, y , t2 4: mov R0, y
05: jmpf t2, ,17 5: mov x, R0
06: add x, 1 , t3 6: lt y, R0 -> R0 = R0 < y
07: mov t3, ,x 7: jmpf R0, (22) -> keluar
08: mod x, 2 , t4 8: mov x, R0
09: eq t4, 1 , t5 9: add #1, R0
10: jmpf t5, , 14 10: mov R0, x
11: add y, 1 , t6 11: mod #2, R0 -> R0 = R0%2
12: mov t6, ,y 12: eq #1, R0 -> R0 = R0==1
13: jmp , ,16 13: jmpf R0, (18) -> ke else
14: sub y, 2 , t7 14: mov y, R0
15: mov t7, ,y 15: add #1, R0
16: jmp , ,4 16: mov R0, y
17: ……… 17: jmp (5)
18: mov y, R0
19: sub #2, R0
20: mov R0, y
21: jmp (5)
22: …….

Page 7 of 10
Diketahui Statement sbb :
A = A - B / C + (B - C) + C * D
Buatlah :
a. DAG
b. Three Address Code
c. Quadruples
d. Triples

Jawaban:

=
b. TAC
t1 = B/C
t2 = B – C
+ t3 = C * D
t4 = A – t1
t5 = t4 + t2
t6 = t5 + t3
+ A = t6

/ - *

A B C D

Op Arg1 Arg2 Result Op Arg1 Arg2


/ B C T1 1 / B C
- B C T2 2 - B C
* C D T3 3 * C D
- A T1 T4 4 - A (1)
+ T4 T2 T5 5 + (4) (2)
+ T5 T3 T6 6 + (5) (3)
= T6 A 7 = (6)

Page 8 of 10
Diketahui penggalan program sbb : Code Generator
a = 10;
b = 5;
c = 6;
while (b <= 10) {
if (a <= 10)
c = b + 4;
else {
b = b + 2;
a = a – 1;
}

do{
a= a + 1 ;
b = b - 2;
} while (a%2 == 1);
};

` Buatlah code generator untuk penggalan program diatas


1 Mov #10, a
2 Mov #5, b
3 Mov #6, c
4 Mov b, R0
5 LTE #10, R0 R0 = R0<=10
6 JmpF R0, (31)
7 Mov a, R0
8 LTE #10, R0 R0 = R0<=10
9 JmpF R0, (14)
10 Mov b, R0
11 Add #4, R0
12 Mov R0, c
13 Jmp , (20)
14 Mov b, R0
15 Add #2, R0
16 Mov R0, b
17 Mov a, R0
18 Sub #1, R0
19 Mov R0, a
20 Mov a, R0
21 Add #1, R0
22 Mov R0, a
23 Mov b, R0
24 Sub #2, R0
25 Mov R0, b
26 Mov a, R0
27 Mod #2, R0
28 Eq #1, R0
29 JmpT R0 , (20)
30 Jmp , (4)
32 ….

Page 9 of 10
Buatlah Code Generator 1. Mov #10, h
int m, h; 2. Mov h, R0
h = 10; 3. Mod #2, R0 -> R0 = R0%2
do { 4. Eq #1, R0 -> R0 = R0 ==1
if (h%2 == 1){ 5. Jmpf R0, (19) -> ke else
m = h * 2; 6. Mov h, R0
while (m < h) 7. Mul #2, R0
m = h + 2; 8. Mov R0, m
m = h – 1; 9. Lt h, R0 -> R0 = R0 < h
} 10. Jmpf R0, (15) -> ke m = h – 1
else m = h – 5; 11. Mov h, R0
h = h + 4; 12. Add #2, R0
} while (h < 20); 13. Mov R0, m
14. Jmp , (9)
15. Mov h, R0
16. Sub #1, R0
17. Mov R0, m
18. Jmp , (22)
19. Mov h, R0
20. Sub #5, R0
21. Mov R0, m
22. Mov h, R0
23. Add #4, R0
24. Mov R0, h
25. Lt #20, R0
26. Jmpt R0, (2)
27. …

Page 10 of 10

You might also like