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 141
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 142
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 143
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 144
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 145
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 146
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 147
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 148
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 149
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 150
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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)
Giáo trình Kiến trúc máy tính và Hệ
điều hành 151
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 152
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 153
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 G’: S’ S
S 0S | 1S
Giáo trình Kiến trúc máy tính và Hệ
điều hành 154
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 155
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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α.Bβ∈closure(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 156
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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({Aαx.β}) với {Aα.xβ} ⊂ Ii ; x∈(Σ∪Δ)
Giáo trình Kiến trúc máy tính và Hệ
điều hành 157
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 158
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 159
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 160
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 161
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 162
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 163
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 164
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 165
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 166
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP
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 167
CHƯƠNG 4. CÁC PHƯƠNG PHÁP PHÂN TÍCH CÚ PHÁP