Home | History | Annotate | Download | only in java_cup
      1 package java_cup;
      2 
      3 /** This class represents one part (either a symbol or an action) of a
      4  *  production.  In this base class it contains only an optional label
      5  *  string that the user can use to refer to the part within actions.<p>
      6  *
      7  *  This is an abstract class.
      8  *
      9  * @see     java_cup.production
     10  * @version last updated: 11/25/95
     11  * @author  Scott Hudson
     12  */
     13 public abstract class production_part {
     14 
     15   /*-----------------------------------------------------------*/
     16   /*--- Constructor(s) ----------------------------------------*/
     17   /*-----------------------------------------------------------*/
     18 
     19   /** Simple constructor. */
     20   public production_part(String lab)
     21     {
     22       _label = lab;
     23     }
     24 
     25   /*-----------------------------------------------------------*/
     26   /*--- (Access to) Instance Variables ------------------------*/
     27   /*-----------------------------------------------------------*/
     28 
     29   /** Optional label for referring to the part within an action (null for
     30    *  no label).
     31    */
     32   protected String _label;
     33 
     34   /** Optional label for referring to the part within an action (null for
     35    *  no label).
     36    */
     37   public String label() {return _label;}
     38 
     39   /*-----------------------------------------------------------*/
     40   /*--- General Methods ---------------------------------------*/
     41   /*-----------------------------------------------------------*/
     42 
     43   /** Indicate if this is an action (rather than a symbol).  Here in the
     44    * base class, we don't this know yet, so its an abstract method.
     45    */
     46   public abstract boolean is_action();
     47 
     48   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
     49 
     50   /** Equality comparison. */
     51   public boolean equals(production_part other)
     52     {
     53       if (other == null) return false;
     54 
     55       /* compare the labels */
     56       if (label() != null)
     57     return label().equals(other.label());
     58       else
     59     return other.label() == null;
     60     }
     61 
     62   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
     63 
     64   /** Generic equality comparison. */
     65   public boolean equals(Object other)
     66     {
     67       if (!(other instanceof production_part))
     68         return false;
     69       else
     70     return equals((production_part)other);
     71     }
     72 
     73   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
     74 
     75   /** Produce a hash code. */
     76   public int hashCode()
     77     {
     78       return label()==null ? 0 : label().hashCode();
     79     }
     80 
     81   /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
     82 
     83   /** Convert to a string. */
     84   public String toString()
     85     {
     86       if (label() != null)
     87     return label() + ":";
     88       else
     89     return " ";
     90     }
     91 
     92   /*-----------------------------------------------------------*/
     93 
     94 };
     95