| package java_cup; |
| |
| /** This class represents a part of a production which is a symbol (terminal |
| * or non terminal). This simply maintains a reference to the symbol in |
| * question. |
| * |
| * @see java_cup.production |
| * @version last updated: 11/25/95 |
| * @author Scott Hudson |
| */ |
| public class symbol_part extends production_part { |
| |
| /*-----------------------------------------------------------*/ |
| /*--- Constructor(s) ----------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Full constructor. |
| * @param sym the symbol that this part is made up of. |
| * @param lab an optional label string for the part. |
| */ |
| public symbol_part(symbol sym, String lab) throws internal_error |
| { |
| super(lab); |
| |
| if (sym == null) |
| throw new internal_error( |
| "Attempt to construct a symbol_part with a null symbol"); |
| _the_symbol = sym; |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Constructor with no label. |
| * @param sym the symbol that this part is made up of. |
| */ |
| public symbol_part(symbol sym) throws internal_error |
| { |
| this(sym,null); |
| } |
| |
| /*-----------------------------------------------------------*/ |
| /*--- (Access to) Instance Variables ------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** The symbol that this part is made up of. */ |
| protected symbol _the_symbol; |
| |
| /** The symbol that this part is made up of. */ |
| public symbol the_symbol() {return _the_symbol;} |
| |
| /*-----------------------------------------------------------*/ |
| /*--- General Methods ---------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Respond that we are not an action part. */ |
| public boolean is_action() { return false; } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Equality comparison. */ |
| public boolean equals(symbol_part other) |
| { |
| return other != null && super.equals(other) && |
| the_symbol().equals(other.the_symbol()); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Generic equality comparison. */ |
| public boolean equals(Object other) |
| { |
| if (!(other instanceof symbol_part)) |
| return false; |
| else |
| return equals((symbol_part)other); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Produce a hash code. */ |
| public int hashCode() |
| { |
| return super.hashCode() ^ |
| (the_symbol()==null ? 0 : the_symbol().hashCode()); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Convert to a string. */ |
| public String toString() |
| { |
| if (the_symbol() != null) |
| return super.toString() + the_symbol(); |
| else |
| return super.toString() + "$$MISSING-SYMBOL$$"; |
| } |
| |
| /*-----------------------------------------------------------*/ |
| |
| }; |