Tôi cần phân tích cú pháp 'một ngôn ngữ nhỏ' mà người dùng có thể nhập trên trang web của tôi. Tôi đã tự hỏi những gì các đối tác của lex và jacc hoặc antlr là cho thế giới của php.Trình tạo trình phân tích cú pháp tốt cho php là gì?
Trả lời
tôi đã sử dụng LIME Parser generator for PHP một vài năm trước đây, và nó đã trưởng thành và ổn định. Bản thân trình tạo trình phân tích cú pháp được viết bằng PHP, không thực sự quan trọng trong bất kỳ ý nghĩa kỹ thuật nào - vì chúng tôi chỉ yêu cầu trình phân tích cú pháp được tạo bằng PHP - nhưng tôi vẫn thích chi tiết này. Nó làm cho tôi cảm thấy ít xin lỗi về cách viết phần mềm trong PHP ;-)
EDIT:
tôi nên thêm:
đâu tôi đã viết "sử dụng" nó sẽ chính xác hơn để nói rằng tôi "đã chơi với". Tôi chưa viết mã sản xuất nào bằng vôi. Nhưng tôi thấy không có lý do gì để không làm như vậy.
"Ví dụ về máy tính" được cung cấp với vôi sử dụng phương thức tokenize() rất xa so với thay thế thực sự cho sức mạnh của lex. Nhưng nếu bạn cần một tokenizer thực nó nên có thể sử dụng lex trên "kết thúc trước" để nuôi tokens để vôi trên "back end".
Tôi đã chuyển Jison, một bản sao Bison trong javascript, sang php. Kết quả là một trình phân tích cú pháp kẻ giết người, có thể xử lý việc phân tích cú pháp/phân tích cú pháp rất đơn giản và rất phức tạp. Nó bây giờ là một phần của Jison, nhưng có một vài cập nhật trong ngã ba của tôi - https://github.com/robertleeplummerjr/jison. Các tệp đang ở đây - https://github.com/robertleeplummerjr/jison/tree/master/ports/php
Xem readme trong trang đó, bạn tạo một trình phân tích cú pháp javascript và php cùng một lúc có khả năng làm những việc giống nhau hoặc khác nhau. MÁT MẺ!
Tôi khuyên bạn nên viết trình phân tích cú pháp của riêng mình vì ngày nay nó khá dễ dàng.
Cách dễ nhất để làm như vậy là theo ý kiến của tôi để tạo một lớp cho mọi loại cú pháp có thể (biểu thức, kiểm tra, vòng lặp, v.v.).
Sau đó, trong mỗi lớp, mã các phương pháp sau:
- một phương pháp để quyết tâm từ một chuỗi nếu chuỗi là các loại nhất định (
a+b
là loại 'biểu hiện',if(b)
không) - một phương pháp để "chạy" kiểu này (
a+b
sẽ trở lạia->run() + b->run()
, vàa->run()
sẽ trả về một giá trị)
- 1. 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
- 2. Trình phân tích cú pháp XML tốt nhất cho PHP
- 3. Tạo trình phân tích cú pháp Brainfuck, phương pháp phân tích cú pháp vòng lặp tốt nhất là gì?
- 4. Trình phân tích cú pháp PHP cho các tệp cachegrind?
- 5. Trình phân tích cú pháp tốt nhất cho C#?
- 6. Trình phân tích cú pháp JSON tốt nhất cho Qt?
- 7. Máy phát PHP và trình phân tích cú pháp PHP?
- 8. Có trình phân tích cú pháp PDF cho PHP không?
- 9. trình phân tích cú pháp html tốt nhất cho java là gì?
- 10. 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?
- 11. Trình phân tích cú pháp SQL trong PHP?
- 12. Phân tích cú pháp là gì?
- 13. Cách tốt nhất để tái sử dụng trình phân tích cú pháp Lua là gì?
- 14. Trình triển khai phân tích cú pháp Javascript RDFa tốt là gì?
- 15. 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
- 16. Trình phân tích cú pháp YAML tốt nhất trong elisp là gì?
- 17. Trình phân tích cú pháp CSS C/C++ tốt là gì?
- 18. Trình phân tích cú pháp Wiki nào?
- 19. Cần trình phân tích cú pháp C++
- 20. Trình phân tích cú pháp SSI được viết bằng PHP?
- 21. Chọn trình phân tích cú pháp Haskell
- 22. Máy tạo phân tích cú pháp và Ragel ... Làm cho trình phân tích cú pháp D của riêng tôi
- 23. Trình phân tích cú pháp HTML
- 24. Trình phân tích cú pháp XML nhanh nhất có sẵn cho Delphi là gì?
- 25. Phân tích html với trình phân tích cú pháp SAX
- 26. Trình phân tích cú pháp JavaScript cho DOM
- 27. Trình phân tích cú pháp SVG Python
- 28. Trình phân tích cú pháp tùy chọn cho C/C++?
- 29. Trình phân tích cú pháp HTML cho GAE
- 30. Trình tạo phân tích cú pháp không cần quét
tôi thấy máy phát điện này nhưng nó là 4 tuổi. Tôi đã nghĩ rằng có thể có một cái gì đó nhiều hơn đến nay – Toad
Cho phép xem một số nội dung thay vì chỉ là một loạt các liên kết thời gian tới. –
@ts. Tôi đoán bạn biết bây giờ, nhưng điều này hoàn toàn là trách nhiệm của bạn, và của bạn một mình, như một nhà văn đăng :) –