2012-05-21 6 views
7

Ho setacciato internet alla ricerca di alcune informazioni per principianti sullo sviluppo di una sintassi C# Abstract Trees, ma posso trovare solo informazioni per persone già "informate". Sono uno sviluppatore di applicazioni line-of-business, quindi argomenti come questi sono un po 'bizzarri, ma questo è per la mia educazione, quindi sono disposto a passare il tempo e ad imparare quali concetti sono necessari.Sviluppo sintassi astratto

In generale, mi piacerebbe conoscere le tecniche alla base dello sviluppo di una rappresentazione astratta del codice da una stringa di codice. Più specificamente, mi piacerebbe essere in grado di utilizzare questo AST per fare l'evidenziazione della sintassi C#. (Mi rendo conto che l'evidenziazione della sintassi non ha bisogno di un AST, ma questa sembra una buona opportunità per imparare alcune tecniche di "compiler")

Mi scuso se questa domanda è un po 'ampia, ma sono non so come altro chiedere.

Grazie!

+0

FWIW, se vuoi un buon punto di partenza sui compilatori, il libro del drago è (IMHO) un grande libro. http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools –

+0

@ James Manning: Grazie, lo controllerò! –

risposta

12

Per prima cosa è necessario capire cos'è l'analisi e quali sono gli alberi sintassi astratti. Per questo, è possibile consultare Wikipedia on abstract syntax trees per una prima occhiata.

È davvero necessario passare un po 'di tempo con un libro di testo del compilatore per capire in che modo gli alberi sintattici astratti sono correlati all'analisi e possono essere costruiti durante l'analisi; il classico riferimento è il libro "Compilatori" di Aho/Ullman/Sethi (facilmente reperibile sul web). È possibile trovare la risposta SO a Are there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers? istruttiva.

Una volta compreso come costruire un AST per una grammatica semplice, è possibile quindi spostare l'attenzione su qualcosa come C#. Il problema qui è scala pura; una cosa è giocare con un linguaggio giocattolo con 20 regole grammaticali. È un altro a lavorare con la grammatica di diverse centinaia o migliaia di regole. L'esperienza dei piccoli renderà molto più facile capire come i grandi sono messi insieme e come vivere con loro.

Probabilmente non si vuole costruire la propria grammatica C# (o implementare quella dello standard C#); è un bel po 'di lavoro. Puoi ottenere gli strumenti disponibili che ti daranno C# AST (Roslyn è già stato menzionato, ANTLR ha un parser C#, ce ne sono molti altri).

È vero che è possibile utilizzare un AST per l'evidenziazione della sintassi (anche se probabilmente si sta uccidendo un moscerino con un martello). Ciò su cui la maggior parte delle persone non pensa molto (ma i libri del compilatore sottolineano), è ciò che accade dopo che hai un AST; per lo più non sono utili da soli. Hai davvero bisogno di molto più macchinario per fare qualcosa di interessante. Piuttosto che ripetere questo e più volte (continuo a vedere lo stesso tipo di domande), è possibile vedere la mia discussione su Life After Parsing per maggiori dettagli.

+0

Grazie, solo il tipo di risposta che stavo cercando! –

+0

So che è un po 'tardi, ma hai guardato [GOLD Parser] (http://goldparser.org/)? Questo programma ti consente di costruire una grammatica usando le regole BNF e di generare codice di scheletro in qualsiasi linguaggio per elaborare l'albero di analisi, cioè interpretare il codice mentre si cammina l'albero di analisi o si genera codice. – Intrepid

+0

@ Mike Clarke: Pensavo che l'ORO fosse analizzato, solo. Costruisce effettivamente un albero di analisi? Non c'è prova di ciò che posso vedere dalle pagine web http://goldparser.org/doc/index.htm –

1

Dai un'occhiata a Roslyn. Penso che potrebbe essere quello che stai cercando. Ti dà accesso ai compilatori AST, tra tante altre cose incredibili!

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

di là di questo, suggerisco un libro di testo su compilatori.

+0

Penso che Roslyn non sia un buon esempio di un albero di sintassi * abstract *. Il suo albero di sintassi contiene ogni punto e virgola, commento e spazio bianco, che lo rende un albero di sintassi molto concreto. Ma se l'evidenziazione della sintassi fosse l'obiettivo, Roslyn sarebbe una buona scelta. – svick

+0

Qualche libro di testo che potresti raccomandare? Non sto davvero cercando una soluzione pronta, sto cercando di edificarmi sviluppando il mio. –

2

Probabilmente si dovrebbe dare un'occhiata a questo discorso da Phil Trelford:

Write your own compiler in 24 hours

Quest'uomo è un genio, e vi lascerà sparato su per conoscere compilatori. Lo spiega letteralmente abbastanza facilmente da capire per un bambino di cinque anni. Il bambino di cinque anni in questione è suo figlio, quindi probabilmente ha un vantaggio ingiusto, ma cinque sono cinque.

Problemi correlati