You are on page 1of 3

1.

Xây dựng Parsing Table M cho phân tích cú pháp đoán trước không đệ quy
1. Bước 1 : Loại bỏ tính đệ quy trái.
2. Bước 2 : Tính tập FIRST
3. Bước 3 : Tính tập FOLLOW
4. Bước 4 : Xây dựng bảng parsing table M

2. Trình tự cụ thể từng bước :


a. Loại bỏ tính đệ quy trái.
 Một văn phạm được gọi là đệ quy trái nếu tồn tại một dẫn xuất có dạng A → +Aα
 Các phương pháp phân tích top-down không thể xử lý văn phạm đệ quy trái, do
đó cần phải biến đổi văn phạm để loại bỏ tính đệ quy trái.
 Đệ quy trái có 2 loại :
 Đệ quy trái trực tiếp : Có dạng A → Aα
 Đệ quy trái gián tiếp : Gây ra do dẫn xuất của 2 hoặc nhiều bước.
 Loại bỏ đệ quy trái trực tiếp :
 Nhóm các luật sinh:
o A → Aα1 | Aα2 | … | Aαm | β1 | β2 | … | βn
 Thay thế các nhóm luật sinh trên bằng các luật sinh sau :
o A → β1A’ | β2A’ | … | βnA’
o A’→ α1A’ | α2A’ | … | αm A’ | 
 Ví dụ :

EE+T|T
TT*F|F
F  (E) | id
o Khử đệ quy trái cho văn phạm trên :
E  TE’
E’  +TE’ | 
T  FT’
T’  *FT’ | 
F  (E) | id

b. Tính tập FIRST


 Định nghĩa :
 Nếu  là một xâu thì First() là tập hợp các ký hiệu kết thúc mà nó bắt
đầu một chuỗi dẫn xuất từ 
 Nếu   *  thì  thuộc First()
 Cách tính FIRST
 Nếu X là kí hiệu kết thúc thì First(X) là {X}
 Nếu X   là một luật sinh thì thêm  vào First(X)
 Nếu X  Y1Y2Y3…YK là một luật sinh thì :
o Thêm First(Y1) – {} vào First(X). Dừng nếu  ∉ First(Y1)
o Thêm First(Y2) – {} vào First(X). Dừng nếu  ∉ First(Y2)
o …
o Thêm First(Yk) – {} vào First(X). Dừng nếu  ∉ First(Yk)
o Thêm {} vào First(X)
 Ví dụ về cách tính First
 Cho văn phạm :
E  TE’
E’  +TE’ | 
T  FT’
T’  *FT’ | 
F  (E) | id

 Tính First
First( ( ) = { ( } First( T ) = { (, id }
First( ) ) = { ) } First( E ) = { (, id }
First( id ) = { id } First( E’ ) = { +, }
First( + ) = { + } First( T’ ) = { *,  }
First( * ) = { * } First( F ) = { (, id }

c. Tính tập FOLLOW


 Định nghĩa :
 Nếu A là một ký hiệu chưa kết thúc thì Follow(A) là tập các ký hiệu kết
thúc mà nó xuất hiện ngay bên phải A trong một dạng câu (S  * Aa)
 Nếu A là ký hiệu phải nhất trong một dạng câu (S  * A) thì $ thuộc
Follow(A)
 Cách tính Follow
 Tính First() của tất cả các ký hiệu của văn phạm.
 Áp dụng các quy tắc sau cho đến khi không thể thêm được gì vào mọi
tập Follow được nữa:
o Đặt $ vào Follow(S), với S là ký hiệu bắt đầu của văn phạm.
o Nếu A  B thì thêm First() \  vào Follow(B)
o Nếu
AB

{
AB
¿
Thì thêm Follow(A) vào Follow(B)

 Ví dụ
 Cho văn phạm :
E  TE’
E’  +TE’ | 
T  FT’
T’  *FT’ | 
F  (E) | id
 Tính Follow
Follow(E) = Follow(E’) = {$, )}
Follow(T) = Follow(T’) = {+, $, )}
Follow(F) = {*, + , $, )}
d. Xây dựng Passing Table M
 Với mỗi luật sinh A   của văn phạm, thực hiện các bước :
 Với mỗi kí hiệu kết thúc a ∈ FIRST(), thêm A   vào M[A,a]
 Nếu  ∈ FIRST() :
o Nếu  ∈ FIRST() thì đưa luật sinh A   vào M[A,b] với mỗi kí
hiệu kết thúc b ∈ FOLLOW(A)
o Nếu  ∈ FIRST() VÀ $ ∈ FOLLOW(A) thì đưa luật sinh A  
vào M[A,$]
 Ô còn trống trong bảng tương ứng với lỗi (error)
e. Ví dụ chứng minh :
 Cho văn phạm , hãy xây dựng bảng phân tích cú pháp đoán trước không đệ quy.
E  TE’
E’  +TE’ | 
T  FT’
T’  *FT’ | 
F  (E) | id

You might also like