1/*
2 * Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26package com.sun.java_cup.internal.runtime;
27
28/**
29 * Defines the Symbol class, which is used to represent all terminals
30 * and nonterminals while parsing.  The lexer should pass CUP Symbols
31 * and CUP returns a Symbol.
32 *
33 * @author  Frank Flannery
34 */
35
36/* ****************************************************************
37  Class Symbol
38  what the parser expects to receive from the lexer.
39  the token is identified as follows:
40  sym:    the symbol type
41  parse_state: the parse state.
42  value:  is the lexical value of type Object
43  left :  is the left position in the original input file
44  right:  is the right position in the original input file
45******************************************************************/
46
47public class Symbol {
48
49/*******************************
50  Constructor for l,r values
51 *******************************/
52
53  public Symbol(int id, int l, int r, Object o) {
54    this(id);
55    left = l;
56    right = r;
57    value = o;
58  }
59
60/*******************************
61  Constructor for no l,r values
62********************************/
63
64  public Symbol(int id, Object o) {
65    this(id);
66    left = -1;
67    right = -1;
68    value = o;
69  }
70
71/*****************************
72  Constructor for no value
73  ***************************/
74
75  public Symbol(int sym_num, int l, int r) {
76    sym = sym_num;
77    left = l;
78    right = r;
79    value = null;
80  }
81
82/***********************************
83  Constructor for no value or l,r
84***********************************/
85
86  public Symbol(int sym_num) {
87    this(sym_num, -1);
88    left = -1;
89    right = -1;
90    value = null;
91  }
92
93/***********************************
94  Constructor to give a start state
95***********************************/
96  public Symbol(int sym_num, int state)
97    {
98      sym = sym_num;
99      parse_state = state;
100    }
101
102/*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
103
104  /** The symbol number of the terminal or non terminal being represented */
105  public int sym;
106
107  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
108
109  /** The parse state to be recorded on the parse stack with this symbol.
110   *  This field is for the convenience of the parser and shouldn't be
111   *  modified except by the parser.
112   */
113  public int parse_state;
114  /** This allows us to catch some errors caused by scanners recycling
115   *  symbols.  For the use of the parser only. [CSA, 23-Jul-1999] */
116  boolean used_by_parser = false;
117
118/*******************************
119  The data passed to parser
120 *******************************/
121
122  public int left, right;
123  public Object value;
124
125  /*****************************
126    Printing this token out. (Override for pretty-print).
127    ****************************/
128  public String toString() { return "#"+sym; }
129}
130