Implementazione dell'inteprete Scheme

Introduzione - Analisi lessicale - Analisi sintattica - Valutazione - Estensione - Demo

Introduzione

    Implementata la gerarchia Sexp è possibile iniziare l'implementazione del package LispInterpreter. Tale package contiene la classe che effettua l'AS (classe Parser) e la classe che effettua la valutazione (classe EvalSexpVisitor), più un sottopackage dedicato all'AL, in cui è ridefinito il Lexer (classe LispLexer) e sono impostati i vari set di tokens chiave.
    La grammatica è la caratterizzata dalle seguenti produzioni (Program è lo scopo):
 
Simbolo non terminale Possibile sostituzione Possibile sostituzione Possibile sostituzione
Program Sexp Program    
Sexp ConsSexp AtomSexp  
ConSexp () ( Sexp . Sexp ) ( SexpList )
SexpList Sexp SexpList  
AtomSexp Ident    
Ident <lettera> <lettera> Ident  

che è di tipo 2, ma non LL(1).
    Per renderla LL(1) e per semplificare il compito del Parser l'abbiamo trasformata nella seguente:
 
Simbolo non terminale Possibile sostituzione Possibile sostituzione Possibile sostituzione
Program Sexp Program    
Sexp ConsSexp Ident  
ConSexp () ( Sexp PairOrList  
PairOrList ) . Sexp ) Sexp PairOrList
Ident <lettera> <lettera> Ident  

    A ciascuna delle prime quattro produzioni corrisponde una funzione del parser il cui nome è dato dal simbolo non terminale che si trova a sinistra di "::=". L'ultima produzione è gestita dal lexer che crea l'identificatore automaticamente. Tale identificatore viene creato in modo che costituisca un oggetto della classe da appartenenza che può essere:

    Tutte queste classi ereditano da IdentSexp poiché costituiscono tutti s-expression atomiche non nulle e fanno parte di un package dedicato. Si è preferito realizzare queste classi piuttosto che usare l'unica classe IdentSexp per evidenziare che quegli oggetti sono stati costruiti dal lexer e quindi sono tokens, cioè non ancora delle S-expression. Il compito di costruire le S-expressions è del parser. Comunque i tokens costituiscono i "mattoni" con cui vengono costruite le S-expression, dunque è giusto che anch'essi appartengano alla gerarchia che ha inizio dalla classe Sexp. Inoltre l'aver suddiviso i tokens in categorie den definite ha anche facilitato il compito del valutatore in fase di riconoscimento del tipo di operazione da svolgere.