Khi nhận một kí hiệu đầu vào, bộ phân tích văn phạm cần ngay lập tức quyết định sẽ sử dụng luật sinh nào cho trường hợp này. Quyết định chọn luật sinh nào cần phải đủ tốt để không [r]
(1)CHƯƠNG TRÌNH DỊCH
(2)Nội dung
1 Bộ phân tích cú pháp tất định Tiếp cận top-down
3 Phân tích LL(1)
FIRST
FOLLOW
Bảng phân tích LL(1) Ví dụ
(3)Bộ phân tích cú pháp tất định
(4)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
(5)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
(6)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
(7)(8)Tiếp cận top-down
(9)Tiếp cận top-down
Hãy quan sát q trình thực phân tích top-down 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 ⇒* ) ( )
(10)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?