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