2009-08-05 6 views

risposta

10

Il Metacircular Evaluator in SICP è un esercizio per la scrittura di un interprete Scheme in Scheme. È un comune progetto CS del primo anno.

+2

Per chi non lo sapesse, SICP è un libro (gratuito online) chiamato Struttura e Interpretazione dei programmi per computer. –

5

Pascal L'originale di Wirth è un buon candidato, e spesso usato come una demo in generatori di parser. La sua grammatica è LL (1), e per il resto abbastanza rigorosa, quindi è facile da analizzare. Dal punto di vista della funzionalità è anche abbastanza limitato.

Si potrebbe desiderare di giocherellare un po 'con esso, tuttavia - ad es. potresti voler ignorare i puntatori, ma supportare stringhe di prima classe.

3

Schema o qualsiasi variante lisp.

+4

Questo è un po 'ingannevole; sebbene la sintassi non sia certamente difficile da analizzare, la funzionalità di Scheme e altre varianti di LISP può essere piuttosto difficile da implementare in un interprete. Lambdas e la ricorsione della coda in particolare hanno molte insidie. – Imagist

0

Vorrei pensare a un linguaggio di sintassi di markup, Liran. La struttura della sintassi semplifica l'analisi poiché i blocchi di codice sono chiaramente delineati tra i tag di inizio e di fine. Potresti teoricamente creare facilmente un interprete di livello 1 che analizzi ed esegua direttamente il codice.

Detto questo, non ci sono linguaggi di markup che fanno cose significative nel contesto a cui sembri mirare (potresti voler scrivere tu stesso). La scelta migliore sarebbe probabilmente le lingue con funzionalità minima e preferibilmente non supportare la programmazione procedurale. Un linguaggio come BASIC dovrebbe essere facile da costruire per un interprete di livello 1.

La cosa migliore forse sono i primi linguaggi di script che non offrivano molti elementi sintattici e erano piuttosto brevi nella complessità. Non riesco a pensare a qualsiasi però.

Ma forse l'opzione migliore è progettare la propria lingua. L'interprete diventa più facile da costruire perché hai una profonda conoscenza della sintassi del linguaggio e puoi governare la tua struttura linguistica e la semantica nell'interprete.

...

L'insistenza sul livello 1 interprete è perché hai parlato di desideri facile.

+0

cosa significa livello 1? –

1

Nella mia classe di sistemi operativi del college abbiamo scritto un interprete per Db (D-flat). Era molto semplice e ben definito.

+0

Potresti fornire un collegamento a qualcosa relativo a questa lingua, non riesco a trovarlo ... –

+0

Hai ragione. Non sono riuscito a trovarlo da nessuna parte online, tranne il sito web della classe. Forse è un linguaggio inventato per la nostra classe. In entrambi i casi, ecco un collegamento alla definizione del linguaggio formale: http://users.csc.calpoly.edu/~akeen/courses/csc430/handouts/assignments/hw3.pdf – bkritzer

+0

Forse si basa sul sistema descritto in Dr. Dobbs Journal (qualcuno in giro che conosce il DDJ?). In questo articolo (http://www.drdobbs.com/184410754) Al Stevens ha annunciato l'idea di D-Flat e negli articoli successivi ha descritto il suo sviluppo. – Kwebble

4

Avanti. Ok, ora sto digitando solo questo perché ho bisogno di almeno 15 caratteri nella risposta, ma le implementazioni Forth più piccole sono un paio di KB. È difficile pensare a qualsiasi altra lingua che potrebbe avere un nucleo così piccolo. Forse l'originale McCarthy 1958 Lisp, in cui le funzioni sono state compilate a mano.

5

È molto facile scrivere un interprete per la programmazione lingua Forth (una volta che si sa come - ma è ben documentato ). Forth è stato utilizzato per problemi reali per più di 40 anni.

Forse è troppo facile, ma imparerai molto nel processo.

Una presentazione a cuor leggero (online) è in chapter 9 di "Starting FORTH" di Leo Brodie.

+1

Grazie per il link. –