Interpreter
Class Lisp

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--Interpreter.Lisp

public class Lisp
extends java.lang.Thread

Interprete lisp.
Può essere utilizzato tramite l'applet InterpreterApplet, oppure utilizzato da solo tramite una shell DOS.
Questa classe infatti contiene il metodo main(String s[]).

Esistono due costruttori: il primo è quello standard (a 3 argomenti), mentre il secondo deve essere utilizzato se si costruisce una versione estesa della classe EvalSexpVisitor.

See Also:
InterpreterApplet, EvalSexpVisitor

Field Summary
 boolean addCode
           
 boolean kill
          Se true indica all'interprete lisp di interrompere e terminare l'esecuzione.
protected  boolean stop
          Se true indica all'interprete lisp di sospendere la valutazione in corso.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
Lisp(InputBuffer input, OutputBuffer output, OutputBuffer codeArea)
          Costruttore utilizzato per creare l'interprete lisp di default.
Lisp(InputBuffer input, OutputBuffer output, OutputBuffer codeArea, java.lang.Class extVisitor)
          Costruttore utilizzato per creare l'interprete lisp esteso.
 
Method Summary
 SexpHashtable getGlobalEnvironment()
          Restituisce il global environment. return il global environment preso da EvalSexpVisitor o da una sua sottoclasse corrente.
protected  void leggiBuffer()
          Legge da buffer.
protected  void leggiFile()
          Legge input da file.
protected  void leggiStdIn()
          Attende input ed avvia la risoluzione.
static void main(java.lang.String[] s)
          Questo è il metodo main per eseguire l'interprete lisp da shell DOS.
 void resetGlobalEnv()
          Riporta il glogal environment allo stato di partenza.
protected  void risolvi(java.lang.String str)
          Avvia la risoluzione.
 void run()
          Questo è il metodo che pone in esecuzione il corrente thread.
 void setBuffer(InputBuffer r)
          Utilizzato da InterpreterApplet per compilare il codice presente nella Code Area.
 void setStop()
          Indica all'interprete di sospendere la risoluzione in corso.
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

stop

protected boolean stop
Se true indica all'interprete lisp di sospendere la valutazione in corso.
See Also:
setStop()

kill

public boolean kill
Se true indica all'interprete lisp di interrompere e terminare l'esecuzione.
Può successivamente essere riavviato ripristinando il valore false di questa variabile, poi invocando il metodo start().

Per fermare il thread si setti true questa variabile che normalmente è false. Viene controllata ciclicamente.
Non è stato utilizzato il metodo stop perché deprecato e inerentemente non safe.
Inoltre in un'applet non è corretto uccidere ogni volta che si esce dalla finestra il thread lisp, altrimenti si perderebbe tutto il global environment.

Se non utilizzato il thread non consuma risorse: rimane semplicemente in attesa di input.


addCode

public boolean addCode
Constructor Detail

Lisp

public Lisp(InputBuffer input,
            OutputBuffer output,
            OutputBuffer codeArea)
     throws InterpreterException
Costruttore utilizzato per creare l'interprete lisp di default. Se l'interprete lisp viene utilizzato da shell DOS come input si deve passare lo stream System.in e per entrambi gli altri due parametri lo System.out.
Parameters:
input - stream di input: da dove vengono letti i comandi
output - stream di output: dove vengono stampati i risultati
codeArea - stream di codeArea: dove viene stampato il comando corrente in caso di successo della valutazione

Lisp

public Lisp(InputBuffer input,
            OutputBuffer output,
            OutputBuffer codeArea,
            java.lang.Class extVisitor)
     throws InterpreterException
Costruttore utilizzato per creare l'interprete lisp esteso. Se l'interprete lisp viene utilizzato da shell DOS come input si deve passare lo stream System.in e per entrambi gli altri due parametri lo System.out.
Parameters:
input - stream di input: da dove vengono letti i comandi
output - stream di output: dove vengono stampati i risultati
codeArea - stream di codeArea: dove viene stampato il comando corrente in caso di successo della valutazione
extVisitor - classe che estende le funzionalità di EvalSexpVisitor
Throws:
InterpreterException - nel caso la costruzione dell'interprete esteso fallisca.
See Also:
EvalSexpVisitor
Method Detail

getGlobalEnvironment

public SexpHashtable getGlobalEnvironment()
Restituisce il global environment. return il global environment preso da EvalSexpVisitor o da una sua sottoclasse corrente.

setBuffer

public void setBuffer(InputBuffer r)
Utilizzato da InterpreterApplet per compilare il codice presente nella Code Area.
Parameters:
r - stream da cui l'interprete lisp leggerà i comandi a partire dall'invocazione di questo metodo.
Quando viene trovato l'EOF si ritorna a leggere i comandi dallo stream di default.

resetGlobalEnv

public void resetGlobalEnv()
Riporta il glogal environment allo stato di partenza.

run

public void run()
Questo è il metodo che pone in esecuzione il corrente thread. Per utilizzarlo correttamente bisognerebbe invocare il metodo start(). Una volta avviato l'interprete prolog stampa il prompt e si mette in attesa di input.
Overrides:
run in class java.lang.Thread

setStop

public void setStop()
Indica all'interprete di sospendere la risoluzione in corso.
Può essere utilizzato nel caso la valutazione entri in loop.
Valido anche per interrompere una valutazione troppo lunga.

leggiStdIn

protected void leggiStdIn()
Attende input ed avvia la risoluzione.

risolvi

protected void risolvi(java.lang.String str)
Avvia la risoluzione.

leggiBuffer

protected void leggiBuffer()
Legge da buffer.
See Also:
setBuffer(Interpreter.Utils.InputBuffer)

leggiFile

protected void leggiFile()
Legge input da file.

main

public static void main(java.lang.String[] s)
                 throws InterpreterException
Questo è il metodo main per eseguire l'interprete lisp da shell DOS.
Crea un oggetto di questa classe passandogli i due stream di standard input e di standard output.
Poi avvia l'esecuzione tramite il metodo start(). I due stream vengono prima incapsulati all'interno di buffer:
InputBuffer in = new InputBuffer(System.in);
OutputBuffer out = new OutputBuffer(new OutputStreamWriter(System.out));
Throws:
InterpreterException - nel caso la costruzione dei buffer per gli stream fallisca.
See Also:
InputBuffer, OutputBuffer


Codice realizzato da Francesco Geri & Marco Tamanti