2011-08-23 37 views

Trả lời

4

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 INDENTDEDENT. Để đ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)) ' ' 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 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 INDENTDEDENT 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.

17

Dưới đây là một ví dụ whitespace sensitive language trong XText

+0

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

+0

Dường như được lưu trữ trên github bây giờ https://github.com/ralfebert/org.eclipselabs.todotext –

+2

Thật không may, tôi không thể tìm thấy mẫu này ở bất kỳ đâu. – rds

2

Đố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.

+0

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/) –

3

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.

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