Khi "làm việc trên ngôn ngữ mới" và cố gắng tham khảo BNF đúng, có thể bạn không muốn thiên vị ngữ pháp tham chiếu của mình đối với bất kỳ trình tạo trình phân tích cú pháp cụ thể nào. Một trong những khó khăn khi viết một ngữ pháp kiểm tra cho Bison (LALR (1)) hoặc ANTLR (LL *) là bạn làm chính xác điều đó. Bạn cũng không muốn bị treo lên trong "làm cách nào để mã các quy tắc BNF theo cách như vậy làm cho nó thực sự phân tích cú pháp" có lẽ vì bạn quan tâm đến việc làm về ngữ pháp, không hoạt động trên trình tạo trình phân tích cú pháp.
Vì vậy, tôi khuyên bạn nên sử dụng trình tạo trình phân tích cú pháp hoàn toàn miễn phí. Điều này sẽ cho phép bạn viết ngữ pháp ở dạng tự nhiên nhất với nỗ lực ít nhất. Điều này có nghĩa là từ bỏ "trình soạn thảo văn bản", "cửa sổ kiểm tra trình soạn thảo", ... nhưng trong kinh nghiệm của tôi (kiểm tra tiểu sử tràn ngăn xếp của tôi) bằng cách sử dụng trình tạo phân tích cú pháp miễn phí. Chỉnh sửa-lưu-phân tích cú pháp chỉ không mất nhiều công sức.
Tôi hiểu Bison có tùy chọn GLR sẽ cung cấp thế hệ phân tích cú pháp không có ngữ cảnh và là nguồn mở, vì vậy nó có thể thực hiện chỉ để kiểm tra ngữ pháp.
DMS Software Reengineering Toolkit của chúng tôi là thương mại và cũng cung cấp một trình phân tích cú pháp GLR, được sử dụng để thực hiện một số 30 langau đầy đủ bao gồm C, C++ và COBOL trong một số phương ngữ cũng như các ngôn ngữ hiện đại hơn như Python, Ruby, PHP, ....
Sự khác biệt giữa DMS và Bison là DMS được thiết kế để hỗ trợ tất cả các khía cạnh của việc xây dựng bộ phân tích/dịch ngôn ngữ đầy đủ (Unicode lexing, phân tích cú pháp GLR với báo cáo lỗi và phục hồi, xây dựng cây tự động , xây dựng bảng biểu tượng, kiểm soát và phân tích lưu lượng dữ liệu, biến đổi, in đẹp, ...). Nếu bạn muốn đánh giá nghiêm túc "langauge mới" của bạn, cuối cùng bạn sẽ cần phải làm tất cả những thứ này, và Bison chỉ là một bước nhỏ dọc theo con đường này. DMS sẽ mang bạn theo mọi cách.
Nguồn
2010-01-16 09:41:38
Liên quan: http://stackoverflow.com/questions/1800199/is-there-a-bnf-mode-for-emacs – dmckee