Tôi đang cố viết một công cụ biểu thức chính quy. Tôi muốn viết một trình phân tích cú pháp gốc đệ quy bằng tay. Ngữ pháp tự do ngữ cảnh mà không có sự đệ quy trái cho ngôn ngữ của các biểu thức thông thường (không phải ngôn ngữ có thể được mô tả bằng các cụm từ thông dụng) trông như thế nào? Có dễ nhất để xác định lại đường cú pháp, tức là thay đổi a+
thành aa*
không? Cảm ơn trước!Ngữ pháp không có ngữ cảnh mô tả các biểu thức chính quy?
Trả lời
đệ quy trái:
Expression = Expression '|' Sequence
| Sequence
;
Sequence = Sequence Repetition
| <empty>
;
phải đệ quy:
Expression = Sequence '|' Expression
| Sequence
;
Sequence = Repetition Sequence
| <empty>
;
mơ hồ dạng:
Expression = Expression '|' Expression
| Sequence
;
Sequence = Sequence Sequence
| Repetition
| <empty>
;
Bài viết wikipedia trên Left Recursion cung cấp thông tin khá tốt về cách tắt tính năng này.
Nó không phải là tôi cần phải tái yếu tố ngữ pháp với đệ quy trái, mà đúng hơn là tôi đang cố gắng để cảm nhận về ngữ pháp sẽ trông như thế nào nói chung. Trong khi tôi đã đọc về chúng rất nhiều, tôi chưa bao giờ thực sự sử dụng một ngữ pháp ngữ cảnh tự do 'trong tự nhiên' để nói. – wkf
Bạn có thể nhìn vào source code for Plan 9 grep. Các tập tin grep.y có một yacc (LALR (1) nếu tôi nhớ lại chính xác) ngữ pháp cho các biểu thức thông thường. Bạn có thể bắt đầu từ ngữ pháp yacc và viết lại nó để phân tích cú pháp gốc đệ quy.
- 1. Có phải Ruby 1.9 biểu thức chính quy không kém phần mạnh mẽ đối với ngữ cảnh tự do ngữ cảnh không?
- 2. Ngữ pháp của các ngôn ngữ lập trình hiện đại không có ngữ cảnh hay nhạy cảm với ngữ cảnh?
- 3. Phương ngữ biểu thức chính quy hiện đại có thường xuyên không?
- 4. Tại sao C++ 11 hỗ trợ 6 ngữ pháp biểu thức chính quy khác nhau?
- 5. Tiện ích biên tập ngữ pháp cho ngữ pháp không có ngữ cảnh trong Java
- 6. Có một ngữ pháp ngôn ngữ js chính tả (lý tưởng BNF) chính thức (hay chỉ là tập hợp con kiểu)?
- 7. Ngữ pháp PEG không phải là đệ quy trái cho một "biểu thức"
- 8. ngữ pháp biểu thức boolean và số học trong ANTLR
- 9. Là "regex" trong các ngôn ngữ lập trình hiện đại thực sự "ngữ pháp ngữ cảnh nhạy cảm"?
- 10. Phân tích cú pháp ngữ pháp không có ngữ cảnh bằng Python
- 11. Biểu thức chính quy JavaScript
- 12. Ngữ cảnh miễn phí ngữ cảnh cho không phải palindrome
- 13. "Thiếu ngữ cảnh cho khai báo phương thức" đối với phương thức mô tả bị ghi đè
- 14. Xây dựng một mô hình ngôn ngữ tự nhiên, có thể chữa lỗi chính tả
- 15. Ngữ pháp ngữ cảnh miễn phí cho C
- 16. Có ngữ pháp C++ chuẩn nào không?
- 17. Đặc tả ngôn ngữ PHP?
- 18. Đặc tả ngôn ngữ chính của Đề án
- 19. Tôi có thể tìm thấy ngữ pháp chính thức cho ngôn ngữ lập trình Perl ở đâu?
- 20. Giao thức mô tả Python tương tự trong các ngôn ngữ khác?
- 21. Các biểu thức chính quy thông thường
- 22. Tại sao không có tiêu chuẩn biểu thức chính quy?
- 23. Có thể có regexp phù hợp với tất cả các biểu thức chính quy hợp lệ không?
- 24. Ngữ nghĩa chính thức về định vị hộp CSS
- 25. Ngôn ngữ mô tả chung Cấu trúc dữ liệu
- 26. Cách kết hợp Ngữ pháp (Quy tắc) & Chính tả (Tự do ngôn luận) với SpeechRecognizer trong C#
- 27. Biểu thức chính quy không tuân thủ
- 28. Ngữ pháp tổng hợp
- 29. Mô tả ngắn gọn về các quy tắc phạm vi?
- 30. Biểu thức chính quy để tìm các không gian
Ngay trên người đàn ông; bạn đã trả lời tất cả các câu hỏi của tôi tối nay. Cảm ơn! – wkf