All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java_cup.runtime.Symbol Maven / Gradle / Ivy

package java_cup.runtime;

import edu.mit.csail.sdg.alloy4.Pos;

/**
 * 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, Pos pos, Object o) {
        this(id, -1, -1, o);
        this.pos = pos;
    }

    /*****************************
     * 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 Pos    pos;
    public int    left, right;
    public Object value;

    /*****************************
     * Printing this token out. (Override for pretty-print).
     ****************************/
    @Override
    public String toString() {
        return "#" + sym;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy