La tua domanda è troppo ampia per essere risolta in alcuni paragrafi. E in realtà gli interpreti non significano molto: l'interprete BASIC del ZX80 (nel 1980) è molto diverso dall'attuale Guile , Lua , Ruby , o Python interpreti sulla maggior parte dei sistemi Linux. Conoscendo diversi linguaggi di programmazione, ad es. leggendo la programmazione Pragmatica della lingua di Scott, vale la pena.
Lisp come lingue come Schema (& Common Lisp) sono omoiconico , ed è molto facile scrivere un piccolo interprete Lisp in Lisp. Il famoso libro SICP (introduzione gratuita alla programmazione, usando Scheme) ha il suo chapter 4 dedicato a tale valutatore meta-circolare .
Interpreters condividi con compilatori diverse funzionalità e attività; la maggior parte di questi sono analizzando il codice in alcuni abstract syntax tree (AST) come fa un compilatore. Questa è in realtà la parte più facile. Quindi un libro di testo su compilatori come l'ultima edizione del Libro del Drago è molto importante per gli interpreti .
(AFAIK, BASIC degli anni '80 non costruiva alcun AST ma analizzava ripetutamente ogni riga, questo è il motivo per cui il BASIC di ZX80 non è come gli attuali interpreti, ma potrei sbagliarmi, dato che questi vecchi interpreti sono software proprietario
Alcuni interpreti stanno valutando l'AST in qualche ambiente attraverso una funzione ricorsiva ingenua. Altri (e oggi, molti di loro), in realtà compileranno l'AST in una forma più efficiente, spesso una specie di bytecode (che viene interpretato in seguito da una veloce macchina virtuale , spesso in stack e con codice threadato ). Alcune implementazioni utilizzano addirittura le compilazione JIT per generare dinamicamente codice macchina (quindi, in realtà, la frontiera tra gli interpreti e il compilatore è piuttosto sfocato, si noti che SBCL sta convertendo in codice macchina ogni interazione del suo Leggi Eval Print Loop ; potresti percepirlo come un" compilatore "mascherato da" interprete "o viceversa).
Garbage collection è molto importante per gli interpreti. Puoi leggere il manuale del GC .
Un eccellente libro sull'interpretazione e la compilazione dei dialoghi Lisp è Lisp In Small Pieces a>. Spiega in dettaglio varie implementazioni di Lisp (da interpreti ingenui a compilatori sofisticati a codice C).
Troverai molti interpreti del software libero da studiare e diversi tutorial su come crearne uno, ad es. di Norvig (Come scrivere un interprete (Lisp) (in Python)) e molti altri.
Si noti che la progettazione e l'implementazione di un robusto, efficiente e amp; interprete user-friendly è un sacco di lavoro (si potrebbe passare diversi anni su questo). Se hai del software a cui vuoi aggiungere un interprete, considera invece embedding un interprete esistente come Guile o Lua (entrambi sono progettati per essere facilmente incorporabili).