2011-05-05 17 views
16

Właśnie natknąłem się na bardzo ładne narzędzie Xtext do tworzenia DSL oraz IDE do edycji. Zrobiłem kilka wyszukiwań w Internecie i znalazłem ludzi mówiących, że dows nie zapewniają wszystkich funkcji ANTLR. Używam ANTLR jako mojego generatora analizatora składni.Jakie funkcje ANTLR nie oferuje XText?

Nie jestem nawet pewien, jakie funkcje ANTLR będę potrzebować do napisania kompletnego parsera dla mylanguage, ale ANTLR jest dostępny od dłuższego czasu i prawdopodobnie obsługuje więcej funkcji niż Xtext.

Czy ktoś może podać przykłady tego, czego NIE MOŻNA określić w gramatyce Xtext?

Odpowiedz

18

Nie można określać semantycznych predykatów w gramatyce Xtext. Ponadto nie można włączyć dowolnych działań (read: bloki kodu języka docelowego) za pomocą Xtext. Jedyną obsługiwaną platformą docelową jest Java.

Dobrą wiadomością jest to, że Xtekst zyskuje wielką korzyść poprzez wywoływanie tych ograniczeń, np. otrzymasz nieparametr, który pozwala na szeregowanie dowolnych modeli/wykresów składni pasujących do twojej gramatyki. Mówiąc o grafach składniowych, z Xtext otrzymasz wpisaną AST dla twojego języka, którą możesz edytować w swoim IDE.

Funkcja gramatyczna unikatowa w reprezentacji Xtext to grupy nieuporządkowane. Oznacza to, że możesz bezpośrednio wyrazić, że niektóre elementy gramatyki mogą występować w dowolnej kolejności, ale każda z nich tylko raz. Jeśli myślisz o modyfikatorów Java, może to być bardzo przydatny:

visibility=('public'|'private') // this is a mandatory assignment 
& abstractOrFinal=('abstract'|'final')? // this is optional 
& static?='static'? // this will become a boolean value in your ast 

Wystarczy popatrzeć na Xtext docs więcej szczegółów na temat gramatyki języka.

+0

Ważnym punktem jest to, że Xtext używa wewnętrznie ANTLR i afaik, na pewno wiesz lepiej, Xtext prędzej czy później będzie obsługiwał więcej funkcji ANTLR, takich jak pierwszeństwo operatora itp. :) –

+0

Xtext ma koncepcję Actions (a nie pomieszać z literałami języka docelowego Antlr w czarnej skrzynce), aby wprowadzić pierwszeństwo operatora. Działa to bardzo dobrze, szczególnie w interaktywnym środowisku, w którym odzyskiwanie po błędzie ma duże znaczenie. Wątpię, abyśmy przenieśli nowy program Antlr w celu realizacji preendencji. –