6

Đã một vài năm kể từ lớp học máy tính của tôi và vì vậy tôi đã quên đi những điểm tốt hơn của BNF và EBNF và tôi không có sách giáo khoa bên cạnh tôi. Cụ thể, tôi đã quên cách chuyển đổi EBNF thành BNF.Chuyển đổi EBNF sang BNF

Từ những gì tôi nhớ một chút, tôi biết rằng một trong những điểm chính là chuyển đổi { term } thành <term> | <many-terms>. Nhưng tôi không nhớ các quy tắc khác. Tôi đã cố gắng để tìm kiếm này trực tuyến nhưng tôi chỉ có thể tìm thấy các liên kết đến một trong hai câu hỏi bài tập về nhà, hoặc một bình luận nhỏ về chuyển đổi các điều khoản với niềng răng xoăn. Tôi không thể tìm thấy danh sách đầy đủ các quy tắc xác định bản dịch.

Trả lời

16

Xin vui lòng xem các liên kết sau, nó chứa các hướng dẫn đối với từng sản xuất mà cần phải được chuyển đổi:

http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

Đối với xây dựng phân tích cú pháp (đặc biệt là từ dưới lên) một văn phạm BNF là thường tốt hơn EBNF. Nhưng thật dễ dàng để chuyển đổi một EBNF Grammar để BNF:

  • Chuyển đổi mỗi lặp lại { E } đến một tươi phi terminal X và thêm

    X = ε | X E. 
    
  • Chuyển đổi tất cả các tùy chọn [ E ] đến một tươi phi terminal X và thêm

    X = ε | E. 
    

    (Chúng tôi có thể chuyển đổi X = A [ E ] B. thành X = A E B | A B.)

  • Chuyển đổi mỗi nhóm (E) đến một tươi phi terminal X và thêm

    X = E. 
    
  • Chúng tôi thậm chí có thể loại bỏ các lựa chọn thay thế bằng việc có một số sản phẩm với cùng phi thiết bị đầu cuối.

    X = E | E'. trở thành X = E. X = E'.

+0

Perfect! Đó chính xác là những gì tôi cần. Ai đó tôi chưa bao giờ tìm thấy liên kết đó! –

+1

Tôi nhận được 404 trên liên kết đó ngay bây giờ ... bất kỳ ý tưởng nào nếu có phiên bản cập nhật ở đâu đó? – Steve

+0

Than ôi, không phải là đỉnh đầu của tôi. Hy vọng rằng trang sẽ quay trở lại. –