2012-12-14 11 views
7

Ich habe eine ANTLR-Grammatik, die eine DSL (domänenspezifische Sprache) definiert. Diese Grammatik ist relativ einfach. Es analysiert die Sprache und gibt C-Code aus, um einen sehr einfachen Übersetzer zu erstellen.ANTLR Syntax Hervorhebung DSL in Visual Studio

Diese Sprache ist für die Verwendung in C# -Anwendung gedacht (eingegeben in eine Art von Steuerelement, ob es RichTextBox oder ein benutzerdefiniertes Steuerelement) und eine Syntax-Hervorhebung für diese Sprache erforderlich ist. Ich habe das Internet in der Hoffnung durchforstet, irgendeine Art von Information darüber zu finden, wie das zu erreichen ist, oder ein Werkzeug zu finden, das mir das ein bisschen leichter macht.

Nachdem ich nicht zu viele Informationen gefunden habe, wäre meine beste Annahme, dass ich den ANTLR-generierten Lexer verwenden muss, um die Tokens zu betrachten und sie entsprechend zu färben. Ist dies der richtige Aktionsweg oder gibt es eine andere Methode/ein anderes Werkzeug, um Syntax-Highlighting für benutzerdefinierte domänenspezifische Sprachen bereitzustellen? Wenn dies die richtige Methode ist, wie gehe ich dann vor, um bestimmte Tokens zu erkennen?

Wenn ich irgendwelche wichtigen Informationen weggelassen habe, bitte fragen Sie! Vielen Dank!

Antwort

3

Diese Sprache ist für die Verwendung in C# -Anwendung gedacht (in eine Art von Steuerelement eingegeben, ob es RichTextBox oder ein benutzerdefiniertes Steuerelement) und eine Syntaxhervorhebung für diese Sprache erforderlich ist.

Verwenden Sie Scintilla für Ihre Kontrolle. Es ist ein Text-Steuerelement für IDE-Stil Textbearbeitung. Notepad++ verwendet es für seine Textkontrolle, ebenso wie die SciTE IDE, von der es stammt. Ich habe es in einem kleinen, benutzerdefinierten IDE-Projekt in C# mit einer inoffiziellen .NET-spezifischen Version verwendet - ich glaube, es war ScintillaNET.

Scintilla unterstützt benutzerdefinierte Keyword-Hervorhebung und auch eine Vielzahl von programmierbaren Funktionen wie Squiggly-Line-Unterstreichung und solche Dinge.


Wenn Sie ein Steuerelement, das Sie lieber verwenden würde, ich glaube, es ist sinnvoll, eine kleine ANTLR Lexer zu verwenden Token für Sie zu produzieren. Jedes Token enthält die Zeilennummer, die Anfangszeichenposition, den Quelltext und den Tokentyp - alles, was Sie wissen müssen, was hervorgehoben werden soll und wie. Die einzige Schwierigkeit wäre, den Text jedes Mal, wenn der Text geändert wird, durch den Lexer zu führen. Es gibt effiziente Möglichkeiten, dies zu tun, ohne das gesamte Dokument neu zu lexen, aber es ist immer noch etwas, das man im Auge behalten sollte.

4

Ich habe erfolgreich AvalonEdit für ein ähnliches Projekt von mir verwendet. Ich habe gerade einen kleinen Editor mit der richtigen Syntax-Hervorhebung erstellt.

Es ist sehr einfach und schnell in Ihrem Projekt zum Laufen zu bringen. Sie müssen lediglich eine einfache XML-Datei zur Verfügung stellen, um die Syntax Ihres DSL zu dokumentieren, und Sie erhalten eine farbige Out-of-the-Box-Ausgabe als WPF-Steuerelement.

Es sieht so aus, als ob sie Komplettierungseinrichtungen hinzugefügt haben, da ich sie benutzt habe, aber ich habe keine Erfahrung in diesem Teil, aber ich vermute, dass es auch sehr gut gemacht ist, wenn die Qualität der Färbung entspricht.

Verwandte Themen