2010-08-04 29 views
5

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?

+3

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

+0

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

+0

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

Trả lời

6

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

+1 cho "Sớm hơn là sau" – Mawg

2

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ụ.

Các vấn đề liên quan