Interpreter.LispInterpreter
Class EvalSexpVisitor

java.lang.Object
  |
  +--Interpreter.Sexp.Utils.SexpVisitor
        |
        +--Interpreter.LispInterpreter.EvalSexpVisitor
Direct Known Subclasses:
ExtendedLispEvalSexpVisitor

public class EvalSexpVisitor
extends SexpVisitor

Un oggetto EvalSexpVisitor realizza un Pattern Visitor per una s-expression.
Valuta un'istruzione Scheme.


Field Summary
protected  IdentSexp closureIdent
          Identificativo.
protected  SexpHashtable env
          SexpHashtable globale usato per la valutazione.
 java.lang.String file
          Nome del file letto dallo standard input tramite la primitiva file.
protected  Sexp localEnv
          SexpHashtable locale usato per la valutazione.
protected  IdentSexp macroIdent
          Identificativo.
protected  NilSexp nil
          Identificativo.
protected  IdentSexp Set
          Identificativo.
 boolean stop
          Utilizzato per la sospensione della valutazione in corso.
protected  SpecialToken True
          Identificativo.
 
Fields inherited from class Interpreter.Sexp.Utils.SexpVisitor
stack
 
Constructor Summary
EvalSexpVisitor(InputBuffer In, OutputBuffer Out, Parser par)
          Costruisce un nuovo EvalSexpVisitor.
 
Method Summary
protected  boolean already(Sexp id, IdentSexp primitive)
          Controlla se esiste già un identificatore nell'environment.
protected  void apply(Sexp fun, Sexp argList)
          Applica un funtore alla sua lista di argomenti.
Il funtore può essere una primitiva, una closure o una macro.
protected  void applyClosure(Sexp clos, Sexp argList)
          Applica una closure alla sua lista di argomenti.
protected  void applyMacro(Sexp macro, Sexp argList)
          Applica una macro alla sua lista di argomenti.
protected  void applyOperation(OperationToken operator, Sexp argList)
          Applica una primitiva di tipo OperationalSet alla sua lista di argomenti.
protected  boolean applyPrimitive(PrimitiveToken prim, Sexp argList)
          Applica una primitiva alla sua lista di argomenti.
protected  void applyRelation(RelationToken relator, Sexp argList)
          Applica una primitiva di tipo Relational alla sua lista di argomenti.
protected  Sexp assoc(Sexp vars, Sexp vals, boolean eval)
          Data una lista di variabili ed una lista di valori da assegnare a tali variabili, costruisce una lista di coppie variabile-valore.
protected  Sexp cars(Sexp list)
          Costruisce la lista dei car di ogni sottolista di una lista di liste.
Il car di una lista è la testa della lista.
protected  Sexp cdrs(Sexp list)
          Costruisce la lista dei car dei cdr di ogni sottolista di una lista di liste.
protected  int checkEvalArgs(Sexp argList)
          Conta il numero di argomenti in argList e li valuta, ponendo ordinatamente sullo stack i risultati delle valutazioni.
protected  Sexp checknVals(Sexp Vars, Sexp Vals, boolean eval, java.lang.String prim)
          Data una lista di variabili ed una lista di valori da assegnare a tali variabili, costruisce una lista di coppie variabile-valore.
 void clearStackAndLocalEnv()
          Riporta il visitor allo stato di partenza, senza svuotare il global environment.
protected  void ErrorMessage(PrimitiveToken prim, Sexp argList)
          Lancia una eccezione con un messaggio di errore.
protected  Sexp evalBackQuote(Sexp argList)
          Applica la primitiva BackQuote (`) agli argomenti.
protected  void evalBody(Sexp body)
          Esegue la valutazione di una lista di s-expression.
protected  void evalCond(Sexp condList)
          Valuta il corpo di una istruzione cond.
protected  void evalSet()
          Valuta una istruzione set prendendo il valore e la variabile dallo stack.
protected  void evalSetq(Sexp argList)
          Valuta una istruzione setq.
 SexpHashtable getGlobalEnvironment()
          Restituisce il global environment corrente.
protected  Sexp getValueFromLocalEnv(Sexp key, Sexp localEnv)
          Restituisce il valore corrispondente ad un identificatore presente in localEnv.
protected  Sexp listToCouple(Sexp argList)
          Trasforma una lista di liste in una lista di coppie, valutando i secondi elementi.
protected  Sexp macroExpand(Sexp body)
          Esegue il passo di espansione nelle macro.
 void reset()
          Riporta il visitor allo stato di partenza.
protected  double RestOperation(OperationToken operator, Sexp argList, boolean isAdd)
          Costruisce il secondo operando di una operazione trattando tutti gli operandi dal secondo in poi.
 void visit(ConsSexp e)
          Effettua la visita di un ConsSexp, cioè valuta un ConsSexp.
 void visit(IdentSexp e)
          Effettua la visita di un IdentSexp, cioè valuta un IdentSexp.
 void visit(NilSexp e)
          Effettua la visita di un NilSexp, cioè valuta un NilSexp.
 
Methods inherited from class Interpreter.Sexp.Utils.SexpVisitor
getResult, getStack
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

env

protected SexpHashtable env
SexpHashtable globale usato per la valutazione.

Set

protected IdentSexp Set
Identificativo. Lo definisco qui per ragioni di efficienza.

closureIdent

protected IdentSexp closureIdent
Identificativo. Lo definisco qui per ragioni di efficienza.

macroIdent

protected IdentSexp macroIdent
Identificativo. Lo definisco qui per ragioni di efficienza.

nil

protected NilSexp nil
Identificativo. Lo definisco qui per ragioni di efficienza.

True

protected SpecialToken True
Identificativo. Lo definisco qui per ragioni di efficienza.

localEnv

protected Sexp localEnv
SexpHashtable locale usato per la valutazione. E' gestito come una lista di liste dove quella in testa è la lista di bindings a minor visibilità.

file

public java.lang.String file
Nome del file letto dallo standard input tramite la primitiva file.

stop

public boolean stop
Utilizzato per la sospensione della valutazione in corso. Viene settato dal Thread che lancia la valutazione. see Lisp#setStop()
Constructor Detail

EvalSexpVisitor

public EvalSexpVisitor(InputBuffer In,
                       OutputBuffer Out,
                       Parser par)
Costruisce un nuovo EvalSexpVisitor.
Parameters:
In - oggetto InputBuffer su cui viene ridiretto lo standard input.
Out - oggetto OutputBuffer su cui viene ridiretto lo standard output.
par - Parser che effettua l'analisi sintattica della frase.
Method Detail

getGlobalEnvironment

public SexpHashtable getGlobalEnvironment()
Restituisce il global environment corrente.
Returns:
il global environment corrente.

reset

public void reset()
Riporta il visitor allo stato di partenza.

clearStackAndLocalEnv

public void clearStackAndLocalEnv()
Riporta il visitor allo stato di partenza, senza svuotare il global environment.

visit

public void visit(ConsSexp e)
           throws InterpreterException
Effettua la visita di un ConsSexp, cioè valuta un ConsSexp.
Parameters:
e - oggetto che viene visitato.
Overrides:
visit in class SexpVisitor

apply

protected void apply(Sexp fun,
                     Sexp argList)
              throws InterpreterException
Applica un funtore alla sua lista di argomenti.
Il funtore può essere una primitiva, una closure o una macro.
Parameters:
fun - funtore da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicato il funtore.

applyPrimitive

protected boolean applyPrimitive(PrimitiveToken prim,
                                 Sexp argList)
                          throws InterpreterException
Applica una primitiva alla sua lista di argomenti.
Parameters:
prim - primitiva da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata la primitiva.

checkEvalArgs

protected int checkEvalArgs(Sexp argList)
                     throws InterpreterException
Conta il numero di argomenti in argList e li valuta, ponendo ordinatamente sullo stack i risultati delle valutazioni.
Parameters:
argList - lista degli argomenti.
Returns:
il numero di argomenti.

ErrorMessage

protected void ErrorMessage(PrimitiveToken prim,
                            Sexp argList)
                     throws InterpreterException
Lancia una eccezione con un messaggio di errore.
Parameters:
prim - il nome della primitiva serve in caso di errore.
argList - lista degli argomenti.

already

protected boolean already(Sexp id,
                          IdentSexp primitive)
                   throws InterpreterException
Controlla se esiste già un identificatore nell'environment. Se tale identificatore non era stato definito dalla presente primitiva lancia una eccezione. Altrimenti lo rimuove dall'environment. Nell'environment deve poi essere messo: id.toString(), new ConsSexp(value,current).
Parameters:
id - contiene il nome dell'identificatore.
primitive - contiene la primitiva che invoca il presente metodo. return true se ha trovato l'identificatore in env, altrimenti false.

getValueFromLocalEnv

protected Sexp getValueFromLocalEnv(Sexp key,
                                    Sexp localEnv)
                             throws InterpreterException
Restituisce il valore corrispondente ad un identificatore presente in localEnv.
Parameters:
key - identificatore.
localEnv - una lista di liste in cui cercare la chiave key.
Returns:
il valore corrispondente a key nel localEnv oppure null se key è assente.

listToCouple

protected Sexp listToCouple(Sexp argList)
                     throws InterpreterException
Trasforma una lista di liste in una lista di coppie, valutando i secondi elementi.
Parameters:
argList - una lista di liste.
Returns:
lista di coppie.

cars

protected Sexp cars(Sexp list)
             throws InterpreterException
Costruisce la lista dei car di ogni sottolista di una lista di liste.
Il car di una lista è la testa della lista.
Parameters:
list - una lista di liste.
Returns:
la lista dei car di ogni sottolista.

cdrs

protected Sexp cdrs(Sexp list)
             throws InterpreterException
Costruisce la lista dei car dei cdr di ogni sottolista di una lista di liste. Il car di una lista è la testa della lista, il cdr di una lista è la coda della lista.
Parameters:
list - una lista di liste.
Returns:
la lista dei car di ogni sottolista.

evalCond

protected void evalCond(Sexp condList)
                 throws InterpreterException
Valuta il corpo di una istruzione cond.
Parameters:
condList - lista contenente le ConsSexp da valutare.

evalSet

protected void evalSet()
                throws InterpreterException
Valuta una istruzione set prendendo il valore e la variabile dallo stack.

evalSetq

protected void evalSetq(Sexp argList)
                 throws InterpreterException
Valuta una istruzione setq.
Parameters:
argList - lista alternata di variabili e dei valori

applyOperation

protected void applyOperation(OperationToken operator,
                              Sexp argList)
                       throws InterpreterException
Applica una primitiva di tipo OperationalSet alla sua lista di argomenti.
Parameters:
operator - primitiva di tipo OperationalSet da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata la primitiva di tipo OperationalSet.

RestOperation

protected double RestOperation(OperationToken operator,
                               Sexp argList,
                               boolean isAdd)
                        throws InterpreterException
Costruisce il secondo operando di una operazione trattando tutti gli operandi dal secondo in poi.
Parameters:
operator - operazione primitiva da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata l'operazione primitiva.
isAdd - indica se l'operazione di addizione (comprende anche la sottrazione) o di moltiplicazione (comprende anche la divisione).
Returns:
il risultato della valutazione.

applyRelation

protected void applyRelation(RelationToken relator,
                             Sexp argList)
                      throws InterpreterException
Applica una primitiva di tipo Relational alla sua lista di argomenti.
Parameters:
prim - primitiva di tipo Relational da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata la primitiva di tipo Relational.

applyClosure

protected void applyClosure(Sexp clos,
                            Sexp argList)
                     throws InterpreterException
Applica una closure alla sua lista di argomenti.
Parameters:
clos - closure da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata la closure.

applyMacro

protected void applyMacro(Sexp macro,
                          Sexp argList)
                   throws InterpreterException
Applica una macro alla sua lista di argomenti.
Parameters:
macro - macro da applicare alla lista di argomenti.
argList - lista di argomenti a cui viene applicata la macro.

evalBody

protected void evalBody(Sexp body)
                 throws InterpreterException
Esegue la valutazione di una lista di s-expression.
Parameters:
body - la lista da valutare.

macroExpand

protected Sexp macroExpand(Sexp body)
                    throws InterpreterException
Esegue il passo di espansione nelle macro.
Parameters:
body - la lista da espandere.
Returns:
il risultato dell'espansione.

checknVals

protected Sexp checknVals(Sexp Vars,
                          Sexp Vals,
                          boolean eval,
                          java.lang.String prim)
                   throws InterpreterException
Data una lista di variabili ed una lista di valori da assegnare a tali variabili, costruisce una lista di coppie variabile-valore. Precedentemente controlla se le due liste sono lunghe uguali, altrimenti genera un messaggio utilizzando la stringa prim.
Parameters:
Vars - lista delle variabili.
Vals - lista dei valori.
prim - nome della primitiva a cui devono essere applicati i bindings.
Returns:
lista delle coppie variabile-valore.

assoc

protected Sexp assoc(Sexp vars,
                     Sexp vals,
                     boolean eval)
              throws InterpreterException
Data una lista di variabili ed una lista di valori da assegnare a tali variabili, costruisce una lista di coppie variabile-valore. Le due liste devono essere lunghe uguali.
Parameters:
vars - lista delle variabili che devono essere IdentToken.
vals - lista dei valori.
Returns:
lista delle coppie variabile-valore.

evalBackQuote

protected Sexp evalBackQuote(Sexp argList)
                      throws InterpreterException
Applica la primitiva BackQuote (`) agli argomenti.
Parameters:
argList - lista degli argomenti return risultato della valutazione

visit

public void visit(IdentSexp e)
           throws InterpreterException
Effettua la visita di un IdentSexp, cioè valuta un IdentSexp.
Parameters:
e - oggetto che viene visitato.
Overrides:
visit in class SexpVisitor

visit

public void visit(NilSexp e)
           throws InterpreterException
Effettua la visita di un NilSexp, cioè valuta un NilSexp.
Parameters:
e - oggetto che viene visitato.
Overrides:
visit in class SexpVisitor


Codice realizzato da Francesco Geri & Marco Tamanti