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