Voglio leggere e imparare dal codice sorgente dell'interprete/compilatore di un linguaggio di scripting. Quale interprete/compilatore del linguaggio di scripting ha il codice sorgente più semplice, pulito e facile da leggere? Preferirei che fosse scritto in C/C++ (cos'altro scrivono i compilatori in ogni caso?) Perché sto pianificando di scrivere un compilatore in C.Codice sorgente interprete linguaggio di scripting per imparare da
risposta
Dai uno sguardo allo lua, puoi passare attraverso le prime versioni del linguaggio di programmazione e vedere come si è evoluto. È scritto in C e ha un codice pulito e piacevole. Puoi scrivere un compilatore in quasi tutti i linguaggi di programmazione, ma C è stato quello che la maggior parte dei programmatori ha scelto.
È possibile ottenere il codice sorgente per tutte le versioni in un unico pacchetto all'indirizzo http://www.lua.org/ftp/lua-all.tar.gz. Stanno tutti bene. – lhf
Il codice sorgente per alcune versioni recenti di Lua può essere consultato con i collegamenti su http://www.lua.org/source/. Vedi anche http://lua-users.org/wiki/LuaSource. – lhf
L'interrutore CPython è in circolazione da un po 'di tempo e vorrei immagina che sarebbe molto utile per te.
Il richiedente domanda non era chiaro su cosa volesse. Ora che ha chiarito, ho modificato la mia risposta. –
un linguaggio famoso, ma non semplice (codice sorgente PHP). È possibile usufruire del codice sorgente.
Dato che 'semplice' è il criterio _primario_ dell'OP, se la fonte PHP non è semplice, allora come è questa una risposta? – ildjarn
@ildjarn: il codice sorgente PHP non è semplice, ma puoi anche trarre vantaggio dal codice sorgente –
Date un'occhiata sul V8 JavaScript. Ogni interprete ha un componente chiamato tokenizer. GNU ne ha uno il cui nome è bisonte. Dai un'occhiata anche a questo. Può essere utile. Chromium utilizza alcuni tokenizer per interpretare html anche sul Webkit, ma V8 è l'interprete javascript.
Claudio M. Souza Junior
AngelScript è una buona opzione per conoscere compilatori. Questo è un linguaggio con sintassi familiare C/C++, garbage collection, è orientato agli oggetti con ereditarietà e polimorfismo, multipiattaforma e compila in byte-code.
La mia seconda scelta sarebbe Lua.
Consiglierei, come introduzione gentile, di dare un'occhiata allo LLVM Tutorial.
Chris Lattner crea un semplice linguaggio giocattolo Kaleidoscope per mostrare le varie fasi di compilazione:
Ha poi spiegato come add JIT capabilities (essenziale per un interprete).
Il linguaggio del giocattolo è estremamente semplice, quindi il codice risultante è semplice e dimostra perfettamente l'architettura senza affogarvi nei dettagli dell'implementazione.
Non sono sicuro che il tutorial sia completamente aggiornato e possa essere utilizzato come è contro una versione recente di LLVM, ma consiglio almeno di leggerlo.
(E, naturalmente, leggendo il Dragon Book).
Prova quello che ti piace di più. – hari
Sembra che alcune persone abbiano interpretato male la domanda. Si prega di rileggere: p – slartibartfast