2008-09-19 28 views
23

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

8

Đó 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

+1

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

11

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

+0

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ù? –

+0

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

+0

+1 cho sản phẩm đặt hàng cao cấp :) – elias

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