You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
2.9 KiB
130 lines
2.9 KiB
/*
|
|
* Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
|
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*/
|
|
|
|
package com.sun.java_cup.internal.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.
|
|
*
|
|
* @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
|
|
******************************************************************/
|
|
|
|
public class Symbol {
|
|
|
|
/*******************************
|
|
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);
|
|
left = -1;
|
|
right = -1;
|
|
value = o;
|
|
}
|
|
|
|
/*****************************
|
|
Constructor for no value
|
|
***************************/
|
|
|
|
public Symbol(int sym_num, int l, int r) {
|
|
sym = sym_num;
|
|
left = l;
|
|
right = r;
|
|
value = null;
|
|
}
|
|
|
|
/***********************************
|
|
Constructor for no value or l,r
|
|
***********************************/
|
|
|
|
public Symbol(int sym_num) {
|
|
this(sym_num, -1);
|
|
left = -1;
|
|
right = -1;
|
|
value = null;
|
|
}
|
|
|
|
/***********************************
|
|
Constructor to give a start state
|
|
***********************************/
|
|
public 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; }
|
|
}
|