Làm cách nào để sử dụng Xtext để phân tích ngôn ngữ bằng khoảng trắng ngữ nghĩa? Tôi đang cố gắng viết một ngữ pháp cho CoffeeScript và tôi không thể tìm thấy bất kỳ tài liệu nào tốt về điều này.Xtext: ngữ pháp cho ngôn ngữ có khoảng trắng quan trọng/ngữ nghĩa
Trả lời
AFAIK, bạn không thể.
Trong trường hợp phân tích cú pháp các ngôn ngữ giống Python, bạn cần có từ khóa để phát ra các mã thông báo INDENT
và DEDENT
. Để điều đó xảy ra, bạn cần các thuộc tính ngữ nghĩa để được hỗ trợ bên trong các quy tắc lexer (các quy tắc terminal
của Xtext) trước tiên sẽ kiểm tra xem vị trí hiện tại trong dòng của ký tự tiếp theo int đầu vào bằng 0 (đầu dòng)) và là ' '
hoặc '\t'
.
Nhưng duyệt qua documentation, tôi không thấy điều này được hỗ trợ bởi Xtext tại thời điểm này. Kể từ Xtext 2.0, hỗ trợ có được thêm vào cho các vị từ ngữ nghĩa trong các quy tắc sản xuất (xem: 6.2.8. Cú pháp Predicates), nhưng không phải trong các quy tắc đầu cuối.
Cách duy nhất để thực hiện điều này với Xtext sẽ là để lexer tạo không gian đầu cuối và ngắt dòng, nhưng điều này sẽ tạo ra sự lộn xộn hoàn toàn trong quy tắc sản xuất của bạn.
Nếu bạn muốn phân tích một ngôn ngữ như sử dụng Java (và một máy phát điện phân tích cú pháp Java hướng) tôi khuyên bạn nên ANTLR, trong đó bạn có thể phát ra như vậy INDENT
và DEDENT
tokens khá dễ dàng. Nhưng nếu bạn quan tâm đến việc tích hợp Eclipse, thì tôi không thấy làm thế nào bạn có thể làm điều này bằng Xtext, xin lỗi.
Dưới đây là một ví dụ whitespace sensitive language trong XText
Đối với những người quan tâm đến CoffeeScript, Adam Schmideg có Eclipse plugin that uses XText.
Đối với những người quan tâm đến phân tích cú pháp giống như Python trong XText, mã Ralf Ebert cho Todotext được đề cập ở trên không còn có sẵn từ Github nhưng bạn có thể tìm thấy nó trong Eclipse test repository. Xem original thread về tác phẩm này và Eclipse issue đã được nêu lên.
Tôi đã chơi với mã này ngày hôm nay và kết luận của tôi là nó không còn hoạt động trong phiên bản hiện tại của XText nữa. Khi XText được sử dụng trong Eclipse, tôi nghĩ rằng nó "phân tích cú pháp một phần". Điều này không tương thích với lexer stateful bạn cần phải xử lý các ngôn ngữ thụt đầu dòng. Vì vậy, tôi nghi ngờ ngay cả khi bạn vá lexer, trình soạn thảo Eclipse không hoạt động. Trong vấn đề, có vẻ như Ralf đề xuất các bản vá lỗi để giải quyết những vấn đề này, nhưng nhìn vào nguồn XText, những thay đổi này có vẻ đã biến mất lâu rồi? Nếu tôi sai và ai đó có thể làm cho nó hoạt động, tôi sẽ rất quan tâm?
Có một triển khai khác nhau here nhưng tôi không thể làm điều đó để làm việc với phiên bản hiện tại của XText.
Thay vào đó tôi đã chuyển sang parboiled không hỗ trợ indentation based grammars ra khỏi hộp.
Những người khác gặp sự cố tương tự: [đăng trên danh sách XText tháng 3 năm 2013] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –
Phiên bản 2.8 của Xtext đi kèm với hỗ trợ cho Whitespace-Aware Languages. Phiên bản này đi kèm với "Ví dụ về Tự động hóa tại nhà" mà bạn có thể sử dụng làm mẫu.
- 1. Xtext - nhiều tệp ngôn ngữ
- 2. Tìm kiếm trình phân tích cú pháp ngữ nghĩa tốt cho ngôn ngữ tiếng Nga
- 3. Ngữ pháp thích hợp cho ngôn ngữ này là gì?
- 4. "Ngôn ngữ chính" nghĩa là gì?
- 5. Đa ngôn ngữ Ngôn ngữ
- 6. Định nghĩa ngữ pháp EBNF cho PHP?
- 7. Sự khác nhau giữa cú pháp và ngữ nghĩa của ngôn ngữ lập trình là gì?
- 8. Làm cách nào để triển khai ngôn ngữ có cùng ngôn ngữ nhanh hơn ngôn ngữ?
- 9. Mẫu quan sát bằng ngôn ngữ Go
- 10. Android: chọn giữa hai ngôn ngữ không có "ngôn ngữ"
- 11. Tôi có thể tìm ngữ pháp BNF hoặc YACC chuẩn cho ngôn ngữ C++ ở đâu?
- 12. File ReadAllLines biến ngôn ngữ nước ngoài thành ngữ pháp ()
- 13. Khung ngữ nghĩa ngữ nghĩa
- 14. Ngôn ngữ lập trình có nên trực quan không?
- 15. Điều này có ý nghĩa gì trong ngôn ngữ Ruby?
- 16. "./..." trong "go install./..." có nghĩa là ngôn ngữ đi?
- 17. 'Ngôn ngữ xây dựng' có nghĩa là gì?
- 18. 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?
- 19. IDE cho ngôn ngữ OCaml
- 20. Symfony2 Ngôn ngữ cho TLD
- 21. Tiện ích biên tập ngữ pháp cho ngữ pháp không có ngữ cảnh trong Java
- 22. Ngôn ngữ lập trình PHP hoặc ngôn ngữ lập trình?
- 23. dịch một ngôn ngữ này sang ngôn ngữ khác?
- 24. PLT Redex: tham số hóa định nghĩa ngôn ngữ
- 25. Ngữ pháp ANTLR cho Scala?
- 26. Ngôn ngữ giải thích cho Javascript?
- 27. ngữ nghĩa đệ quy quá tải trong Scala REPL - ngôn ngữ JVM
- 28. Nhiều ngôn ngữ IDE
- 29. Ngôn ngữ keo là gì?
- 30. Vấn đề cú pháp hoặc ngữ nghĩa?
Cool (Tôi sẽ phải nghiên cứu kỹ vào XText một chút, câu hỏi trả lời _not_ trong thẻ này ... :))! Tôi không thể xóa câu trả lời của mình vì đó là câu trả lời được chấp nhậ[email protected] cần phải chấp nhận của bạn trước khi tôi có thể loại bỏ mỏ của tôi. –
Dường như được lưu trữ trên github bây giờ https://github.com/ralfebert/org.eclipselabs.todotext –
Thật không may, tôi không thể tìm thấy mẫu này ở bất kỳ đâu. – rds