Tôi đang sử dụng Bison để tạo trình phân tích cú pháp. Tôi đã có một sự thay đổi/giảm xung đột mà tôi thực sự cần Bison để sử dụng GLR thay vì LALR để đối phó với nó. Nhưng tôi đã thông qua chỉ thị %glr-parser
và tệp nguồn vẫn cho biết rằng đó là một trình phân tích cú pháp LALR. Tôi thậm chí còn tìm thấy một bộ xương "glr.cc" cho thấy rằng nó là một trình phân tích cú pháp GLR C++ và sử dụng nó bằng %skeleton "glr.cc"
không thay đổi đầu ra. Bison không gửi tất cả các thuật toán cho tất cả các ngôn ngữ đích của nó?Trình phân tích cú pháp C++ GLR với Bison
Trả lời
Bạn chỉ cần %glr-parser
để lấy trình phân tích cú pháp GLR. Lưu ý rằng các trình phân tích cú pháp GLR có thể STILL có xung đột (shift/reduce hoặc reduce/reduce), nó chỉ là trình phân tích cú pháp được tạo sẽ thử cả hai lựa chọn thay thế và thống nhất kết quả.
Nếu bạn muốn đóng thông điệp về xung đột, bạn có thể sử dụng %expect
và %expect-rr
. Hoever, chỉ mù quáng khi sử dụng trình phân tích cú pháp GLR mà bạn không hiểu tất cả các xung đột là nguy hiểm - trình phân tích cú pháp kết quả có thể mất nhiều thời gian để phân tích cú pháp đầu vào nếu bạn không cẩn thận hoặc có thể cung cấp cho bạn các lỗi mơ hồ khi chạy.
Điều này không thực sự trả lời câu hỏi - tôi đã nói rằng tôi đã cố gắng '% glr-parser' – Puppy
@DeadMG: sau đó bạn có trình phân tích cú pháp GLR. Chỉ các trình phân tích cú pháp GLR của nó có cùng một sự dịch chuyển/giảm và giảm/giảm xung đột như các trình phân tích cú pháp LALR, chúng chỉ xử lý chúng theo một cách khác. –
Tôi đã không nói rằng tôi không có một vì nó vẫn còn báo cáo xung đột, tôi nói tôi vẫn còn có một vì ý kiến của tập tin nguồn vẫn tuyên bố như vậy. – Puppy
Tôi không biết ý bạn là gì bởi "%skeleton "glr.cc"
không thay đổi đầu ra", bởi vì nó có! Bạn có chắc là bạn đã thực sự tái tạo đầu ra không? Nếu bạn đã làm, vui lòng cung cấp thêm chi tiết.
$ echo "%% exp: '0'" > /tmp/f.y
$ bison -S lalr1.cc /tmp/f.y -o f1.cc
$ bison -S glr.cc /tmp/f.y -o f2.cc
$ ls -l f1.cc f2.cc
-rw-r--r-- 1 akim wheel 28373 30 oct 09:29 f1.cc
-rw-r--r-- 1 akim wheel 82767 30 oct 09:29 f2.cc
- 1. Nhiều trình phân tích cú pháp flex/bison
- 2. Kết hợp Trình phân tích cú pháp Yacc/Bison với chương trình C++
- 3. Cần trình phân tích cú pháp C++
- 4. LLVM JIT Trình phân tích cú pháp bằng văn bản với Bison/Antlr/Packrat/Elkhound/
- 5. Phân tích html với trình phân tích cú pháp SAX
- 6. Có trình tạo trình phân tích cú pháp LALR kiểu yacc/bison tốt cho .NET không?
- 7. Kết hợp phân tích cú pháp phân tích cú pháp, phân tích cú pháp và phân tích cú pháp rừng
- 8. Trình tạo phân tích cú pháp không cần quét
- 9. Trình tạo trình phân tích cú pháp và trình phân tích cú pháp cho Common Lisp
- 10. Công cụ quét/phân tích cú pháp
- 11. Trình phân tích cú pháp tùy chọn cho C/C++?
- 12. Có trình phân tích cú pháp bison flex cho javascript không?
- 13. Trình phân tích cú pháp Wiki nào?
- 14. Trình phân tích cú pháp HTML
- 15. trình phân tích cú pháp asn.1 trong C/Python
- 16. Tìm kiếm trình phân tích cú pháp mã C#
- 17. Trình phân tích cú pháp để đọc Mục tiêu-C
- 18. Mã phân tích cú pháp C#
- 19. Trình phân tích cú pháp email Java?
- 20. Trình phân tích cú pháp tốt nhất cho C#?
- 21. Trình phân tích cú pháp phân tích cú pháp Haskell để gặp phải [...]
- 22. Sự khác biệt giữa trình phân tích cú pháp SAX XML, Kéo trình phân tích cú pháp & Trình phân tích cú pháp DOM trong android
- 23. C# Phân tích cú pháp tệp XML
- 24. Phân tích cú pháp là gì?
- 25. Tại sao không thể phân tích cú pháp C++ bằng trình phân tích cú pháp LR (1)?
- 26. Chọn trình phân tích cú pháp Haskell
- 27. Trình phân tích cú pháp SVG Python
- 28. Phân tích cú pháp IPv6 trong C
- 29. xây dựng một trình phân tích cú pháp với clang
- 30. Phân tích cú pháp dl với HtmlAgilityPack
bò rừng là phần mềm miễn phí, vì vậy bạn có thể nghiên cứu và cải thiện mã soruce của nó. Nhân tiện, bạn có cân nhắc sử dụng một trình tạo trình phân tích cú pháp khác, như ANTLR không? –
@Basile: Ngữ pháp của tôi không phải là LL. Để cải thiện mã nguồn của nó, bạn có nghĩa là, nếu tôi muốn xe tải thông qua sáu tỷ tiện ích hỗ trợ là tốt. – Puppy
ANTLR có một số hacks để đối phó với một số loại LL ngữ pháp không. –