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
- 1. Co sprawia, że członek związku jest aktywny?
- 2. Co sprawia, że moduł jest modułem pragmatycznym?
- 3. Co sprawia, że pylin myśli, że moja klasa jest abstrakcyjna?
- 4. Co sprawia, że ten Android App debuggable
- 5. Co sprawia, że portlet JSR-286 jest zgodny?
- 6. Co sprawia, że projekt Visual Studio 2013 jest projektem katana?
- 7. Co sprawia, że projekt ASP.NET jest aplikacją a biblioteką?
- 8. Co sprawia, że jedno z tych zapytań jest szybsze?
- 9. co sprawia, że zmienna jest widoczna (intellij idea)
- 10. Co sprawia, że domena z domeną ajax jest niepewna?
- 11. Co sprawia, że kolejność wykonywania wątków jest nieprzewidywalna?
- 12. Co zrobić, jeśli finalizator sprawia, że obiekt jest osiągalny?
- 13. Co sprawia, że liczba oczekujących oczekującej kolejki AMQ jest ujemna?
- 14. Sprawia, że element iframe jest niewidoczny.
- 15. UISearchController sprawia, że kontroler czarny
- 16. Co sprawia, że PHP wolniej niż Java lub C#?
- 17. Co sprawia, że Julia nie nadaje się do programowania ogólnego?
- 18. co sprawia, że const na niższych poziomach maszyny?
- 19. Co sprawia, że duża różnica między odgałęzieniem a apostrofem?
- 20. Co sprawia, że ta karta zmienia wymiary? [Video & Code]
- 21. Projekcja sprawia, że zapytanie wolniejsze
- 22. Jakie jest dokładne znaczenie inwazji? a co sprawia, że Spring jest nieinwazyjny?
- 23. ObjectAnimator z właściwością scale sprawia, że bg jest czarny?
- 24. Sprawia, że kod Pythona kontynuuje po wyjątku
- 25. Zatrzymanie Java i powiadamianie sprawia, że zakleszczenie
- 26. włączenie TypeFamilies sprawia, że kod nie jest już budowany
- 27. Dlaczego atrybut Browsable sprawia, że właściwość nie jest powiązana?
- 28. Wyjątkowa głębokość w log4j
- 29. Co sprawia, że Scheming oparty na sterty jest wolniejszy niż schemat oparty na stosie?
- 30. Co sprawia, że "Optional" Swifta jest bezpieczniejsze niż "zero" w Objective-C?
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. –