Jak używać Xtext do parsowania języków z semantycznymi białymi znakami? Próbuję napisać gramatykę dla CoffeeScript i nie mogę znaleźć żadnej dobrej dokumentacji na ten temat.Xtext: gramatyka dla języka ze znaczącymi/semantycznymi białymi znakami
Odpowiedz
AFAIK, nie możesz.
W przypadku parsowania języków podobnych do Python, potrzebujesz lexer do emitowania tokenów o wartości INDENT
i DEDENT
. Aby tak się stało, potrzebne byłyby semantyczne predykaty, które będą obsługiwane wewnątrz reguł leksykalnych (reguły Xtext'a: terminal
), które najpierw sprawdzą, czy aktualna pozycja w linii następnego znaku na wejściu równa się 0 (początek linii) i to ' '
lub '\t'
.
Jednak przeglądanie documentation, nie widzę w tej chwili obsługiwane przez Xtext. Od Xtext 2.0, wsparcie zostało dodane dla predykatów semantycznych w regułach produkcji (patrz: 6.2.8. Predykaty syntaktyczne), ale nie w regułach terminala.
Jedynym sposobem na wykonanie tego przy pomocy Xtext byłoby zezwolenie lexerowi na tworzenie przestrzeni końcowych i podziałów wierszy, ale spowodowałoby to całkowite zniekształcenie reguł produkcji.
Jeśli chcesz przeanalizować taki język, używając Java (Java i zorientowany generator parsera) Polecam ANTLR, w którym mogą emitować takie INDENT
i DEDENT
znaki dość łatwo. Ale jeśli interesuje Cię integracja Eclipse, to nie widzę, jak możesz to zrobić za pomocą Xtext, przepraszam.
Oto przykład whitespace sensitive language w XText
Dla osób zainteresowanych coffeescript Adam Schmideg ma Eclipse plugin that uses XText.
Dla osób zainteresowanych analizowaniem pythonopodobnych DSL w XText, kod Ralfa Eberta dla Todotext wspomnianego powyżej nie jest już dostępny z Github, ale można go znaleźć w Eclipse test repository. Zobacz: original thread na temat tej pracy i Eclipse issue, która została poruszona na ten temat.
Gram z tym kodem dzisiaj i mój wniosek jest już nie działa w obecnej wersji XText. Kiedy XText jest używany w Eclipse, myślę, że robi "częściowe parsowanie". To nie jest kompatybilne z statefulcxerem, którego potrzebujesz, aby przetworzyć języki wrażliwe na wcięcia. Podejrzewam, że nawet jeśli łatasz lexer, edytor Eclipse nie działa. W tym numerze wygląda na to, że Ralf zaproponował łaty do rozwiązania tych problemów, ale patrząc na źródło XText, te zmiany wydają się dawno już minęły? Jeśli się mylę i ktoś może go uruchomić, byłbym bardzo zainteresowany?
Istnieje inna implementacja here, ale nie mogę tego zrobić, aby działała z bieżącą wersją XText.
Zamiast tego przełączyłem się na parboiled, która nie obsługuje już okna indentation based grammars.
Inni mają ten sam problem: [post na liście XText marzec 2013] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –
Wersja 2.8 tekstu XText zawiera obsługę Whitespace-Aware Languages. Ta wersja jest dostarczana z "Przykładem automatyki domowej", który możesz wykorzystać jako szablon.
- 1. Jak zarządzać opcjonalnymi białymi znakami w ANTLR?
- 2. Jaka jest właściwa gramatyka dla tego języka?
- 3. RegEx - chciwy odstęp między białymi znakami
- 4. Elasticsearch char_filter zastępuje dowolną postać białymi znakami?
- 5. Pętla nad katalogami z białymi znakami w Bash
- 6. Regex dla nazw ze znakami specjalnymi (Unicode)
- 7. Jak testować jednostkę dla Xtext
- 8. plik wsadowy: przekazać parametr z białymi znakami do funkcji
- 9. TeamCity - przekazywanie wartości parametrów z białymi znakami do wiersza poleceń
- 10. Jak importować plik tekstowy rozdzielany białymi znakami do MySQL?
- 11. Jak mogę rozróżnić między 0 i białymi znakami w Perlu?
- 12. Jak podzielić łańcuch z białymi znakami na początku?
- 13. Json_decode ze specjalnymi znakami
- 14. Gramatyka języka C++ BNF z analizowaniem/dopasowywaniem przykładów
- 15. Gramatyka bezkontekstowa dla C
- 16. R gsub ze znakami specjalnymi
- 17. Trasy MVC ze znakami specjalnymi
- 18. bibliotece NSURL ze znakami specjalnymi
- 19. Zdarzenia szkieletowe ze znakami wieloznacznymi
- 20. Jak sprawić, aby lex/flex rozpoznawały tokeny nie oddzielone białymi znakami?
- 21. Gramatyka Yacc/Jay dla JavaScript?
- 22. Parametry routingu MVC ze znakami specjalnymi i akcja dla dzieci
- 23. Sprawdzanie ciągu znaków Pythona dla znaków ze znakami escape
- 24. przy użyciu DocumentFilter.replace ze znakami Unicode
- 25. Błąd NSLog w iOS ze znakami Unicode
- 26. POSIX sh Gramatyka EBNF
- 27. php ze znakami specjalnymi, takimi jak ñ
- 28. Jak odczytywać cin z białymi znakami aż do znaku nowej linii?
- 29. Radzenie sobie ze znakami mowy z String.match
- 30. Reagowanie golang ze znakami innymi niż łacińskie
Fajnie (będę musiał zagłębić się trochę w XText, pytanie _nie_ odpowiedź w tym tagu ... :))! Nie mogę jednak usunąć mojej odpowiedzi, ponieważ jest to zaakceptowana odpowiedź[email protected] musi zaakceptować twoje zanim będę mógł usunąć moje. –
Wydaje się być hostowany na github teraz https://github.com/ralfebert/org.eclipselabs.todotext –
Niestety, nie mogę znaleźć tego przykładu w dowolnym miejscu. – rds