Gần đây tôi đã viết một trình phân tích cú pháp bằng Python bằng cách sử dụng Ply (đó là sự tái triển khai python của yacc). Khi tôi gần như được thực hiện với trình phân tích cú pháp, tôi phát hiện ra rằng ngữ pháp mà tôi cần phải phân tích cú pháp yêu cầu tôi thực hiện một số tìm kiếm trong khi phân tích cú pháp để thông báo cho lexer. Mà không cần nhìn lên để thông báo cho lexer tôi không thể phân tích chính xác các chuỗi trong ngôn ngữ.Triển khai Python của Parsec?
Cho dù tôi có thể kiểm soát trạng thái của lexer từ các quy tắc ngữ pháp, tôi nghĩ rằng tôi sẽ giải quyết trường hợp sử dụng của mình bằng bảng tra cứu trong mô-đun phân tích cú pháp, nhưng có thể quá khó để duy trì/kiểm tra. Vì vậy, tôi muốn biết về một số tùy chọn khác.
Trong Haskell, tôi sẽ sử dụng Parsec, một thư viện các hàm phân tích cú pháp (được gọi là bộ phối hợp). Có một thực hiện Python của Parsec? Hoặc có lẽ một số thư viện chất lượng sản xuất khác có đầy đủ chức năng phân tích cú pháp để tôi có thể xây dựng một trình phân tích ngữ cảnh nhạy cảm trong Python?
CHỈNH SỬA: Tất cả các nỗ lực của tôi trong phân tích ngữ cảnh miễn phí đều không thành công. Vì lý do này, tôi không mong đợi ANTLR hữu ích ở đây.
Trong trường hợp của tôi, tôi cần nhiều hơn phân tích cú pháp truyền thống cho phép. Tất cả những nỗ lực của tôi trong việc viết một trình phân tích ngữ cảnh miễn phí truyền thống đã rơi trên khuôn mặt của họ vì lý do lý thuyết. Tôi khá tự tin vào thời điểm này mà tôi cần lexing có điều kiện ở mức tối thiểu. ANTLR vẫn sẽ được áp dụng? –
Bạn có * lookahead với ANTLR và nếu bạn cần bạn có thể thêm cú pháp và vị ngữ vào ngữ pháp của bạn (ngữ nghĩa ngữ nghĩa cũng tồn tại). sử dụng antlrwork, nó thực sự hữu ích cho việc thiết kế/gỡ lỗi ngữ pháp (http://www.antlr.org/works/index.html). Có sẵn ngữ pháp đã sẵn sàng trên trang web ANTLR. –