2011-05-05 24 views
16

Tôi vừa mới bắt gặp công cụ Xtext rất đẹp để tạo DSL cũng như IDE để chỉnh sửa. Tôi đã thực hiện một số tìm kiếm trên web và thấy mọi người nói rằng nó không cung cấp tất cả các tính năng của ANTLR. Tôi đang sử dụng ANTLR làm trình tạo phân tích cú pháp của tôi.Các tính năng của ANTLR mà XText không cung cấp là gì?

Tôi thậm chí không chắc chắn tính năng nào của ANTLR tôi sẽ cần phải viết trình phân tích cú pháp hoàn chỉnh cho ngôn ngữ của tôi nhưng ANTLR có thời gian khá dài và có thể hỗ trợ nhiều tính năng hơn Xtext.

Có ai vui lòng gove một số ví dụ về những gì KHÔNG THỂ được chỉ định trong ngữ pháp Xtext không?

Trả lời

18

Bạn không thể chỉ định các vị từ ngữ nghĩa trong ngữ pháp Xtext. Hơn nữa, không thể bao gồm các hành động tùy ý (đọc: khối mã ngôn ngữ đích) với Xtext. Nền tảng đích duy nhất được hỗ trợ là Java.

Tin vui là, Xtext thu được lợi ích to lớn bằng cách gây ra các ràng buộc này, ví dụ: bạn sẽ nhận được một bộ giải mã cho phép tuần tự hóa các mô hình/biểu đồ cú pháp tùy ý phù hợp với ngữ pháp của bạn. Nói về đồ thị cú pháp, với Xtext bạn sẽ nhận được một AST được gõ cho ngôn ngữ của bạn mà bạn có thể chỉnh sửa trong IDE của bạn.

Tính năng ngữ pháp duy nhất trong biểu diễn của Xtext là các nhóm không có thứ tự. Tức là, bạn có thể trực tiếp thể hiện rằng các yếu tố nhất định trong ngữ pháp của bạn có thể xảy ra theo thứ tự tùy ý nhưng mỗi một chỉ một lần. Nếu bạn nghĩ về các bổ java, điều này có thể rất có ích:

visibility=('public'|'private') // this is a mandatory assignment 
& abstractOrFinal=('abstract'|'final')? // this is optional 
& static?='static'? // this will become a boolean value in your ast 

Có một cái nhìn tại Xtext docs để biết thêm chi tiết về các ngôn ngữ ngữ pháp.

+0

Điểm quan trọng là, Xtext sử dụng ANTLR nội bộ và afaik, bạn chắc chắn biết rõ hơn, Xtext sẽ sớm hay muộn hỗ trợ nhiều tính năng ANTLR như ưu tiên toán tử, đúng không? :) –

+0

Xtext có khái niệm Hành động (không phải bị nhầm lẫn với các chữ cái ngôn ngữ mục tiêu của hộp đen của Antlr) để thực thi quyền ưu tiên của toán tử. Nó hoạt động rất tốt cho chúng tôi đặc biệt là trong một môi trường tương tác, nơi các vấn đề phục hồi lỗi rất nhiều. Tôi nghi ngờ rằng chúng tôi sẽ di chuyển lược đồ mới Antlr để thực hiện các tiền lệ. –