package java_cup.runtime ;
/**
* Defines the Symbol class, which is used to represent all terminals and
* nonterminals while parsing. The lexer should pass CUP Symbols and CUP returns
* a Symbol.
*
* @version last updated: 7/3/96
* @author Frank Flannery
*/
/*******************************************************************************
* Class Symbol what the parser expects to receive from the lexer. the token is
* identified as follows: sym: the symbol type parse_state: the parse state.
* value: is the lexical value of type Object left : is the left position in the
* original input file right: is the right position in the original input file
* xleft: is the left position Object in the original input file xright: is the
* left position Object in the original input file
******************************************************************************/
public class Symbol
{
// TUM 20060327: Added new Constructor to provide more flexible way
// for location handling
/*******************************
*******************************/
public Symbol ( int id , Symbol left , Symbol right , Object o )
{
this ( id , left.left , right.right , o ) ;
}
public Symbol ( int id , Symbol left , Symbol right )
{
this ( id , left.left , right.right ) ;
}
/*****************************************************************************
* Constructor for l,r values
****************************************************************************/
public Symbol ( int id , int l , int r , Object o )
{
this ( id ) ;
left = l ;
right = r ;
value = o ;
}
/*****************************************************************************
* Constructor for no l,r values
****************************************************************************/
public Symbol ( int id , Object o )
{
this ( id , - 1 , - 1 , o ) ;
}
/*****************************************************************************
* Constructor for no value
****************************************************************************/
public Symbol ( int id , int l , int r )
{
this ( id , l , r , null ) ;
}
/*****************************************************************************
* Constructor for no value or l,r
****************************************************************************/
public Symbol ( int sym_num )
{
this ( sym_num , - 1 ) ;
left = - 1 ;
right = - 1 ;
}
/*****************************************************************************
* Constructor to give a start state
****************************************************************************/
Symbol ( int sym_num , int state )
{
sym = sym_num ;
parse_state = state ;
}
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
/** The symbol number of the terminal or non terminal being represented */
public int sym ;
/* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . */
/**
* The parse state to be recorded on the parse stack with this symbol. This
* field is for the convenience of the parser and shouldn't be modified except
* by the parser.
*/
public int parse_state ;
/**
* This allows us to catch some errors caused by scanners recycling symbols.
* For the use of the parser only. [CSA, 23-Jul-1999]
*/
boolean used_by_parser = false ;
/*****************************************************************************
* The data passed to parser
****************************************************************************/
public int left , right ;
public Object value ;
/*****************************************************************************
* Printing this token out. (Override for pretty-print).
****************************************************************************/
public String toString ( )
{
return "#" + sym ;
}
}