2012-12-14 21 views
7

Mam gramatykę ANTLR, która definiuje DSL (język specyficzny dla domeny). Ta gramatyka jest stosunkowo prosta. Parsuje język i wypisuje kod C, aby stworzyć bardzo prostego tłumacza.Składnia ANTLR Wyróżnianie DSL w Visual Studio

Ten język ma być używany w aplikacji języka C# (wpisany w pewien rodzaj formantu, niezależnie od tego, czy jest to RichTextBox, czy niestandardowy formant), a jednym z wymagań jest wyróżnianie składni dla tego języka. Przeszukałem Internet w nadziei, że znajdę jakieś informacje, jak to osiągnąć, lub znajdę narzędzie, które ułatwi mi pracę.

Po nie znalezieniu zbyt dużej ilości informacji, moim najlepszym założeniem jest to, że muszę użyć generatora Lexmark wygenerowanego przez ANTLR, aby spojrzeć na tokeny i odpowiednio je pokolorować. Czy jest to właściwa ścieżka działania, czy jest jakaś inna metoda/narzędzie do zapewniania podświetlania składni dla niestandardowych języków specyficznych dla domeny? Jeśli jest to poprawna metoda, jak mam rozpoznać konkretne tokeny?

Jeśli pominięto jakiekolwiek ważne informacje, proszę pytać! Dzięki!

Odpowiedz

3

Ten język ma być używany w aplikacji C# (wpisany do jakiejś kontroli, czy to RichTextBox lub kontrola niestandardowa) i jednym z wymogów jest posiadanie podświetlanie składni dla tego języka.

Należy rozważyć użycie kontrolki Scintilla. Jest to kontrola tekstowa do edycji tekstu w stylu IDE. Notepad++ używa go do kontroli tekstu, podobnie jak SceTE IDE, z którego pochodzi. Użyłem go w małym, niestandardowym projekcie IDE napisanym w języku C# przy użyciu nieoficjalnej wersji specyficznej dla .NET - myślę, że był to ScintillaNET.

Scintilla obsługuje niestandardowe wyróżnianie słów kluczowych, a także wiele programowalnych funkcji, takich jak podkreślanie linii i podobne rzeczy.


Jeśli masz kontrolę że wolisz używać, myślę, że to rozsądne, aby użyć małego antlr lexer produkować znaki dla ciebie. Każdy token zawiera numer linii, początkową pozycję postaci, tekst źródłowy i typ tokena - wszystko, co musisz wiedzieć, co zaznaczyć i jak. Jedynym kłopotem byłoby przesuwanie tekstu przez lexer za każdym razem, gdy tekst się zmienia. Istnieją skuteczne sposoby, aby to zrobić bez ponownego pisania całego dokumentu, ale wciąż należy o tym pamiętać.

4

Z powodzeniem użyłem AvalonEdit do podobnego projektu. Właśnie utworzyłem mały edytor z poprawnym podświetlaniem składni.

Jest bardzo łatwo i szybko zainstalować go w swoim projekcie. Po prostu musisz dostarczyć mu prosty plik XML, aby udokumentować składnię twojego DSL, a będziesz mieć kolorowy wyjściowy out-of-the-box jako kontroler WPF.

Wygląda na to, że dodali obiekty do ukończenia, ponieważ użyłem tego, nie mam doświadczenia w tej części, ale podejrzewam, że jest to bardzo dobrze zrobione, jeśli jakość jest taka sama jak kolorystyka.