Frage

Eigentlich, vielleicht nicht ausgewachsene Lex / Yacc. Ich Implementierung ein Befehlsinterpreter Front-End eine Webapp zu verabreichen. Ich suche nach etwas, das eine Grammatik Definition nehmen würde und es in einen Parser, der direkt Methoden auf meinem Objekt aufruft. Ähnlich wie ASP.NET MVC herauszufinden, kann die Controller-Methode aufzurufen, und wie die Argumente Pony.

Also, wenn der Benutzer „erstellen foo“ an meiner Eingabeaufforderung, es sollte ein Verfahren transparent nennen:

private void Create(string id) { /* ... */ }

Ach ja, und wenn es von Hilfetext (z) Attribute auf diesen Controller-Methoden erzeugen könnte, dass genial wäre, auch.

War es hilfreich?

Lösung

Ich bin nicht sicher, Lex / Yacc eine Hilfe sein wird. Sie benötigen nur eine grundlegende tokenizer und einen Dolmetscher, die schneller mit der Hand zu schreiben sind. Wenn Sie immer noch in Parsing Route sind unter Irony .

Als Nebenbemerkung: haben Sie als Powershell und seine Commandlets

?

Andere Tipps

Ich habe ein paar kleine Projekte mit Gplex / GPPG gemacht, die ziemlich einfach Neuimplementierungen von LEX / YACC in C # sind. Ich habe nicht eine der anderen oben genannten Werkzeuge verwendet, so kann ich sie nicht wirklich vergleichen, aber diese hat gut funktioniert.

//gplex.codeplex:

GPPG können hier und Gplex hier .

Dass gesagt wird, ich bin einverstanden, eine vollständige LEX / YACC Lösung wahrscheinlich ist viel des Guten für Ihr Problem. Ich würde vorschlagen, eine Reihe von Bindungen mit Ironpython zu erzeugen: es lässt sich problemlos mit .NET-Code, Nicht-Programmierer scheinen die grundlegende Syntax recht brauchbar zu finden, und es gibt Ihnen ein hohes Maß an Flexibilität / Leistung, wenn Sie sich dazu entscheiden, es zu benutzen.

Schauen Sie auch unter Antlr , die C # Unterstützung hat.

Noch früh CTP so nicht in der Produktion Anwendungen verwendet werden, aber Sie können in Oslo / MGrammar interessieren: http://msdn.microsoft.com/en-us/oslo/

Jison wird immer vor kurzem viel Traktion. Es ist ein Bison-Port Javascript. Wegen seiner extrem einfache Natur ist, habe ich die Jison Parsing / lexing Vorlage PHP portiert, und jetzt auf C #. Es ist noch sehr neu, aber wenn Sie eine Chance, einen Blick auf es hier: https://github.com/robertleeplummerjr/jison/tree/master/ports/csharp/Jison

Wenn Sie keine Alpha-Software Angst und wollen eine Alternative zu Lex / Yacc für Ihre eigenen Sprachen zu schaffen, könnte man sich in Oslo . Ich würde Ihnen empfehlen, durch Sitzungsaufzeichnungen von Sitzungen TL27 und TL31 von letzten Jahren zu sitzen PDC . TL31 direkt befasst sich mit der Erstellung von domänenspezifischen Sprachen mit Oslo.

Coco / R ist ein Compiler-Generator mit einer .NET-Implementierung. Sie konnten das ausprobieren, aber ich bin nicht sicher, ob eine solche Bibliothek bekommen würde zu arbeiten schneller als die eigene tokenizer zu schreiben.

http: //www.ssw.uni-linz. ac.at/Research/Projects/Coco/

Ich würde vorschlagen, csflex - C # Hafen von flex -. Bekanntesten Unix-Scanner-Generator

Ich glaube, dass lex / yacc in einer der SDKs sind bereits (das heißt RTM). Windows oder .NET Framework SDK.

Gärten Punkt Parser Generator hier Yacc / Bison-Funktionalität für C # zur Verfügung stellt. Es kann hier donwloaded werden. Ein nützliches Beispiel GPPG Verwendung bereitgestellt hier

Wie Anton sagte, Powershell ist wahrscheinlich der Weg zu gehen. Wenn Sie möchten, tun eine lex / yacc Implementierung dann Malcolm Crowe einen guten Satz hat.

Edit: Link zu den Compiler-Tools

Nur für das Protokoll, die Umsetzung von Lexer und LALR Parser in C # für C #:

http://code.google.com/p/naive-language-tools /

Es sollte im Gebrauch Lex / Yacc, aber diese Werkzeuge (NLT) nicht Generatoren ähnlich sein! So vergessen Geschwindigkeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top