2009-10-01 39 views

Trả lời

18

Tôi đã có trải nghiệm tốt với ANTLR v3. Cho đến nay, lợi ích lớn nhất là nó cho phép bạn viết các trình phân tích cú pháp LL (*) với các lookahead vô hạn - chúng có thể khá tối ưu, nhưng ngữ pháp có thể được viết theo cách đơn giản và tự nhiên nhất mà không cần phải tái cấu trúc và phân tích cú pháp hiệu suất thường không phải là một việc lớn (tôi hy vọng bạn không viết một trình biên dịch C++), đặc biệt là trong các dự án học tập.

Nó cũng cung cấp phương tiện khá tốt để xây dựng có ý nghĩa ASTs mà không cần viết bất kỳ mã nào - cho mỗi ngữ pháp sản xuất, bạn chỉ ra mã thông báo "" quan trọng hoặc tiểu sản xuất, và đó sẽ trở thành một nút cây. Hoặc bạn có thể viết một cây sản xuất.

Có một cái nhìn tại các văn phạm tiếng ANTLR sau (liệt kê ở đây theo thứ tự tăng độ phức tạp) để có được một ý chính của nó như thế nào trông và cảm thấy

+0

Cảm ơn! Đề xuất tốt – Nestor

+0

Cảm ơn Pavel lần nữa. Con trỏ rất hữu ích. – Nestor

1

Bạn có thể nghiên cứu mã nguồn cho Mono C# compiler.

+0

Cảm ơn. Tôi không cố gắng viết một trình phân tích cú pháp cho C#, nhưng là một trình phân tích cú pháp cho ngôn ngữ của riêng tôi, trình phân tích cú pháp được viết bằng C#. Cảm ơn nhiều vì gợi ý của bạn mặc dù. – Nestor

1

Mặc dù vẫn đang ở giai đoạn đầu phiên bản beta Oslo Công cụ mô hình hóa ngôn ngữ và MGrammar từ Micro mềm đang cho thấy một số lời hứa.

+0

Có. Tôi đã thấy rằng .. Tôi thích trình soạn thảo (điều chỉnh cú pháp tô sáng cho ngữ pháp của tôi). Nhưng hơi sớm để sử dụng nó .. có vẻ như vậy. – Nestor

+1

@Nestor - Tôi đồng ý rằng còn quá sớm để sử dụng nó, nhưng tôi nghĩ nó xứng đáng được đề cập đến. –

+0

+1 cho nhận xét của bạn. Đúng rồi.Tôi sẽ sử dụng Oslo nếu nó được phát hành cuối cùng. – Nestor

11

Tôi đã chơi wtih Irony. Nó trông đơn giản và hữu ích.

+1

Một khía cạnh tốt đẹp (ít nhất là tôi nghĩ) của Irony là bạn có thể viết ngữ pháp của bạn bằng một ngôn ngữ như C# – saret

1

Tôi cũng sẽ xem SableCC. Rất dễ dàng để tạo ra ngữ pháp EBNF. Here là một ví dụ C# máy tính đơn giản.

0

Lex và yacc vẫn là mục yêu thích của tôi. Ít người biết đến nếu bạn chỉ mới bắt đầu, nhưng cực kỳ đơn giản, nhanh chóng và dễ dàng một khi bạn đã có tiếng lóng.

Bạn có thể thực hiện bất kỳ điều gì bạn muốn; tạo mã C#, xây dựng các ngữ pháp khác, mô phỏng hướng dẫn, bất cứ điều gì.

Nó không đẹp, đó là định dạng dựa trên văn bản và LL1, do đó cú pháp của bạn phải phù hợp với điều đó.

Mặt khác, nó ở mọi nơi. Có rất nhiều sách O'reilly về nó, rất nhiều mẫu mã, rất nhiều ngữ pháp được tạo sẵn và rất nhiều thư viện ngôn ngữ bản địa.

1

Có một bài báo ngắn here khi xây dựng một trình phân tích cú pháp LL (1) ở đây, tất nhiên bạn cũng có thể sử dụng trình tạo.

Các vấn đề liên quan