Trình tạo trình phân tích cú pháp/phân tích cú pháp nào là tốt nhất (dễ sử dụng nhất, nhanh nhất) cho C hoặc C++? Tôi đang sử dụng flex và bison ngay bây giờ, nhưng bison chỉ xử lý LALR (1) ngữ pháp. Ngôn ngữ tôi đang phân tích cú pháp không thực sự là cần tra cứu không giới hạn, nhưng lookahead không giới hạn sẽ phân tích cú pháp nhiều hơn dễ dàng hơn. Tôi có nên thử Antlr không? Coco/R? Elkhound? Thứ gì khác?Công cụ quét/phân tích cú pháp
Trả lời
Cập nhật 2015/01/05:
My câu trả lời ban trỏ đến một câu hỏi bây giờ xóa:
Có một loạt các câu trả lời tốt cho câu hỏi này đã có trong What parser generator do you recommend
Vì vậy, tôi đã lấy danh sách các mục từ số deleted answer on archive.org với ít nhất 1 phiếu bầu tại đây:
- Packrat
- Elkhound
- Antlr
- Spirit phần của Boost (C++)
- Lemon
- GOLD Parser
- DMS Software Rengineering Toolkit (không FOSS)
Tôi đã thực hiện một số hệ thống flex/bison bản thân mình nhưng bây giờ tôi sẽ thay thế cả hai bằng Lemon từ sqlite vì nó là một công cụ, re-entrant và thread an toàn cũng như có một mô hình streaming/pull-based.
Lemon trông rất đẹp, và tôi đã có thể giảm ngữ pháp xuống LALR (1), vì vậy tôi có thể sử dụng nó. – Zifre
Các lập trình viên ở stackoverflow cần kiểm tra trong hệ thống của họ trước khi họ xóa câu hỏi để đảm bảo rằng nó không được tham chiếu bởi bất kỳ ai. Bạn có nhớ một số gợi ý là gì không? –
Tôi đồng ý, câu trả lời này bây giờ hoàn toàn vô dụng – paulm
Tôi không biết những gì bạn đang tìm kiếm chính xác, nhưng tôi nghĩ rằng Boost Xpressive là giá trị xem xét ...
không chính xác một máy phát điện phân tích cú pháp nhưng một công cụ tuyệt vời để xử lý văn phạm và tôi cảm thấy nó có thể xử lý những cái lạ.
Tôi đã sử dụng hệ thống phân tích cú pháp GOLD (http://www.devincook.com/goldparser) với kết quả rất tốt. Dự án của tôi là nhỏ, một hệ thống phân tích cú pháp cho các tệp NC trong C. Nhưng tôi nghĩ rằng công cụ này cũng có thể xử lý các dự án phức tạp hơn.
Tin xấu là hầu hết các ngôn ngữ máy tính thực sự không phải là "LALR (1)", điều đó có nghĩa là bạn phải sử dụng để tấn công đáng kể để làm cho YACC phân tích cú pháp thực.
Nếu bạn đang thiết kế DSL, bạn có thể sử dụng bất kỳ trình tạo trình phân tích cú pháp LALR nào mà không gặp khó khăn chính xác vì bạn có thể thay đổi ngữ pháp của DSL khi trình tạo trình phân tích cú pháp phân tách. LL máy phát điện phân tích cú pháp chủ yếu là làm việc ở đây quá cho cùng một lý do nhưng việc thiếu đệ quy trái có thể là một nỗi đau thực sự.
Nếu bạn không chắc chắn theo cách bạn thích cú pháp của bạn, trình phân tích cú pháp GLR là những người thắng cuộc. Chúng tôi sử dụng chúng trong DMS Software Reengineering Toolkit và đã xây dựng các trình phân tích chất lượng sản xuất cho hơn 30 ngôn ngữ bao gồm C++, có định lý dân gian cho biết gần như không thể phân tích cú pháp. Định lý dân gian được bắt đầu bởi những người sử dụng các trình phân tích cú pháp LL và LALR để thử và xử lý C++. GLR làm điều đó dễ dàng.
Tuyên bố bò rừng mới nhất để thực hiện tra cứu không giới hạn, bằng (có hiệu lực) thực hiện nhiều phân tích cú pháp đồng thời. Nếu bạn đã đầu tư vào bò rừng bizon thì có thể bạn nên thử điều này, thay vì chuyển sang gói khác.
http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers
Tôi chưa tự sử dụng tính năng này.
Theo như các hệ thống khác, tôi đã sử dụng ANTLR. Tôi không đặc biệt thích nó (tài liệu không phải là rất tốt, và người ta phải tự yếu tố ngữ pháp của mình để phục vụ cho ưu tiên nhà điều hành), nhưng nó đã làm việc, và rất nhiều thề bởi nó chắc chắn đáng xem.
Tôi đã thử phân tích cú pháp Bison GLR, nhưng có vẻ như gây ra một số vấn đề với quyền ưu tiên của nhà điều hành và chậm hơn đáng kể. ANTLR khó sử dụng với C++ và tôi rất thích LR hơn các ngữ pháp kiểu LL. – Zifre
ANTLR làm cho mặt nạ không giới hạn rất dễ sử dụng tùy chọn 'quay lại'. Nó cũng có thể đủ điều kiện của bạn 'dễ sử dụng, nhanh nhất' tiêu chí vì nó có ANTLRWORKS cho phép bạn hình dung và gỡ lỗi ngữ pháp của bạn.
Một ưu điểm khác là nó giúp cho việc xây dựng AST dễ dàng hơn với sự hỗ trợ tích hợp cho việc xây dựng các AST bị thiếu trong bò rừng.
Với hai cuốn sách được xuất bản - 'ANTLR: Hướng dẫn dứt khoát' và 'Mẫu thiết kế ngôn ngữ', nó là một trong những công cụ được tài liệu hóa rất tốt. Bạn cũng có một danh sách gửi thư rất tích cực.
LRSTAR 6.4 có thể làm phân tích LR (k). Nó là một hệ thống dựa trên C++, thân thiện với Windows và Visual Studio. Nó tạo ra các trình phân tích cú pháp theo bảng tương tự như Bison. Nó cũng tạo ra các từ lóng bằng bảng, tương tự như "flex" và các lexers mã trực tiếp tương tự như "re2c". Tốc độ của mã được tạo ra gấp khoảng hai lần tốc độ của "bison" và "flex" tạo ra.
Bạn có thể sửa đổi tệp trình phân tích bộ khung và LRSTAR sẽ tạo mã theo cách bạn muốn hoặc bạn có thể viết lại tệp bộ xương bằng một ngôn ngữ khác, như C#.
Trình phân tích cú pháp LRSTAR có thể tự động xây dựng AST. Đó là giấy phép BSD nguồn mở. Mọi người đang sử dụng nó trên hệ thống UNIX/Linux và MAC OS sau khi biên dịch lại với GCC.
Bạn có ý nghĩa gì với "tốt nhất"? Bạn cần đặt câu hỏi của mình cụ thể hơn. –
Yêu cầu của bạn là gì? Là LALR (1) không đủ cho bạn, và nếu có, theo cách nào? –
Tôi là câu hỏi thứ hai của Brian. Bạn cần những gì để có thể làm? Làm thế nào là LALR (1) không đủ? –