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
******************************************************************************/
@SuppressWarnings (
{ "all" } )
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;
}
}