You are on page 1of 3

Môn học: Nguyên lý biên dịch và lập trình GVGD: GS.TS.

Phan Thị Tươi


Họ và tên sinh viên: Mai Anh Thư MSSV: 1814270

BÀI TẬP VỀ NHÀ CHƯƠNG 4 (tt)


4.4. Trình bày quá trình phân tích cú pháp câu: (id + id)*id của bảng phân tích cú pháp
LR với bảng action-goto như sau:
action goto
Trạng thái
id + * ( ) $ E T F
0 s5 s4 1 2 3
1 s6 acc
2 r2 s7 r2 r2
3 r4 r4 r4 r4
4 s5 s4 8 2 3
5 r6 r6 r6 r6
6 s5 s4 9 3
7 s5 s4 10
8 s6 s11 s11
9 r1 s7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5

Stack Chuỗi nhập Xuất


0 (id+id)*id$ shift
0(4 id+id)*id$ shift
0 ( 4 id 5 +id)*id$ reduce by F  id
0(4F3 +id)*id$ reduce by T  F
0(4T2 +id)*id$ reduce by E  T
0(4E8 +id)*id$ shift
0(4E8+6 id)*id$ shift
0 ( 4 E 8 + 6 id 5 )*id$ reduce by F  id
0(4E8+6F3 )*id$ reduce by T  F
0(4E8+6T9 )*id$ reduce by E  E + T
0(4E8 )*id$ shift
0 ( 4 E 8 ) 11 *id$ reduce by F  (E)
0F3 *id$ reduce by T  F
0T2 *id$ shift
0T2*7 id$ shift
0 T 2 * 7 id 5 $ reduce by F  id
0 T 2 * 7 F 10 $ reduce by T  T * F
0T2 $ ET
0E1 $ accept
Môn học: Nguyên lý biên dịch và lập trình GVGD: GS.TS. Phan Thị Tươi
Họ và tên sinh viên: Mai Anh Thư MSSV: 1814270

4.5. Cho văn phạm G:

S → AS │ b

A → SA │ a

Văn phạm gia tố G’ có thêm S’ → S

a) Xây dựng tập tuyển các tập thực thể LR(0)

I1 = I2 = I3 = I4 = I5 = I6 = I7 =
I0
goto(I0,S) goto(I0,A) goto(I0,a) goto(I0,b) goto(I1,S) goto(I1,A) goto(I2,S)
S’→ .S S’→ S. S → A.S A → a. S → b. A→ S.A A→ SA. S → AS.
S → .AS A→ S.A S → .AS A→ .SA S → A.S A→ S.A
S → .b A→ .SA S → .b A→ .a S → .AS A→ .SA
A→ .SA A→ .a A→ .SA S → .AS S → .b A→ .a
A→ .a S → .AS A→ .a S → .b A→ .SA S → .AS
S → .b A→ .a S → .b

b) Xây dựng DFA mà mỗi trạng thái là một tập thực thể LR(0)
Môn học: Nguyên lý biên dịch và lập trình GVGD: GS.TS. Phan Thị Tươi
Họ và tên sinh viên: Mai Anh Thư MSSV: 1814270

c) Xây dựng bảng phân tích SLR

(1) S → AS (2) S → b (3) A → SA (4) A → a


action goto
Trạng thái
a b $ S A
0 s3 s4 1 2
1 s3 s4 accept 5 6
2 s3 s4 7 2
3 r4 r4
4 r2 r2 r2
5 s3 s4 5 6
6 s3│r3 s4│r3 7 2
7 s3│r1 s4│r1 r1 5 6

Tính các hàm first và follow:

first(S) = first(A) = {a,b}

follow(S) = {a,b,$}; follow(A) = {a,b}

Vì có sự xung đột ở 4 action nên G không phải là văn phạm SLR

d) Quá trình phân tích cho câu nhập: w = bab cho bộ phân tích SLR

Stack Chuỗi nhập Xuất


0 bab$ shift
0b4 ab$ reduce by S → b
0S1 ab$ shift
0S1a3 b$ reduce by A → a
0S1A5 b$ cách 1: reduce by A → SA
0A2 b$ shift
0A2b4 $ reduce by S → b
0A2S6 $ reduce by S → AS
0S1 $ accept
0S1A5 b$ cách 2: shift
0S1A5b4 $ reduce by S → b
0S1A5S6 $ reduce by S → AS
0S1S1 $ …

You might also like