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$$" ; } /*-----------------------------------------------------------*/ }