Implementazione dell'inteprete Scheme
Introduzione - Analisi lessicale - Analisi sintattica - Valutazione - Estensione - Demo

Analisi sintattica

    L'AS nel caso Scheme è particolarmente semplice essendo estremamente semplice la sintassi del linguaggio, come evidenzia la grammatica precedentemente mostrata. Le espressioni sono molto semplici trattandosi sempre di atomi o strutture composte racchiuse sempre da parentesi tonte. Queste a loro volta possono essere costituite di atomi o di ConsSexp. Il parser quindi è molto semplice e costruisce sempre delle AtomSexp o delle ConsSexp.
    La RI delle frasi è ad albero (APT) ed è riassumibile con lo schema seguente:

    Il fatto che tutte le espressioni non atomiche sono delle ConsSexp induce una riflessione. Lo Scheme fornisce alcune primitive:

    In tutti quei casi il Parser costruisce sempre degli oggetti ConsSexp nei quali la testa contiene l'operatore (ovvero la primitiva). Ciò implica che se si vorrà realizzare il valutatore in stile object oriented allora quando si dovrà valutare una ConsSexp  bisognerà comunque utilizzare delle istruzioni condizionali (catene di if) per stabilire qual'è l'operatore da applicare agli argomenti. Non si potrà cioè usare appieno il modello a delegazione fornito dalla programmazione ad oggetti. Insomma tale modello potrà essere sfruttato per delegare ciascun oggetto a valutarsi, ma allorchè si delegherà un oggetto ConsSexp questo dovrà per prima cosa stabilire qual'è la sua natura, ovvero che operatore contiene.
    Una programmazione completamente orientata agli oggetti avrebbe suggerito una soluzione un po' diversa. Si sarebbero dovute creare tante sottoclassi di ConsSexp quanti sono gli operatori, ciascuna dedicata ad un operatore specifico. Ad esempio l'espressione (+ 2 3) sarebbe stata rappresentata con un oggetto della classe PlusSexp, sottoclasse di ConsSexp; l'espressione (cdr (quote (1 2))) sarebbe stata rappresentata con un oggetto della classe CdrSexp, sottoclasse di ConsSexp, la cui coda sarebbe stata un oggetto della classe QuoteSexp...
    Le due soluzioni di cui sopra presentano entrambe pregi e difetti legati al tipo di metodologia che si adotterà per realizzare il valutatore. Vedremo più avanti quali sono questi pregi e difetti, ma prima affrontiamo il discorso relativo alla valutazione.