Vous êtes sur la page 1sur 9

Teknik Kompilasi

09 / 1 - 9

LR - PARSER
KONSEP DASAR
Fungsi ini digunakan untuk menangani
CFG yang berukuran besar dan teknik
sering disebut dengan LR (k) parsing,
dimana :
L : left to right
R : konstruksi derivasi rightmost
K : bilangan input simbol

Hal-hal yang perlu diperhatikan dalam


LR-Parsing adalah :
1) Dapat mengenal semua konstruksi
bahasa pemrograman yang berbasis CFG
2) Shift reduce non-backtracking
3) Proper superset dari predictive
parser
4) Syntax error cepat dideteksi
Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 2 - 9

Komponen LR-Parser :
input, output, stack, program driver dan
parsing table (action dan goto)
Metode Kerja :
Program parsing membaca karakter
dari input buffer satu setiap waktu
Progam menggunakan sebuah stack
untuk menyimpan suatu string dari
suatu bentuk :
s0x1 s1x2smxm
dimana :
sm = top of stack
xi = simbol grammar
si = state

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 3 - 9

Model dari LR - parser :


Input
A1 ...
Stack
Sm
Xm
Sm-1
Xm-1
...
S0

ai

...

LR parsing
program

an

$
Output

goto
action
LR Parsing Table

KONSTRUKSI PARSING TABLE


Input

: w & LR parsing table


/* w = input string */
Output : if w di dalam L(G) bottom
up parsing dari w else ada
kesalahan (error)
Metode : S0 top of stack state awal
w$ dalam
input buffer,
parser
bekerja
sampai
accept atau error

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 4 - 9

ALGORITMA LR-PARSING
set ip to point to first simbol of w$;
repeat forever begin
let s be the state on top of the stack and
a the symbol pointed to by ip;
if action[s, a] = shift s then begin
push a then s on top of the stack;
advance ip to the next input simbol
end
else if action[s, a] = reduce A then begin
pop 2 * || symbol off then stack;
let s be the state now on top of the stack;
output the production A
end
else if action [s, a] = accept then
return
else error ()
end

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 5 - 9

Contoh :
Grammar : (1) E E + T
(2) E T
(3) T T * F
(4) T F
(5) F (E)
(6) F id

Parsing Table :
State
0
1
2
3
4
5
6
7
8
9
10
11

id
S5

+
S6
R2
R4

Action
*
(
S4
S7
R4

S5

R2
R4

acc
R2
R4

S4
R6

R6

S5
S5

R6

S7
R3
R5

S11
R1
R3
R5

F
3

3
10

R6

S4
S4
S6
R1
R3
R5

E
1

Goto
T
2

R1
R3
R5

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 6 - 9

Catatan :
Si = shift dan push state i
Rj = reduksi dengan produksi nomor j
acc = accept
kosong = error

Contoh : Pergerakan LR parser dengan


masukan id * id + id :
Stack
1. 0
2. 0 id 5
3. 0 F 3
4. 0 T 2
5. 0 T 2 * 7
6. 0 T 2 * 7 id 5
7. 0 T 2 * 7 F 10
8. 0 T 2
9. 0 E 1
10. 0 E 1 + 6
11. 0 E 1 + 6 id 5
12. 0 E 1 + 6 F 3
13. 0 E 1 + 6 T 9
14. 0 E 1

Input
id * id + id$
* id + id $
* id + id$
id + id$
id + id$
+ id$
+ id$
+ id$
+ id$
id$
$
$
$
$

Aksi
shift
reduced by F id
reduced by T F
shift
shift
reduce by F id
reduce by T T * F
reduce by E T
shift
shift
reduce by F id
reduce by T F
EE+T
accept

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 7 - 9

LR-GRAMMAR
Suatu Grammar dimana kita dapat
membuat parsing table, LR-Grammar
menggunakan shift-reduce untuk k
simbol input biasa disebut LR(k)
Grammar.
Sebuah LR(0) item grammar G adalah
suatu produksi dari grammar G dengan
penempatan dot pada pada posisiposisi tertentu di rightside
Contoh :
G : A XYZ
menghasilkan 4 item yaitu :
A .XYZ
A X.YZ
A XY.Z
A XYZ.

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 8 - 9

OPERASI CLOSURE
1. Setiap item dalam I ditambahkan
dalam closure (I)
2. Jika A B dalam closure(I) dan
B
Contoh : E E
E E+T|T
T T*F|F
F (E) | id
Operasi closure dengan
LR(0) adalah :
I0 : E E
E E+T
E T
T T*F
T F
F (E)
F id

I5: F id

I1 : E E
E E+T

I7: T T*F
F (E)
F id

canonical

I6: E E+T
T T*F
T F
F (E)
F id

Bahan Ajar Matakuliah oleh SINAR SINURAT

Teknik Kompilasi

09 / 9 - 9

I2 : E T
T T*F

I8: F (E)
E E+T

I3 : T F

I9: F E+T
T T*F

I4 : F (E)
E E+T
E T
T T*F
T F
F (E)
F id

I10: T T*F
I11: F (E)

Bahan Ajar Matakuliah oleh SINAR SINURAT

Vous aimerez peut-être aussi