1. Phương pháp phân tích cú pháp dưới lên
1.3. Phương pháp Simple LR (SLR)
Cấu tạo:
Kết quả
$ a0 a1
ai …
Buffer
Bộ phân tích Stack
$ S0 x0 … Si-1 Xi-1 Si
Bảng SLR Action Goto
Giáo trình Kiến trúc máy tính và Hệ điều hành
168
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Cấu tạo:
- Stack: $s0x0 s1x1…si-1xi-1si st: trạng thái; xt(ΣΔ)
- Buffer: aiai-1…a0$ ; với at Σ
- Bảng SLR gồm 2 phần: action và goto
• Chỉ số hàng: trạng thái St
Giáo trình Kiến trúc máy tính và Hệ điều hành
169
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Cấu tạo:
• Chỉ số cột
Phần action: aiΣ Phần goto: XΔ
• Action[Si,ai]=Shift j (Sj)
• Action[Si,ai]=Reduce A (RJ)
Giáo trình Kiến trúc máy tính và Hệ điều hành
170
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Cấu tạo:
• Action[Si,ai]=Accept
• Action[Si,ai]=rỗng
• Goto[Si,X]=j
Giáo trình Kiến trúc máy tính và Hệ điều hành
171
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Hoạt động:
Tại một thời điểm bộ phân tích đọc trạng thái Si ở đỉnh stack và ký hiệu vào ai ở đỉnh buffer và tra trong bảng SLR ở phần Action một giá trị. Nếu:
- Action[Si,ai]=Shift j (Sj)
D/c ai từ Buffer Stack
Đẩy j vào stack
Giáo trình Kiến trúc máy tính và Hệ điều hành
172
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Hoạt động:
- Action[Si,ai]=Reduce A (RJ)
Lấy 2*r phần tử ra khỏi stack. Với r=||
Đẩy A vào stack
Đẩy j vào stack với j=goto[Si-r,A]
Giáo trình Kiến trúc máy tính và Hệ điều hành
173
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Hoạt động:
- Action[Si,ai]=Accept
Xâu x đúng cp của vpG - Action[Si,ai]=rỗng
Báo lỗi x không cú pháp của vpG
Giáo trình Kiến trúc máy tính và Hệ điều hành
174
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Thuật toán:
Sử dụng: 1 stack, 1 buffer, bảng SLR Khởi tạo: - stack: $0
- Buffer: x$
Lặp: {g/sử ở đỉnh stack là Si, đỉnh buffer là a}
If (Action[Si,a]=accept) then - x đúng cp và dừng vòng lặp
Giáo trình Kiến trúc máy tính và Hệ điều hành
175
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Thuật toán:
Else If (Action[Si,a]=Sj) then - D/c a từ buffer stack - Đẩy j vào stack
Else IF (Action[Si,a]=Reduce A) then - Lấy 2*r phần tử ra khỏi stack
Giáo trình Kiến trúc máy tính và Hệ điều hành
176
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Thuật toán:
- Đẩy A vào stack
- Đẩy j vào stack. Với j=goto[Si-r,A]
Else {Action[Si,a]=rỗng}
- Báo lỗi x không đúng cp của G - Dừng vòng lặp
Giáo trình Kiến trúc máy tính và Hệ điều hành
177
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ: Cho vp G E E + T | T T T * F | F F (E) | id
Xâu x: id*(id+id)
(1) (2) (3) (4) (5) (6)
Giáo trình Kiến trúc máy tính và Hệ điều hành
178
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
T/
thái Action Goto
id + * ( ) $ E T F
0 S5 S4 1 2 3
1 S6 Accept
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
Giáo trình Kiến trúc máy tính và Hệ điều hành
179
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
T/
thái Action Goto
id + * ( ) $ E T F
7 S5 S4 10
8 S6 S11
9 R1 S7 R1 R1
10 R3 R3 R3 R3
11 R5 R5 R5 R5
Giáo trình Kiến trúc máy tính và Hệ điều hành
180
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
Stt Stack Buffer Hành động
0 $0 id*(id+id)$ S5
1 $0 id 5 *(id+id)$ R6(Fid)
2 $0 F 3 *(id+id)$ R4(TF)
3 $0 T 2 *(id+id)$ S7
4 $0 T 2 * 7 (id+id)$ S4
5 $0 T 2 * 7 ( 4 id+id)$ S5
Giáo trình Kiến trúc máy tính và Hệ điều hành
181
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
Stt Stack Buffer Hành động
6 $0 T 2 * 7 ( 4 id 5 +id)$ R6(Fid)
7 $0 T 2 * 7 ( 4 F 3 +id)$ R4(TF)
8 $0 T 2 * 7 ( 4 T 2 +id)$ R2(ET)
9 $0 T 2 * 7 ( 4 E 8 +id)$ S6
10 $0 T 2 * 7 ( 4 E 8 + 6 id)$ S5
11 $0 T 2 * 7 ( 4 E 8 + 6 id 5 )$ R6(Fid)
Giáo trình Kiến trúc máy tính và Hệ điều hành
182
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
Stt Stack Buffer Hành động
12 $0 T 2 * 7 ( 4 E 8 + 6 F 3 )$ R4(TF) 13 $0 T 2 * 7 ( 4 E 8 + 6 T 9 )$ R1(EE+T)
14 $0 T 2 * 7 ( 4 E 8 )$ S11
15 $0 T 2 * 7 ( 4 E 8 ) 11 $ R5(F(E))
16 $0 T 2 * 7 F 10 $ R3(TT*F)
17 $0 T 2 $ R2(ET)
Giáo trình Kiến trúc máy tính và Hệ điều hành
183
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
Stt Stack Buffer Hành động
18 $0 E 1 $ Accept
Giáo trình Kiến trúc máy tính và Hệ điều hành
184
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR - Văn phạm gia tố G’
G’=G {S’S}
Ví dụ: G: S 0S | 1S|0|1 G’: S’ S
S 0S | 1S|0|1
Giáo trình Kiến trúc máy tính và Hệ điều hành
185
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR
- Thực thể: Sx thêm dấu chấm ở bất kỳ vị trí của vế phải.
Ví dụ: A xyz
thì A .xyz Ax.yz Axy.z A xyz. là các thực thể
Giáo trình Kiến trúc máy tính và Hệ điều hành
186
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR
- Hàm tính bao đóng Closure(Ii): 2 qui tắc
(1) Đưa tất cả các thực thể trong Ii vào closure(Ii) (2) Cứ mỗi thực thể có dạng
A.Bclosure(Ii) mà B thì thêm
B. vào closure(Ii) với B.
closure(Ii)
Giáo trình Kiến trúc máy tính và Hệ điều hành
187
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ: Xác định tập closure(I) của VP G’
E’ E
E E + T | T T T * F | F F (E) | id
I={E’.E}
Giáo trình Kiến trúc máy tính và Hệ điều hành
188
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR - Hàm tính goto
Goto(Ii,x)=closure({Ax.}) với {A.x} Ii ; x(ΣΔ)
Giáo trình Kiến trúc máy tính và Hệ điều hành
189
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ: Tìm tất cả các tập goto(I,X) có thể của VP G
I={ E’.E E.E+T E.T
T.T*F } X: E, T
Goto(I,E) và Goto(I,T)
E’ E
E E + T | T T T * F | F F (E) | id
Goto(I,E)=closure({E’E.
; EE.+T}) Goto(I,T)=closure({ET.
; TT.*F})
Giáo trình Kiến trúc máy tính và Hệ điều hành
190
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR - Tập thực thể LR(0)
I0=closure({S’.S})
- Tính tất cả các goto(Ii,x) của tất cả các tập thực thể ta sẽ được tập LR(0).
- Tính hết goto(Ii,x) mà không sinh được Ii+1 thì dừng.
Giáo trình Kiến trúc máy tính và Hệ điều hành
191
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR
- Qui tắc xác định hành động
( )1 A.a Ii và goto(Ii,a)=Ij với a Σ thì: Action[i,a]= Sj
( )2 A.X Ii và goto(Ii,X)=Ij với X Δ thì: goto[i,X]= j
Giáo trình Kiến trúc máy tính và Hệ điều hành
192
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Xây dựng bảng SLR
- Qui tắc xác định hành động
( )3 S’S. Ii thì: Action[i,$]= accept
( )4 A. Ii thì Action[i,a]= Reduce A
với a Follow(A); A<>S’
- Qui tắc xác định Follow Follow(A)={(tΣ|
S+At)(t=$|S+ A)}
Giáo trình Kiến trúc máy tính và Hệ điều hành
193
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ: Cho vp G E E + T | T T T * F | F F (E) | id
Xây dựng bảng SLR cho VP G
Giáo trình Kiến trúc máy tính và Hệ điều hành
194
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
- Xác định G’
- Tạo tập thực thể LR(0) - Xác định các hành động
Giáo trình Kiến trúc máy tính và Hệ điều hành
195
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
- VP gia tố G’
E’ E
E E + T | T T T * F | F F (E) | id
Giáo trình Kiến trúc máy tính và Hệ điều hành
196
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
- Tạo tập thực thể LR(0)
I0=closure({E’.E}) E’.E
E.E+T E.T T.T*F
T.F F.(E) F.id
I1=goto(I0,E) E’E.
EE.+T
Giáo trình Kiến trúc máy tính và Hệ điều hành
197
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Ví dụ:
- Xác định các hành động
Giáo trình Kiến trúc máy tính và Hệ điều hành
198
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Bài tập:
(1)cho VPG: A A or B | B B B and C | C
C not C | (A) | true | false Hỏi xâu x: true and false or (not true) có được
sinh ra từ VPG? c/m bằng PP SLR
Giáo trình Kiến trúc máy tính và Hệ điều hành
199
1. Phương pháp phân tích cú pháp dưới lên 1.3. Phương pháp Simple LR (SLR)
Bài tập:
(2)Cho VPG: S AS| b A SA| a
Xây dựng bảng SLR cho VP G?
Giáo trình Kiến trúc máy tính và Hệ điều hành
200
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG