posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Scrivere un compilatore in un ora

Una bella sessione di livello 400 tanto per iniziare.

I due speaker mostrano come costruire un nuovo compilatore managed in un ora di sessione.
Come è giusto che sia, non ci sono magie ma del gran codice per definire la grammatica e leggere il sorgente da compilare.

Come prima cosa viene definita la grammatica in un file di testo ascii con dei particolari token. Il passo successivo è quello di scrivere una classe che faccia da scanner, cioè che legga il file di testo del sorgente e isoli le parole della grammatica, gli operatori, gli statement, etc. in una collection.
Il parser è lo step successivo, cioè di riconoscere gli statemente e trasformarli in particolari classi che ne definiscano il comportamento.

È poi il momento della generazione del codice IL realizzato tramite le classi xxBuilder di Reflection.Emit.
Un attimo di suspance all'ultimo per la demo che non stampava l'immancabile "Hello, world", scoprendo che non era stato implementato lo statement "print" .

Perchè tutto questo? Semplice.... permettere la creazione al volo di assembly partendo da una grammatica iper-semplificata che permettono di realizzare una sorta di scripting delle nostgre applicazioni. O magari creare un assembly partendo da uno schema a blocchi disegnato dall'utente.

La sessione termina parlando della dynamic compilation che a tutti gli effetti sembra essere la strada per il rimpiazzo di VBA.

Print | posted on mercoledì 14 settembre 2005 01:13 |

Feedback

Gravatar

# re: Scrivere un compilatore in un ora

Ah ah!!!
Adrian si roderà il fegato quando vedrà cosa si é perso... :-D
14/09/2005 12:37 | Michele Bernardi
Gravatar

# re: Scrivere un compilatore in un ora

Ciao Raffaele,

ho trovato questo tuo post girovagando per la rete e volevo chiederti se potevi linkarmi (o darmi qualche dritta) su come costruire un compilatore (non per C# ma per un formalismo "proprietario" che utilizziamo qui in ditta). Avrei bisogno non tanto di consigli a livello logico concettuale, quanto implementativo-architetturale (quante classi utilizzare, come fare loggare tutte sullo stesso file, se implemetare un Command pattern per incapsulare in una classe ogni trasformazione elemento source code --> elemento target code, e così via...)

Grazie,
Giulio

29/06/2006 13:17 | me
Gravatar

# re: Scrivere un compilatore in un ora

Scrivere un compilatore non è cosa banale. Il framework mette a disposizione degli ottimi strumenti per chi vuole sviluppare compilatori per IL. Diversamente non so quanto ti possano venire utili.
Puoi comunque dare un occhiata al sorgente del compilatore di C# che trovi nel progetto Rotor disponibile al download (cerca SSCLI, i sorgenti del framework).
30/06/2006 12:19 | Raffaele Rialdi
Gravatar

# re: Scrivere un compilatore in un ora

Per chi fosse interessato il link alle slides di questa sessione è il seguente:
http://microsoft.sitestream.com/PDC05/TLN/TLN410_files/Botto_files/TLN410_Pobar_Duffy.ppt
05/07/2006 13:42 | Raffaele Rialdi
Gravatar

# re: Scrivere un compilatore in un ora

@Mp
Eppure il post è chiaro ... si tratta di una sessione di ben tre anni fa dove lo speaker mostrava l'infrastruttura pronta per poter scrivere un compilatore managed.
Anche lo scopo era dichiarato, cioè di generare assembly partendo da una sintassi testuale anziché usare direttamente CodeDom.
Ti posso dire che la sessione era tutta demo e che effettivamente in un ora lo speaker ha ottenuto quanto aveva promesso, cioè un _piccolo_ compilatore che genera codice managed (un assembly compilato a partire da una grammatica custom).
Non voleva essere (ed è scritto nel post) un compilatore di un "General Purpose Language" ma quello che ha ottenuto *è* un compilatore.
11/01/2008 21:33 | Raffaele Rialdi
Gravatar

# re: Scrivere un compilatore in un ora

Ciao Diego, certo che mi ricordo :)

Il controllo di sicurezza sta a te.
Ho mostrato in uno dei workshop come aprire un nuovo AppDomain e relegare del codice scritto da terzi dentro quell'AppDomain in modo da farlo girare con il minimo dei privilegi (via CAS). Oggi con il fx 3.5 è anche più semplcie grazie a System.Addin.
La stessa cosa la puoi fare con il codice creato con codedom. Basta farlo girare in un AppDomain dove hai stabilito che quel codice ha privilegi bassissimi.
Per dirla in breve quindi si, si può controllare la sicurezza del codice dinamico ed è l'applicazione host che decide.
Quindi no, nessuna falla ;-)
18/02/2008 15:23 | Raffaele Rialdi
Gravatar

# re: Scrivere un compilatore in un ora

dove trovo il video

01/08/2010 19:38 | umberto
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET