CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

24 168 0
CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHƯƠNG TRÌNH DỊCH Bài 12: Phân tích cú pháp thuật toán LL Nội dung Giới thiệu phân tích cú pháp tất định Tiếp cận top-down Phân tích LL(1)     FIRST FOLLOW Bảng phân tích LL(1) Ví dụ Bài tập TRƯƠNG XUÂN NAM Phần Giới thiệu phân tích cú pháp tất định TRƯƠNG XUÂN NAM Ràng buộc thời gian tính tốn  Các thuật tốn phân tích vạn (CYK, Earley)  Phân tích văn phạm phi ngữ cảnh  Tốc độ chấp nhận được: O(n3) với n độ dài chuỗi vào  Đối với mã nguồn ngơn ngữ lập trình, giá trị n lên tới vài triệu, tốn phân tích văn phạm trở nên đặc biệt  Tốc độ chấp nhận gần tuyến tính O(n)  Văn phạm đơn giản, chặt chẽ, đơn nghĩa  Hệ nảy sinh nhu cầu xây dựng phân tích văn phạm tất định (deterministic) TRƯƠNG XUÂN NAM Chiến lược tất định  Thế “tất định” – ràng buộc độ phức tạp tính tốn O(n), hệ là:  Khi nhận kí hiệu đầu vào, phân tích văn phạm cần định sử dụng luật sinh cho trường hợp  Quyết định chọn luật sinh cần phải đủ tốt để khơng phải thử lại phương án khác  Tính chất “tất định” ~ khơng có quay lui  Cái giá phải trả cho “tất định”:  Văn phạm khơng cịn vạn  Nhưng văn phạm đủ tốt để dùng thực tế TRƯƠNG XUÂN NAM Kiến trúc chung: bảng phương án  Việc lựa chọn phương án suy dẫn dẫn tới yêu cầu cần nghiên cứu trước luật văn phạm có phương án phù hợp tình xảy  Các thuật tốn phân tích tất định sử dụng kĩ thuật xây dựng trước bảng phương án  Có nhiều kĩ thuật xây dựng bảng phương án khác ứng với phương pháp tiếp cận khác  Với loại bảng phương án, thuật tốn phân tích có khác biệt thực đoán nhận TRƯƠNG XUÂN NAM Kiến trúc chung: bảng phương án TRƯƠNG XUÂN NAM Phần Tiếp cận top-down TRƯƠNG XUÂN NAM Tiếp cận top-down  Hãy quan sát trình thực phân tích topdown chuỗi w = ( ) ( ) văn phạm: S→(S)S|  Cần tìm trình suy dẫn S ⇒* w = ( ) ( )  Ở có non-terminal S  Có terminal “(” “)”  Bước suy dẫn đầu tiên, S ⇒ ( S ) S ⇒* ( ) ( )  Vậy bước 2, cần tìm trình S ) S ⇒* ) ( )  Rõ ràng tình này, ta khơng thể áp dụng luật sinh S → ( S ) S mà phải sử dụng S →  TRƯƠNG XUÂN NAM Tiếp cận top-down Quan sát trình suy dẫn từ α ⇒* w, dễ thấy:  Nếu α bắt đầu terminal, terminal thiết phải trùng với kí hiệu bắt đầu w, tình ta gạt bỏ kí hiệu chuỗi  Nếu α bắt đầu non-terminal A, A thiết phải suy dẫn (trực tiếp gián tiếp) kí hiệu bắt đầu w (w1)   Ta dựa văn phạm G để tính A có suy w1 hay không?  Lập bảng phương án chiều, chiều gồm nonterminal, chiều gồm terminal, ta đưa tình áp dụng luật sinh cho cặp (A, w1) TRƯƠNG XUÂN NAM 10 Phần Phân tích LL(1) TRƯƠNG XUÂN NAM 11 Phân tích LL(1) Bước Chuỗi nguồn Chuỗi đích Hành động S$ ()()$ S→(S)S (S)S$ ()()$ gạt bỏ S)S$ )()$ S→ )S$ )()$ gạt bỏ S$ ()$ S→(S)S (S)S$ ()$ gạt bỏ S)S$ )$ S→ )S$ )$ gạt bỏ S$ $ S→ TRƯƠNG XUÂN NAM 12 Phân tích LL(1)  Như phân tích LL(1) hoạt động tương tự phân tích top-down, khơng có bước quay lui (vì khơng có lựa chọn thử-sai)  Vấn đề lớn nhất: xây dựng bảng phương án?  LL(1) nghĩa gì? Viết tắt “Left-to-right parse, Leftmost-derivation, 1-symbol lockahead”  Kí hiệu k LL(k) nghĩa phân tích nhìn trước k kí hiệu định TRƯƠNG XUÂN NAM 13 FIRST(X)  Nếu X kí hiệu kết thúc FIRST(X) {X}  Nếu X → ε luật sinh thêm ε vào FIRST(X)  Nếu X → Y1Y2Y3 Yk luật sinh thì:  Thêm tất ký hiệu kết thúc khác ε FIRST(Y1) vào FIRST(X)  Nếu ε ∈ FIRST(Y1) tiếp tục thêm vào FIRST(X) tất ký hiệu kết thúc khác ε FIRST(Y2)  Nếu ε ∈ FIRST(Y1) ∩ FIRST(Y2) thêm tất ký hiệu kết thúc khác ε ∈ FIRST(Y3)  Tiếp tục Yk  Thêm ε vào FIRST(X) ε ∈ ∩i=1k FIRST(Yi) TRƯƠNG XUÂN NAM 14 FIRST(α) Định nghĩa FIRST(α): giả sử α chuỗi ký hiệu văn phạm, FIRST(α) tập hợp ký hiệu kết thúc mà bắt đầu chuỗi dẫn xuất từ α  Giả sử α = X1X2…Xn  Thêm vào FIRST(α): FIRST(X1)-{ε}  Với i=2,3,…,n; FIRST(Xk) chứa ε với k=1,2…,i-1 thêm vào FIRST(α): FIRST(Xi)-{ε}  Nếu với i=1,2,…n; FIRST(Xi) chứa ε thêm ε vào FIRST(α) TRƯƠNG XUÂN NAM 15 Tính FIRST: ví dụ Xét văn phạm G: E → T E' E' → + T E' | ε T → F T' T' → * F T' | ε F → (E) | id  FIRST(E) = FIRST(T) = FIRST(F) = { (, id }  FIRST(E') = { +, ε }  FIRST(T') = { *, ε } TRƯƠNG XUÂN NAM 16 FOLLOW Ðịnh nghĩa FOLLOW(A): tập hợp ký hiệu kết thúc a mà xuất sau A (bên phải A) dạng câu  Tức tập hợp ký hiệu kết thúc a, cho tồn dẫn xuất dạng S ⇒* αAaβ  Chú ý A ký hiệu phải dạng câu $ ∈ FOLLOW(A) ($ ký hiệu kết thúc chuỗi nhập) TRƯƠNG XUÂN NAM 17 Tính FOLLOW Tính FOLLOW (A): áp dụng quy tắc sau khơng thể thêm vào tập FOLLOW  Ðặt $ vào follow(S), S ký hiệu bắt đầu văn phạm $ ký hiệu kết thúc chuỗi nhập  Nếu có luật sinh A→ αBβ thêm phần tử khác ε FIRST(β)vào FOLLOW(B)  Nếu có luật sinh A→ αB A→ αBβ mà ε ∈ FIRST(β) thêm tất phần tử FOLLOW(A) vào FOLLOW(B) TRƯƠNG XUÂN NAM 18 Tính FOLLOW: ví dụ Xét văn phạm G: E → T E' E' → + T E' | ε T → F T' T' → * F T' | ε F → (E) | id  FOLLOW(E) = FOLLOW(E') = { $, ) }  FOLLOW(T) = FOLLOW(T') = { +, ), $ }  FOLLOW(F) = {*,+, ), $ } TRƯƠNG XUÂN NAM 19 Bảng phân tích LL(1) Với luật sinh A→ α văn phạm, thực hiện: Với ký hiệu kết thúc a ∈ FIRST(α), thêm A→ α vào M[A,a] Nếu ε ∈ FIRST(α) đưa luật sinh A→ α vào M[A,b] với ký hiệu kết thúc b ∈ FOLLOW(A) Nếu ε ∈ FIRST(α) $ ∈ FOLLOW(A) đưa luật sinh A→ α vào M[A,$] Các ô trống bảng tương ứng với lỗi (error) Chú ý: bảng chứa nhiều suy dẫn, tình gọi bảng có nhập nhằng TRƯƠNG XUÂN NAM 20 Ví dụ Xét văn phạm G: E → T E' T → F T' E' → + T E' | ε T' → * F T' | ε TRƯƠNG XUÂN NAM F → (E) | id 21 Phần Bài tập TRƯƠNG XUÂN NAM 22 Bài tập Tính First, Follow tạo bảng phân tích LL(1) cho văn phạm sau: S  Ac | BBc C  b | bCd D  bd | bDd A  BC B  dBb | dDb |  Tính First, Follow tạo bảng phân tích LL(1) cho văn phạm sau: S  AD | abc B  dBc | CC C  DCb | CDb |  A  Bc D  Dd |  TRƯƠNG XUÂN NAM 23 Bài tập Tạo bảng phân tích LL(1) q trình phân tích chuỗi w = (a+a) với văn phạm G sau đây: SF S  (S+F) Fa Tính First, Follow tạo bảng phân tích LL(1) cho văn phạm sau: SA A  T | A+T T  b | (A) Tính First, Follow tạo bảng phân tích LL(1) cho văn phạm sau: E  E or T | T T  T and F | F F  not F | ( E ) | x TRƯƠNG XUÂN NAM 24 ... dung Giới thiệu phân tích cú pháp tất định Tiếp cận top-down Phân tích LL( 1)     FIRST FOLLOW Bảng phân tích LL( 1) Ví dụ Bài tập TRƯƠNG XUÂN NAM Phần Giới thiệu phân tích cú pháp tất định TRƯƠNG... NAM 12 Phân tích LL( 1)  Như phân tích LL( 1) hoạt động tương tự phân tích top-down, khơng có bước quay lui (vì khơng có lựa chọn thử-sai)  Vấn đề lớn nhất: xây dựng bảng phương án?  LL( 1) nghĩa... Follow tạo bảng phân tích LL( 1) cho văn phạm sau: S  AD | abc B  dBc | CC C  DCb | CDb |  A  Bc D  Dd |  TRƯƠNG XUÂN NAM 23 Bài tập Tạo bảng phân tích LL( 1) q trình phân tích chuỗi w = (a+a)

Ngày đăng: 08/09/2020, 18:06

Hình ảnh liên quan

Kiến trúc chung: bảng phương án - CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

i.

ến trúc chung: bảng phương án Xem tại trang 7 của tài liệu.
 Vấn đề lớn nhất: làm sao xây dựng được bảng phương án? - CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

n.

đề lớn nhất: làm sao xây dựng được bảng phương án? Xem tại trang 13 của tài liệu.
Bảng phân tích LL(1) - CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

Bảng ph.

ân tích LL(1) Xem tại trang 20 của tài liệu.
1. Tính First, Follow và tạo bảng phân tích LL(1) cho văn phạm sau: - CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

1..

Tính First, Follow và tạo bảng phân tích LL(1) cho văn phạm sau: Xem tại trang 23 của tài liệu.
3. Tạo bảng phân tích LL(1) và chỉ ra quá trình phân tích chuỗi  w = (a+a)với văn phạm G sau đây: - CHƯƠNG TRÌNH DỊCH. Bài 12: Phân tích cú pháp bằng thuật toán LL

3..

Tạo bảng phân tích LL(1) và chỉ ra quá trình phân tích chuỗi w = (a+a)với văn phạm G sau đây: Xem tại trang 24 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan