Phương pháp Simple LR (SLR)

Một phần của tài liệu CHƯƠNG TRÌNH DỊCH (SLIDE FULL về CHƯƠNG TRÌNH DỊCH) (Trang 140 - 167)

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

Một phần của tài liệu CHƯƠNG TRÌNH DỊCH (SLIDE FULL về CHƯƠNG TRÌNH DỊCH) (Trang 140 - 167)

Tải bản đầy đủ (PPT)

(213 trang)