Interpreter
Class Prolog

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

public class Prolog
extends java.lang.Thread

Interprete prolog.
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 delle classi EngineSexpVisitor ed EvalVisitor.

See Also:
InterpreterApplet, EngineSexpVisitor, EvalVisitor

Field Summary
 boolean kill
          Se true indica all'interprete prolog di interrompere e terminare l'esecuzione.
protected  boolean stop
          Se true indica all'interprete prolog di sospendere la risoluzione in corso.
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
Prolog(InputBuffer input, OutputBuffer output, OutputBuffer excOut)
          Costruttore utilizzato per creare l'interprete prolog di default.
Prolog(InputBuffer input, OutputBuffer output, OutputBuffer excOut, java.lang.Class extEngine, java.lang.Class extEval)
          Costruttore utilizzato per creare l'interprete prolog esteso.
 
Method Summary
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 prolog da shell DOS.
 void resetDatabase()
          Riporta il database allo stato iniziale, cioè contenente zero clausole.
protected  void risolvi()
          Avvia la risoluzione.
 void run()
          Questo è il metodo che pone in esecuzione il corrente thread.
 void setNormalSpeech(boolean flag)
          Per modificare la lettura delle variabili.
 void setOccurCheck(boolean flag)
          Consente di modificare l'opzione di occur check per l'algoritmo di l'unificazione.
 void setSafeness(boolean flag)
          Consente di modificare l'opzione per il controllo sulla safeness.
 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 prolog di sospendere la risoluzione in corso.
See Also:
setStop()

kill

public boolean kill
Se true indica all'interprete prolog 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 prolog, altrimenti si perderebbe tutto il database.

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

Constructor Detail

Prolog

public Prolog(InputBuffer input,
              OutputBuffer output,
              OutputBuffer excOut)
       throws InterpreterException
Costruttore utilizzato per creare l'interprete prolog di default. Se l'interprete prolog 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
excOut - stream di output: dove vengono stampate le eccezioni

Prolog

public Prolog(InputBuffer input,
              OutputBuffer output,
              OutputBuffer excOut,
              java.lang.Class extEngine,
              java.lang.Class extEval)
       throws InterpreterException
Costruttore utilizzato per creare l'interprete prolog esteso. Se l'interprete prolog 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
excOut - stream di output: dove vengono stampate le eccezioni
extEngine - classe che estende le funzionalità di EngineSexpVisitor
extEval - classe che estende le funzionalità di EvalVisitor
Throws:
InterpreterException - nel caso la costruzione dell'interprete esteso fallisca.
See Also:
EngineSexpVisitor, EvalVisitor
Method Detail

setOccurCheck

public void setOccurCheck(boolean flag)
Consente di modificare l'opzione di occur check per l'algoritmo di l'unificazione. L'occur check è il controllo della presenza di riferimenti circolari.


Di default l'unificazione viene eseguita senza controllare l'eventuale presenza di occur check.

Invocando il metodo setOccurCheck() con true si abilita tale controllo.

Invocando il metodo setOccurCheck() con false si disabilita tale controllo.

Parameters:
flag - se true abilita l'occur check, se false lo disabilita.

setSafeness

public void setSafeness(boolean flag)
Consente di modificare l'opzione per il controllo sulla safeness. Se attivo, la valutazione di un not seguito da una clausola non ground viene posticipata il più possibile.
Es:
:- not(a(X)), a(X).
viene eseguita come:
:- a(X), not(a(X)).
Se attivo viene lanciata una eccezione quando non è più possibile posticipare una clausola negata non ground. Di default è true.

setNormalSpeech

public void setNormalSpeech(boolean flag)
Per modificare la lettura delle variabili.
Se false le variabili sono le stringhe che iniziano con la lettera maiuscola. Così prevede prolog.

Se true le variabili sono le stringhe che iniziano con la lettera minuscola. Così prevede il senso comune, infatti solitamente i nomi propri iniziano con la maiuscola (Antonio, Marco, Francesco,...), mentre i nomi comuni con la minuscola (professore, studente, ...). Di default è false.

resetDatabase

public void resetDatabase()
Riporta il database allo stato iniziale, cioè contenente zero clausole.

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 il Goal non abbia una soluzione finita e dunque entri in loop.
Valido anche nel caso la risoluzione non succeda o fallisca in un tempo coerente.

leggiStdIn

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

risolvi

protected void risolvi()
Avvia la risoluzione.

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 prolog 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