2012-05-21 6 views
7

Ich habe das Internet auf der Suche nach einigen Neuling Informationen über die Entwicklung einer C# Abstract Syntax Bäume, aber ich kann nur Informationen für die Menschen bereits "in-the-Know" zu finden. Ich bin ein Anwendungsentwickler, daher sind Themen wie diese ein bisschen über meinen Kopf, aber das ist für meine eigene Ausbildung, also bin ich bereit, die Zeit zu verbringen und zu lernen, welche Konzepte notwendig sind.Entwickeln von abstrakten Syntax Baum

Im Allgemeinen möchte ich etwas über die Techniken lernen, die hinter der Entwicklung einer abstrakten Darstellung von Code aus einer Codefolge stehen. Genauer gesagt, möchte ich in der Lage sein, diese AST zu verwenden, um C# -Syntax hervorzuheben. (Ich weiß, dass Syntax Highlighting nicht notwendig eine AST, aber das scheint wie eine gute Gelegenheit, einige "Compiler" -Level-Techniken zu lernen.)

Ich entschuldige mich, wenn diese Frage ein bisschen breit ist, aber ich bin Ich bin mir nicht sicher, wie ich sonst fragen soll.

Danke!

+0

FWIW, wenn Sie einen guten Platz auf Compilern beginnen möchten, ist das Drachenbuch (IMHO) ein großartiges Buch. http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools –

+0

@ James Manning: Danke, ich werde das überprüfen! –

Antwort

12

Zuerst müssen Sie verstehen, was Parsing ist und was abstrakte Syntaxbäume sind. Hierzu können Sie für einen ersten Blick Wikipedia on abstract syntax trees konsultieren.

Sie müssen wirklich etwas Zeit mit einem Compiler-Lehrbuch verbringen, um zu verstehen, wie abstrakte Syntaxbäume mit dem Parsing zusammenhängen und beim Parsen konstruiert werden können; Die klassische Referenz ist Aho/Ullman/Sethis "Compiler" -Buch (leicht im Internet zu finden). Sie können die SO Antwort auf Are there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers? aufschlussreich finden.

Sobald Sie verstehen, wie man einen AST für eine einfache Grammatik baut, können Sie Ihre Aufmerksamkeit dann auf etwas wie C# lenken. Das Problem hier ist der Umfang; Es ist eine Sache, mit einer Spielzeugsprache mit 20 Grammatikregeln zu spielen. Es ist eine andere, mit Grammatik von mehreren hundert oder tausend Regeln zu arbeiten. Erfahrung wird kleine machen es viel einfacher zu verstehen, wie die großen zusammen sind, und wie man mit ihnen leben.

Sie möchten wahrscheinlich nicht Ihre eigene C# -Grammatik erstellen (oder die aus dem C# -Standard implementieren); Es ist ziemlich viel Arbeit. Sie können verfügbare Werkzeuge erhalten, die Ihnen C# ASTs geben (Roslyn wurde bereits erwähnt; ANTLR hat einen C# Parser, es gibt viele mehr).

Es ist wahr, dass Sie einen AST für Syntaxhervorhebung verwenden könnten (obwohl das wahrscheinlich eine Mücke mit einem Vorschlaghammer tötet). Worüber die meisten Leute nicht viel nachdenken (aber die Compiler-Bücher betonen), passiert nach einem AST; meistens sind sie nicht selbst nützlich. Sie brauchen tatsächlich viel mehr Maschinen, um etwas Interessantes zu tun. Anstatt dies immer und immer wieder zu wiederholen (ich sehe immer die gleichen Fragen), können Sie meine Diskussion unter Life After Parsing für weitere Details sehen.

+0

Danke, genau die Antwort, nach der ich gesucht habe! –

+0

Ich weiß, das ist ein bisschen spät, aber haben Sie [GOLD Parser] (http://goldparser.org/) angeschaut? Dieses Programm ermöglicht es Ihnen, eine Grammatik unter Verwendung von BNF-Regeln zu konstruieren und in jeder Sprache Skelettcode zu erzeugen, um den Syntaxbaum zu verarbeiten, d. H. Code zu interpretieren, während Sie den Syntaxbaum laufen oder Code erzeugen. – Intrepid

+0

@Mike Clarke: Ich dachte GOLD geparst, nur. Es baut tatsächlich einen Syntaxbaum? Es gibt keinen Beweis dafür, dass ich von den Webseiten http://goldparser.org/doc/index.htm sehen kann –

1

Werfen Sie einen Blick auf Roslyn. Ich denke, es könnte sein, wonach Sie suchen. Es gibt Ihnen Zugriff auf die Compiler AST, unter vielen anderen erstaunlichen Dingen!

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

Darüber hinaus schlage ich ein Lehrbuch über Compiler.

+0

Ich denke Roslyn ist kein gutes Beispiel für einen * abstrakten * Syntaxbaum. Sein Syntaxbaum enthält jedes Semikolon, Kommentar und Leerzeichen, was ihn zu einem sehr konkreten Syntaxbaum macht. Aber wenn Syntax-Highlighting das Ziel war, wäre Roslyn eine gute Wahl. – svick

+0

Irgendein bestimmtes Lehrbuch, das du empfehlen könntest? Ich bin nicht wirklich auf der Suche nach einer fertigen Lösung, ich möchte mich selbst aufbauen, indem ich meine eigene entwickle. –

2

Sie sollten wahrscheinlich einen Blick auf diese Rede von Phil Trelford nehmen:

Write your own compiler in 24 hours

Dieser Mann ist ein Genie, und lassen Sie über Compiler lernen feuert. Er erklärt es buchstäblich leicht genug für einen Fünfjährigen zu verstehen. Der fragliche Fünfjährige ist sein Sohn, hat also wahrscheinlich einen unfairen Vorteil, aber fünf sind fünf.