
package java_cup.runtime;

/** This class represents a (terminal or non-terminal) symbol that, among
 *  other things can be placed on the parse stack.  Symbols are used to 
 *  keep track of state on the parse stack.  The symbol currently on top
 *  of the stack contains the current state in the parse_state field.
 *  In addition to the parse_state field, symbols also maintain a record
 *  of the symbol number that they represent in the sym field.  Finally, 
 *  symbols are used contain to any attributes used by semantic action (this
 *  is done via fields added in subclasses -- see for example, int_token and
 *  str_token).
 *
 * @see java_cup.runtime.token
 * @see java_cup.runtime.int_token
 * @see java_cup.runtime.str_token
 * @version last updated: 11/25/95
 * @author  Scott Hudson
 */

public class symbol 
{

    /** Full constructor. */
    public symbol(int sym_num, int state)
    {
        sym = sym_num;
        parse_state = state;
    }

    /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/

    /** Constructor without a known state. */
    public symbol(int sym_num)
    {
        this(sym_num, -1);
    }

    /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/

    /** 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;
};


