Tôi đang viết một ngôn ngữ mẫu văn bản đơn giản cho một ứng dụng web tôi đang viết (nghĩ về ctemplate của google). Khi hoàn thành, nó sẽ chỉ tính năng một số ít các hành động có thể có, các công cụ đơn giản như "đánh giá và thực thi", "đánh giá và in", "đánh giá và thoát khỏi html", "nhận xét". Tôi đã nghĩ đến việc viết tay toàn bộ trình phân tích cú pháp từ đầu, nhưng tôi bắt đầu xem xét các trình tạo phân tích cú pháp như lex, flex và antlr. Điều này có vẻ giống như cách tôi cần cho cú pháp đơn giản của tôi. Vì vậy, câu hỏi là, tại điểm nào là nó thực tế để sử dụng một máy phát điện phân tích cú pháp?Khi nào thì thực tế để sử dụng trình tạo trình phân tích cú pháp?
Trả lời
Sớm hơn là sau này. Nếu bạn có một cú pháp đơn giản ngay bây giờ, việc sử dụng trình tạo trình phân tích cú pháp rất dễ dàng. Nó làm cho nó dễ dàng hơn khi bạn muốn thêm các biến và vòng lặp và điều kiện.
Nhưng chờ đã! - Có rất ít lý do để phát minh ra ngôn ngữ của riêng bạn trừ khi nó rất cụ thể về miền như eqn
hoặc TeX
hoặc ngôn ngữ lập mô hình phân tử. Bạn đang tốt hơn hết nhúng một ngôn ngữ được thiết kế đặc biệt cho mục đích này. Tcl là bảo vệ cũ trong lĩnh vực đó, với Python là một ứng cử viên mạnh mẽ. Perl cũng được thiết kế để trở thành một ngôn ngữ kịch bản được nhúng nhưng tôi nghĩ nó là một ứng cử viên nghèo vì nó có khả năng mang lại mã rất "chỉ viết" trong tay người dùng của bạn.
Thiết kế ngôn ngữ khó và hút tất cả các bit khó sử dụng vẫn khó hơn. Với cả Python và Tcl, bạn có thể quyết định số lượng ngôn ngữ cốt lõi để hiển thị cho người dùng của mình và mở các bit đã đóng khi bạn tìm thấy nhu cầu cho họ.
Ngôn ngữ nhỏ đầu tiên mà tôi viết (đáng kinh ngạc là vẫn đang được sử dụng trong sản xuất) sẽ tốt hơn rất nhiều nếu Tcl được sử dụng để thay thế.
+1 cho "Sớm hơn là sau" – Mawg
Một mặt nếu bạn không có kinh nghiệm với một trong những công cụ này và bạn có thời gian, thì có lẽ đây là cơ hội tốt để tìm hiểu một cho trường hợp sử dụng này. Tôi sẽ tưởng tượng rằng nếu bạn đã có kinh nghiệm trong những công cụ này, bạn chỉ cần sử dụng chúng, giống như nhiều lấy cho một regex cho nhiều nhiệm vụ phân tích cú pháp.
Mặt khác, các trình phân tích cú pháp đơn giản không khó thực hiện, chúng thậm chí không khó bảo trì. Tôi thích viết chúng, và tôi thường tiếp cận với họ khi nhiệm vụ cần một công cụ hơn là một công cụ (nhưng tôi không phải siêu quen thuộc với các công cụ). Trong nhiều trường hợp, tôi thích một trình phân tích cú pháp đơn giản hơn so với regex, tùy thuộc vào tác vụ.
- 1. Khi nào sử dụng trình tạo phân tích cú pháp, khi nào thì regex là đủ?
- 2. 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
- 3. Trình phân tích cú pháp Wiki nào?
- 4. Trình tạo phân tích cú pháp không cần quét
- 5. Cần trình phân tích cú pháp C++
- 6. Trình phân tích cú pháp phân tích cú pháp Haskell để gặp phải [...]
- 7. Trình phân tích cú pháp SVG Python
- 8. 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
- 9. Phân tích html với trình phân tích cú pháp SAX
- 10. Chọn trình phân tích cú pháp Haskell
- 11. Khi nào tôi nên sử dụng trình phân tích cú pháp?
- 12. Trình phân tích cú pháp HTML
- 13. Trình phân tích cú pháp email Java?
- 14. 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
- 15. Trình phân tích cú pháp XML nào cho Haskell?
- 16. 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ì?
- 17. tạo proxy bằng cách sử dụng phân tích cú pháp wsdl theo lập trình và wsdl
- 18. Làm cách nào để phân tích cú pháp HTML thực tế từ trang bằng CURL?
- 19. Trình phân tích cú pháp để đọc Mục tiêu-C
- 20. "Lỗi khi phân tích cú pháp tệp XML" khi phân tích cú pháp bằng cách sử dụng XInclude
- 21. Làm cách nào để tạo trình phân tích cú pháp HTML?
- 22. Các phương pháp hay nhất để viết trình phân tích cú pháp ngôn ngữ lập trình
- 23. 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
- 24. Sử dụng Phân tích cú pháp PEG để phân tích cú pháp BBCode: pegjs hoặc ... cái gì?
- 25. Trình phân tích cú pháp C++ GLR với Bison
- 26. Thực hiện phân tích cú pháp
- 27. Tìm kiếm trình phân tích cú pháp mã C#
- 28. Sử dụng JavaScript để phân tích cú pháp tệp XML
- 29. Tôi nên sử dụng trình phân tích cú pháp RSS nào trong PHP?
- 30. trình phân tích cú pháp asn.1 trong C/Python
Ouch. Nice ruse của Adobe để có được nhiều hơn họ (có thể) trả tiền cho. ;) "Gnu-flex" có phải là một thẻ tốt hơn không? – spender
Cuốn sách của các nhà lập trình thực dụng [Các mẫu thực hiện ngôn ngữ] (http://pragprog.com/titles/tpdsl/language-implementation-patterns) có một chương tuyệt vời đầu tiên thảo luận về các 'điểm mạnh' khác nhau của các trình phân tích cú pháp cho các ngôn ngữ khác nhau. – sarnold
Antlr là cách để đi, đặc biệt là vì gui AntlrWorks thực sự giúp gỡ lỗi ngữ pháp & cú pháp của bạn. – Mawg