Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
853,4 KB
Nội dung
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=1k 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: SF S (S+F) Fa Tính First, Follow tạo bảng phân tích LL(1) cho văn phạm sau: SA 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)