| package java_cup; |
| |
| /** This abstract class serves as the base class for grammar symbols (i.e., |
| * both terminals and non-terminals). Each symbol has a name string, and |
| * a string giving the type of object that the symbol will be represented by |
| * on the runtime parse stack. In addition, each symbol maintains a use count |
| * in order to detect symbols that are declared but never used, and an index |
| * number that indicates where it appears in parse tables (index numbers are |
| * unique within terminals or non terminals, but not across both). |
| * |
| * @see java_cup.terminal |
| * @see java_cup.non_terminal |
| * @version last updated: 11/25/95 |
| * @author Scott Hudson |
| */ |
| public abstract class symbol { |
| /*-----------------------------------------------------------*/ |
| /*--- Constructor(s) ----------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Full constructor. |
| * @param nm the name of the symbol. |
| * @param tp a string with the type name. |
| */ |
| public symbol(String nm, String tp) |
| { |
| /* sanity check */ |
| if (nm == null) nm = ""; |
| |
| /* apply default if no type given */ |
| if (tp == null) tp = "java_cup.runtime.token"; |
| |
| _name = nm; |
| _stack_type = tp; |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Constructor with default type. |
| * @param nm the name of the symbol. |
| */ |
| public symbol(String nm) |
| { |
| this(nm, null); |
| } |
| |
| /*-----------------------------------------------------------*/ |
| /*--- (Access to) Instance Variables ------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** String for the human readable name of the symbol. */ |
| protected String _name; |
| |
| /** String for the human readable name of the symbol. */ |
| public String name() {return _name;} |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** String for the type of object used for the symbol on the parse stack. */ |
| protected String _stack_type; |
| |
| /** String for the type of object used for the symbol on the parse stack. */ |
| public String stack_type() {return _stack_type;} |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Count of how many times the symbol appears in productions. */ |
| protected int _use_count = 0; |
| |
| /** Count of how many times the symbol appears in productions. */ |
| public int use_count() {return _use_count;} |
| |
| /** Increment the use count. */ |
| public void note_use() {_use_count++;} |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Index of this symbol (terminal or non terminal) in the parse tables. |
| * Note: indexes are unique among terminals and unique among non terminals, |
| * however, a terminal may have the same index as a non-terminal, etc. |
| */ |
| protected int _index; |
| |
| /** Index of this symbol (terminal or non terminal) in the parse tables. |
| * Note: indexes are unique among terminals and unique among non terminals, |
| * however, a terminal may have the same index as a non-terminal, etc. |
| */ |
| public int index() {return _index;} |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Indicate if this is a non-terminal. Here in the base class we |
| * don't know, so this is abstract. |
| */ |
| public abstract boolean is_non_term(); |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Convert to a string. */ |
| public String toString() |
| { |
| return name(); |
| } |
| |
| /*-----------------------------------------------------------*/ |
| |
| }; |