Interpreter.LispInterpreter
Class Parser

java.lang.Object
  |
  +--Interpreter.LispInterpreter.Parser

public class Parser
extends java.lang.Object

Analizzatore sintattico (AS) per linguaggio Lisp (e Scheme). Un AS è un riconoscitore delle frasi del linguaggio. Oltre a riconoscere le frasi del linguaggio, il Parser costruisce una rappresentazione interna delle frasi stesse.

L'utilizzo normale prevede di utilizzare il comando feed per indicare al lexer da dove prendere l'input. Dopo una feed si utilizza il metodo read() per farsi restituire la forma interna della prima frase. Si richiama la read() per la frase successiva.
Il lexer è gestito direttamente dal parser.

Si può anche interrompere il parsing di una frase per iniziarne una nuova, poi successivamente ripristinare il parsing interrotto. Questo si può ottenere grazie ai metodi feed e reload.

Grammatica Scheme:

 

Program		::= 	Sexp | Sexp Program
Sexp		::= 	ConsSexp | Ident
ConsSexp		::= 	() | ( Sexp PairOrList
PairOrList	::= 	) | . Sexp ) | Sexp PairOrList
Ident 		::= 	<identificatore> | <numero>

See Also:
read(), feed(Reader), feed(String), reload(LispLexer)

Constructor Summary
Parser(OutputBuffer Out)
          Costruisce un nuovo Parser.
 
Method Summary
 LispLexer feed(java.io.Reader I)
          Crea un nuovo oggetto LispLexer inizializzato con l'oggetto Reader specificato.
 LispLexer feed(java.lang.String s)
          Crea un nuovo oggetto LispLexer inizializzato con l'oggetto String specificato.
static void main(java.lang.String[] args)
          Metodo main utilizzato per il debugging.
 Sexp read()
          Consuma un'istruzione del Programma Lisp.
 void reload(LispLexer lexer)
          Il lexer passato come parametro diventa il lexer corrente.
 void setPrimitive(java.lang.String prim)
          Aggiunge una primitiva al set di primitive predefinite.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Parser

public Parser(OutputBuffer Out)
Costruisce un nuovo Parser.
Il nuovo Parser viene inizializzato con un OutputBuffer, sul quale defluiranno i messaggi per lo standard output.
Parameters:
Out - un oggetto OutputBuffer che costituirà lo standard output.
Method Detail

setPrimitive

public void setPrimitive(java.lang.String prim)
Aggiunge una primitiva al set di primitive predefinite.
Parameters:
prim - nome della primitiva da aggiungere al set di primitive predefinite.

feed

public LispLexer feed(java.io.Reader I)
Crea un nuovo oggetto LispLexer inizializzato con l'oggetto Reader specificato.
Dal momento in cui si invoca questo metodo il Parser utilizza un nuovo lexer inizializzato con l'oggetto Reader specificato. Grazie a questo metodo è possibile utilizzare sempre lo stesso oggetto Parser per input diversi, in quanto è il lexer (LispLexer) che viene cambiato. È possibile ripristinare il vecchio lexer tramite il metodo reload. Per farlo bisogna salvare il vecchio lexer (che viene restituito da questo metodo) e richiamare il metodo reload con parametro il vecchio lexer.
Parameters:
I - oggetto Reader con cui inizializzare il nuovo lexer.
Returns:
il lexer precedente.
See Also:
reload(LispLexer)

feed

public LispLexer feed(java.lang.String s)
Crea un nuovo oggetto LispLexer inizializzato con l'oggetto String specificato.
Dal momento in cui si invoca questo metodo il Parser utilizza un nuovo lexer inizializzato con l'oggetto String specificato. Grazie a questo metodo è possibile utilizzare sempre lo stesso oggetto Parser per input diversi, in quanto è il lexer (LispLexer) che viene cambiato. È possibile ripristinare il vecchio lexer tramite il metodo reload. Per farlo bisogna salvare il vecchio lexer (che viene restituito da questo metodo) e richiamare il metodo reload con parametro il vecchio lexer.
Parameters:
s - oggetto String con cui inizializzare il nuovo lexer.
Returns:
il lexer precedente.
See Also:
reload(LispLexer)

reload

public void reload(LispLexer lexer)
Il lexer passato come parametro diventa il lexer corrente. Il valore del lexer precedente alla chiamata viene perso.
Parameters:
Lexer - oggetto LispLexer che diventerà il lexer attuale.
See Also:
feed(Reader), feed(String)

read

public Sexp read()
          throws InterpreterException
Consuma un'istruzione del Programma Lisp. Il programma Lisp è contenuto in forma di stringa nel lexer (oggetto LispLexer). Un'istruzione è una Sexp.
Returns:
la Sexp analizzata, oppure EofToken in caso di end-of-file.
Throws:
InterpreterException - se la frase non è ben formata.

main

public static void main(java.lang.String[] args)
Metodo main utilizzato per il debugging.


Codice realizzato da Francesco Geri & Marco Tamanti