Ometa là "ngôn ngữ hướng đối tượng mới để đối sánh mẫu". Tôi đã gặp phải mẫu phù hợp trong các ngôn ngữ như công cụ Oz để phân tích cú pháp ngữ pháp như Lexx/Yacc hoặc Pyparsing trước đây. Mặc dù nhìn vào mã ví dụ, đọc các cuộc thảo luận và nói chuyện với một người bạn, tôi vẫn không thể hiểu được những gì làm cho Ometa trở nên đặc biệt (hoặc ít nhất, tại sao một số người nghĩ nó là). Có lời giải thích nào không?Điều gì làm cho Ometa trở nên đặc biệt?
Trả lời
Đó là một ngôn ngữ kim loại, từ những gì tôi có thể nói. Bạn có thể tạo các cấu trúc ngôn ngữ mới và tạo các DSL; nhưng điều hấp dẫn nhất là bạn có thể phân lớp từ các trình phân tích cú pháp hiện có để mở rộng một ngôn ngữ. Đó là những gì tôi có thể nhớ về nó, anyway.
Tôi thấy điều này là thú vị: http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html
Ngoài ra, quan trọng nhất đối với tôi, cảng Squeak của Ometa cho phép quy định trái đệ quy.
Từ di sản PEG của nó, nó trở ngược lại và không bị giới hạn. Việc ghi nhớ các kết quả phân tích cú pháp trước đó cho phép thời gian phân tích tuyến tính (gần như toàn bộ thời gian (*)).
Sản phẩm đặt hàng cao hơn cho phép người ta dễ dàng tái cấu trúc ngữ pháp.
This paper - Trình phân tích cú pháp Packrat có thể hỗ trợ đệ quy trái - giải thích các thuộc tính đệ quy trái.
(*) Phần 5 của bài báo giải thích rằng người ta có thể bị phân tích siêu thời gian phân tích cú pháp, nhưng vấn đề này không thể hiện trong ngữ pháp thực tế.
Có lẽ bạn không thể có cả thời gian đệ quy và tuyến tính phân tích cú pháp trái, mặc dù? –
Có thể, vì việc ghi nhớ. Vâng, hầu hết thời gian. Phần 5 của bài báo giải thích thêm. –
+1 cho sản phẩm đặt hàng cao cấp :) – elias
- 1. Điều gì đặc biệt về/dev/tty?
- 2. Điều gì khiến MVVM trở nên phù hợp với WPF?
- 3. Điều gì là đặc biệt về đóng cửa?
- 4. Điều gì đặc biệt về biến "tên" trong JavaScript?
- 5. Điều gì làm cho VxWorks trở nên quyết định và nhanh chóng?
- 6. Điều gì đặc biệt về chứng chỉ ký mã?
- 7. Điều gì để trở về từ một phương pháp thất bại và khi nào nên ném?
- 8. Điều gì tạo nên một đặc điểm kỹ thuật tuyệt vời?
- 9. Làm cho trường hợp mysql trở nên nhạy cảm?
- 10. Có điều gì đặc biệt về hàm init trong các đối tượng JavaScript không?
- 11. trong C++, có gì đặc biệt về "_MOVE_H"?
- 12. Trước khi XML trở thành một tiêu chuẩn và đưa ra tất cả những thiếu sót của nó, điều gì làm cho XML trở nên phổ biến?
- 13. Biệt hiệu cho các ký tự đặc biệt lập trình phổ biến là gì?
- 14. Điều gì sẽ khiến Intellij đột nhiên trở nên chậm chạp với scala?
- 15. Có điều gì đặc biệt về phần tử menu HTML5 mới không?
- 16. Hành vi đặc biệt của hành vi đặc biệt (lạ?)
- 17. Điều khiển WebBrowser khiến cho toàn bộ ứng dụng trở nên không phản hồi
- 18. Trình điều khiển ứng dụng nên làm gì?
- 19. Cần các chủ đề cho các điều khiển Bộ công cụ WPF (đặc biệt là DataGrid)
- 20. Điều gì làm cho Ruby trở thành một ngôn ngữ thanh lịch?
- 21. wget và các ký tự đặc biệt
- 22. gitweb trở nên chậm
- 23. sự khác biệt giữa "đặc điểm" và "đặc điểm mẫu" là gì?
- 24. Phạm vi Java đặc biệt
- 25. Ký tự đặc biệt trong SQL
- 26. Regex cho các tên có ký tự đặc biệt (Unicode)
- 27. Unbind event keypress đặc biệt
- 28. ghci trường hợp đặc biệt cho ứng dụng?
- 29. mailto ký tự đặc biệt
- 30. phát triển cho những người có nhu cầu đặc biệt
Phân lớp không phải là cách duy nhất để bạn có thể kết hợp các ngữ pháp, ometa cũng cung cấp cơ chế gọi quy tắc nước ngoài. Điều này rất hữu ích khi bạn muốn "lấy được" từ nhiều hơn một lớp. –