Giáo trình Chương trình dịch - Bài 7: Phân tích cú pháp tiền định - Nguyễn Thị Thu Hương
Với các khái niệm
FIRST
FOLLOW
Ta có thể xây dựng bộ phân tích cú pháp mà
không đòi hỏi quay lui
Chỉ có thể xây dựng bộ phân tích cú pháp như
vậy cho những văn phạm đặc biệt
Loại văn phạm như vậy bao gồm văn phạm một
số ngôn ngữ lập trình đơn giản, chẳng hạn
KPL,PL/0, PÁSCAL-S
3 trang |
Chia sẻ: huongthu9 | Lượt xem: 457 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Giáo trình Chương trình dịch - Bài 7: Phân tích cú pháp tiền định - Nguyễn Thị Thu Hương, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
21/1/2010
1
Bài 7
Phân tích cú pháp tiền định
1
Phân tích tiền định
Tư tưởng chính của phân tích cú pháp trên xuống :
Bắt đầu từ gốc, phát triển xuống các nút cấp dưới
Chọn một sản xuất và thử xem có phù hợp với xâu vào
không
2
Có thể quay lui
Có thể tránh được quay lui?
Cho sản xuất A → α | β bộ phân tích cú pháp cần chọn
giữa α và β
Làm thế nào?
Cho ký hiệu không kết thúc A và ký hiệu xem trước t, sản
xuất nào của A chắc chắn sinh ra một xâu bắt đầu bởi t?
Phân tích tiền định
Nếu có hai sản xuất: A→α⏐β , ta mong muốn
có một phương pháp rõ ràng để chọn đúng sản
xuất cần thiết
Định nghĩa:
3
Với α là một xâu chứa ký hiệu kết thúc và không
kết thúc, x ∈ FIRST(α) nếu từ α có thể suy dẫn ra
xγ (x chứa 0 hoặc 1 ký hiệu)
Nếu FIRST(α) và FIRST(β) không chứa ký
hiệu chung ta biết phải chọn A→α hay A→β
khi đã xem trước một ký hiệu
Phân tích tiền định
Tính FIRST(X):
Nếu X là ký hiệu kết thúc FIRST(X)={X}
Nếu X→ε là một sản xuất thì thêm ε vào
4
FIRST(X)
Nếu X là ký hiệu không kết thúc và
X→Y1Y2...Yn là một sản xuất , thêm
FIRST(Yi+1) vào FIRST(X) nếu FIRST(Yj)
chứa ε
21/1/2010
2
Phân tích tiền định
Điều gì xảy ra nếu ta có sản xuất để chọn là
A→α với α=ε hoặc α⇒*ε?
Có thể mở rộng nếu ta biết rằng có một dạng
ấ
5
câu mà ký hiệu đang xét xu t hiện sau A
Định nghĩa:
Với A là ký hiệu không kết thúc,
x∈FOLLOW(A) nếu và chỉ nếu Scó thể suy
dẫn ra αAxβ
Tính FOLLOW
FOLLOW(S) chứa EOF
Với các sản xuất dạng A→αBβ, mọi ký hiệu
trong FIRST(β) trừ ε tham gia vào
6
FOLLOW(B)
Với các sản xuất dạng A→αB hoặc
A→αBβ trong đó FIRST(β) chứa ε,
FOLLOW(B) chứa mọi ký hiệu của
FOLLOW(A)
Phân tích tiền định
Với các khái niệm
FIRST
FOLLOW
Ta có thể xây dựng bộ phân tích cú pháp mà
không đòi hỏi quay lui
7
Chỉ có thể xây dựng bộ phân tích cú pháp như
vậy cho những văn phạm đặc biệt
Loại văn phạm như vậy bao gồm văn phạm một
số ngôn ngữ lập trình đơn giản, chẳng hạn
KPL,PL/0, PÁSCAL-S
Bảng phân tích tiền định
Dùng cho bộ sinh phân tích cú pháp
Căn cứ
Ký hiệu đang xét
8
Ký hiệu đang ở đỉnh stack
Quyết định
Thay thế ký hiệu không kết thúc
Chuyển con trỏ sang ký hiệu tiếp
Chấp nhận xâu
21/1/2010
3
Ví dụ
Văn phạm:
E→TE'
E'→+TE'|ε
T→FT'
T'→*FT'|ε
F→(E)
F→id
9
FIRST(E) = FIRST(T) = FIRST(F) = {(, id}
FIRST(E') = {+, ε}
FIRST(T') = {*, ε}
FOLLOW(E) = FOLLOW(E') = {$, )}
FOLLOW(T) = FOLLOW(T') = {+, $, )}
FOLLOW(F) = {*, +, $, )}
Văn phạm này có thể xây dựng bộ phân tích tiền định
Bảng phân tích
E
E'
T
+
E'→+TE'
* (
E→TE'
T→FT'
)
E'→ε
id
E→TE'
T→FT'
$
E'→ε
10
T'
F
+
*
(
)
id
$
T'→ε
Đẩy
T'→*FT'
Đẩy
F→(E)
Đẩy
T'→ε
Đẩy
F→id
Đẩy
T'→ε
Nhận
Phân tích xâu vào id*id
sử dụng bảng phân tích và stack
Bước Stack Xâu vào Hành động kế tiếp
1 $E id*id$ E→TE'
2 $E'T id*id$ T→FT'
11
3 $E'T'F id*id$ F→id
4 $E'T'id id*id$ đẩy id
5 $E'T' *id$ T'→*FT'
6 $T'F* *id$ đẩy *
7 $T'F id$ F→id
8 $T'id id$ đẩy id
9 $T' $ T'→ε
10 $ $ nhận
Các file đính kèm theo tài liệu này:
- giao_trinh_chuong_trinh_dich_bai_7_phan_tich_cu_phap_tien_di.pdf