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