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
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
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.
Przypuszczalnie nie można mieć jednak obu lewych rekurencji i czasu analizy liniowej? –
Tak, dzięki memoizacji możesz. Cóż, większość czasu. Rozdział 5 artykułu wyjaśnia dalej. –
+1 dla wysokiej jakości produkcji zamówień :) – elias
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. –