8 Stimmen

Compiler-Compiler in C#

Ich bin auf der Suche nach einem anpassbaren Parser und/oder Lexer, der es mir ermöglicht, einen benutzerdefinierten Syntax-Checker in C# zu erstellen. Im Wesentlichen wird der Benutzer eine Codezeile (benutzerdefinierte) eingeben, und der Syntax-Checker wird in der Lage sein, zu reagieren, wenn es richtig geschrieben ist oder nicht.

8voto

OregonGhost Punkte 22841

Das ist Ironie . Lesen Sie unbedingt die Diskussion, denn dort geht es um sehr viel. Verwenden Sie die alte Version vom November oder die neueste, aber stellen Sie sicher, dass Sie verstehen, was in dieser Version enthalten ist und was nicht.

Für die meisten Dinge sollte die November-Version gut geeignet sein (ich verwende sie für ein kleines Projekt).

Irony ermöglicht den Aufbau eines abstrakten Syntaxbaums (AST) aus jeder Grammatik, die Sie direkt in C#-Code definieren können. Es unterstützt auch die Auswertung (d.h. die Interpretation des Codes), und es ist sogar nicht schwer, daraus Code zu erstellen. Oder, na ja, ihn in eine DLR (Dynamic Language Runtime) AST.

8voto

abhilash Punkte 5545

Hier sind einige Dinge, die Sie vielleicht in Betracht ziehen sollten:

6voto

dfa Punkte 110809

Ich mag ANTLR , es unterstützt C# sowie Java, Python, C, usw. usw. Die Vorteile der Verwendung von ANTLR sind die sehr gute Dokumentation (Beispiele, Bücher, Tutorials usw.) und die weite Verbreitung.

0voto

jpoh Punkte 4486

Desde aquí :

LINQPad verwendet eine Reihe von Drittanbieter Komponenten innerhalb der Benutzeroberfläche. Der Abfrage Editor verwendet das SyntaxEditor-Steuerelement von Actipro Control von Actipro (ein sehr ausgefeiltes Produkt); die "IntelliSense"-Funktionen basieren auf einer Kombination von Bibliotheken von Actipro Software und ICSharpCode (aus dem SharpDevelop-Projekt).

Ich habe keines der in diesem Auszug erwähnten Produkte verwendet (abgesehen von LINQPad - das ich sehr empfehle!), aber ich dachte, es könnte Sie vielleicht in die richtige Richtung führen.

0voto

Ira Baxter Punkte 91118

Wenn der Benutzer eine Codezeile eingibt, die traditionellen Ausdrücken entspricht, können Sie einen rekursiven Descent-Parser dafür in höchstens ein paar Stunden von Hand programmieren und damit fertig sein.

Wenn Ihre Eingabe ein Fragment einer komplexen Sprache ist (z. B. wenn Sie eine Zeile C#-Code akzeptieren wollen), benötigen Sie einen sehr starken Parser, und ein Parser-Generator wird empfohlen.

Sie werden jedoch feststellen, dass die meisten Parser-Generatoren Ihnen keine gute Möglichkeit bieten, eine Stück der von Ihnen definierten Sprache, aber Sie können das umgehen, indem Sie die Grammatikregel Root so definieren, dass die Nichtterminale erwähnt werden, die den "Linien" entsprechen, die Sie akzeptieren wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X