2008-09-19 18 views
23

Ometa to "nowy obiektowy język do dopasowywania wzorców". Spotkałem się z dopasowywaniem wzorców w językach takich jak narzędzia Oz, aby parsować gramatyki takie jak Lexx/Yacc lub Pyparsing wcześniej. Mimo obejrzenia przykładowego kodu, czytania dyskusji i rozmowy z przyjacielem nadal nie jestem w stanie zrozumieć, co sprawia, że ​​Ometa jest wyjątkowa (a przynajmniej dlaczego niektórzy tak uważają). Jakieś wyjaśnienie?Co sprawia, że ​​Ometa jest wyjątkowa?

Odpowiedz

8

To jest metajęzyko, z tego co wiem. Możesz tworzyć nowe konstrukcje językowe i tworzyć listy DSL; ale najbardziej interesującą rzeczą jest to, że możesz podklasować z istniejących parserów, aby rozszerzyć język. I tak o tym pamiętam.

Znalazłem to być ciekawe: http://www.moserware.com/2008/06/ometa-who-what-when-where-why.html

+1

Podklasy to nie jedyny sposób, w jaki można łączyć gramatykę, ometa zapewnia także mechanizm wywoływania obcej reguły. Jest to przydatne, gdy chcesz "czerpać" z więcej niż jednej klasy. –

11

Również dla mnie najważniejsze, port pisk Ometa pozwala na zasadach lewych-rekurencyjne.

Ze swojego dziedzictwa PEG cofa się i nieskończenie przewyższa. Zapamiętywanie poprzednich wyników analizy pozwala na liniowe przeanalizowanie czasu (prawie cały czas (*)).

Produkcja wyższego rzędu pozwala łatwo zmienić gramatykę.

This paper - Parser Packrat obsługuje lewą rekursję - wyjaśnia lewe właściwości rekursywne.

(*) Sekcja 5 artykułu wyjaśnia, że ​​można cierpieć na superlinię czasu analizy, ale problem ten nie występuje w gramatykach praktycznych.

+0

Przypuszczalnie nie można mieć jednak obu lewych rekurencji i czasu analizy liniowej? –

+0

Tak, dzięki memoizacji możesz. Cóż, większość czasu. Rozdział 5 artykułu wyjaśnia dalej. –

+0

+1 dla wysokiej jakości produkcji zamówień :) – elias

Powiązane problemy