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
*/
@SuppressWarnings (
{ "all" } )
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$$";
}
/*-----------------------------------------------------------*/
}