Programmazione funzionale: scrivere un piccolo interprete

5

Sto lavorando su una piccola shell Unix e sto contemplando l'idea di scrivere un interprete di script. Durante la lettura del soggetto sento inevitabilmente di programmazione funzionale, calcolo lambda, e scopri l'intero fascino attorno a Lisp.

Prima di saltare a questo ho alcune domande.

  • Quale lingua dovrei usare?

Sono curioso della programmazione funzionale, quindi sarebbe una grande opportunità per iniziare. Voglio che la mia shell abbia il minor numero possibile di dipendenze di terze parti. Mi chiedo se dovrei cercare un linguaggio compilato. Mi piacerebbe essere in grado di distribuirlo più facilmente. È un approccio corretto? se sì, quale lingua consiglieresti?

  • In che modo incorpori un interprete nel tuo programma?

Il modo in cui vedo è che l'interprete funzioni in un secondo processo separato. Per quanto ne so, due processi che comunicano, stanno ascoltando una pipe o inviando segnali tra loro. È un approccio realistico? Esiste un particolare linguaggio che gestisce questa parte? Ci sono altri modi per incorporare l'interprete?

    
posta rahmu 27.09.2011 - 23:34
fonte

2 risposte

2

Probabilmente dovresti usare ANSI C. È universale su tutte le piattaforme. È di basso livello e ha interfacce a livello di sistema per tutto su tutte le piattaforme che saranno richieste per un runtime di scripting o un linguaggio di programmazione.

Per scrivere un interprete di sceneggiatori, suggerirei di leggere prima Dragon Book [1]. È abbastanza pesante per la matematica, ma le basi sono abbastanza facili da raccogliere. Se sei interessato a LISP / Scheme, leggi SICP [2]. Entrambi i libri descrivono l'interpretazione e la compilazione in profondità in due diversi contesti. SICP cambierà la tua vita se sei interessato alla programmazione dei linguaggi.

Per quanto riguarda l'incorporamento, il tuo interprete di script dovrebbe probabilmente avere una funzione "eval" che prende una stringa nella tua lingua, la esegue e restituisce un risultato. Questo è l'unico punto di accesso che dovresti avere per l'incorporamento.

UNIX / Linux / OSX fa tutto il materiale di comunicazione per te usando pipe ecc. Concentrati solo su qualcosa che parla di stdin e stdout e sarai ordinato. Funziona anche (principalmente) su Windows.

Inizia davvero semplice. Questo è tanto semplice quanto è necessario iniziare ([3]). Implementa un interprete LISP completo in C in pochissimo codice.

risposta data 28.09.2011 - 00:25
fonte
0

Potresti voler acquisire una copia di "Scrittura di compilatori e interpreti interattivi" di P.J. Brown, ora considerato un classico nel campo (pubblicato nel 1982). Le nuove copie sono costose, ma puoi scegliere una copia usata per meno di $ 5.

Un altro libro sullo stesso argomento è Scrittura di compilatori e compilatori: un approccio di ingegneria del software di Ronald Mak, pubblicato nel 2009.

    
risposta data 28.09.2011 - 20:16
fonte

Leggi altre domande sui tag