2008-09-30 5 views

Antwort

12

Normalerweise sind BNF-Grammatiken zu zweideutig. ANTLR ist wahrscheinlich gut für das, was Sie suchen.

+2

Es scheint, dass Sie Recht haben. Ich habe das gerade irgendwo im Netz gelesen: "If-then-else kann nicht eindeutig in einer kontextfreien, prioritäts-/prädikatfreien Grammatik, wie EBNF" – ilitirit

11

Sie müssen die BNF ein wenig zwicken, aber TinyPG ist ein großartiges Werkzeug.

+0

Nice find. Vielen Dank. – ilitirit

+0

Tiny PG ist wirklich nett, danke für den Tipp. – Skurmedel

13

Die Visual Studio SDK wird tatsächlich mit Lexer und Parser Generation Tools ausgeliefert. Diese heißen MPPG und MPLex und sind Teil des Managed Babel Pakets. Während die Absicht, sie mit dem SDK zu bündeln, darin besteht, Spracherweiterungen für Visual Studio zu entwickeln, sind sie perfekt zum Erzeugen allgemeiner AST-emittierender Parser geeignet.

MPLex und MPPG basieren auf GPLEX und GPPG (Projekte der Queensland University of Technology) und werden in ähnlicher Weise wie Lex und Yacc verwendet. Das SDK enthält auch MSBuild-Aktionen, um die Parser-Generierung zu einem Teil des regulären Build-Prozesses zu machen.

Hier ist ein Screen mplex und MPPG in Aktion zeigt:
http://msdn.microsoft.com/en-us/vstudio/cc837016.aspx

+0

Der Link scheint gebrochen zu sein. –

+0

Scheint so, als hätte Microsoft vor einiger Zeit Microsoft Managed Babel eingestellt. An dieser Stelle würde ich wahrscheinlich mit FsLex und FsYacc (http://fsprojects.github.io/FsLexJacc/) gehen. Es basiert auf F #, aber es kompiliert zu einer regulären .NET-Assembly und kann von einem C# -Projekt verwendet werden, wenn Sie dies wünschen. –

+1

Ich würde Ihnen empfehlen, diese Unterbrechung zu untersuchen und Ihre Antwort tief zu bearbeiten, sagen, dass von diesem zu diesem Jahr VS SDK enthielt und jetzt dies und das geschieht. Die Leute werden Ihre Antwort in den nächsten Jahren mehrmals betrachten. –

2

IronMeta ist eine C# -Implementierung von Alex Warths OMeta; es ist ein Paket PEG (Parsing Ausdruck Grammatik; verwendet voreingenommene Wahl), so dass Grammatiken sauberer sein können, als wenn Sie ein yacc-ähnliches LALR-System verwenden.

Verwandte Themen