All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class it.unipi.di.compiler.parser.ParseNode

java.lang.Object
   |
   +----it.unipi.di.compiler.parser.ParseNode

public abstract class ParseNode
extends Object

Classe base che rappresenta un nodo nell'albero di sintassi astratta. Questa classe è il cuore per realizzare il parser, infatti attraverso la definizione del metodo parse si può specializzare il parsing di un simbolo della grammatica. Il tokenizer decide di quanti simboli è possibile fare il lookahead. Attraverso l'ereditarietà è poi possibile discriminare i vari tipi di nodi, come ad esempio gli statement e le espressioni. Ad esempio in un linguaggio like-C potremmo avere:

   public abstract class Expr extends ParseNode {
     ...
   }
   public abstract class Stat extends ParseNode {
     ...
   }
   public class ifStatement extends Stat {
     ...
   }
   public class addExpr extends Expr {
     ...
   }
 
Inoltre è possibile fornire metodi ai vari nodi per la valutazione. In questo modo è possibile realizzare con semplicità interpreti. L'uso di interfacce o di specializzazione di questa classe permette anche di associare dei metodi di generazione del codice intermedio del compilatore.

Version:
1.1
Author:
Antonio Cisternino
See Also:
Parser

Constructor Index

 o ParseNode()

Method Index

 o match(Tokenizer)
Controlla se i prossimi simboli possono appartenere al simbolo che il nodo sa controllare.
 o parse(Tokenizer)
Questo metodo effettua il parse per il nodo corrente.
 o skipTokens(Tokenizer, int)
Scarta i token del Tokenizer finché non ne trova uno particolare.
 o skipTokens(Tokenizer, String)
Scarta i token del Tokenizer finché non ne trova uno particolare.

Constructors

 o ParseNode
 public ParseNode()

Methods

 o parse
 protected abstract void parse(Tokenizer t) throws ParserException, IOException
Questo metodo effettua il parse per il nodo corrente.

Throws: ParserException
Segnala eventuali errori di sintassi.
Throws: IOException
Segnala eventuali errori nella lettura dello stream di input.
 o match
 public static boolean match(Tokenizer t) throws IOException
Controlla se i prossimi simboli possono appartenere al simbolo che il nodo sa controllare. Questo metodo deve lasciare immutato il Tokenizer. L'implementazione di default restituisce sempre false.

Parameters:
t - Tokenizer su cui fare il lookahead.
Returns:
true se è stato riconosciuto il simbolo da parsare, false altrimenti.
Throws: IOException
Segnala eventuali errori nella lettura dello stream di input.
 o skipTokens
 public boolean skipTokens(Tokenizer t,
                           int keyword) throws IOException
Scarta i token del Tokenizer finché non ne trova uno particolare. Il token trovato viene reinserito nel tokenizer pronto per essere estratto.

Parameters:
t - Tokenizer da cui estrarre i token.
keyword - Identificativo della keyword da cercare.
Returns:
Restituisce true se la keyword è stata trovata, false se la fine del file è stata raggiunta.
 o skipTokens
 public boolean skipTokens(Tokenizer t,
                           String token) throws IOException
Scarta i token del Tokenizer finché non ne trova uno particolare. Il token trovato viene reinserito nel tokenizer pronto per essere estratto.

Parameters:
t - Tokenizer da cui estrarre i token.
token - (non keyword) da cercare.
Returns:
Restituisce true se il token non è stato trovato, false se la fine del file è stata raggiunta.
Throws: IOException
Errore di lettura dallo stream.

All Packages  Class Hierarchy  This Package  Previous  Next  Index