| package java_cup; |
| |
| /** This class represents one part (either a symbol or an action) of a |
| * production. In this base class it contains only an optional label |
| * string that the user can use to refer to the part within actions.<p> |
| * |
| * This is an abstract class. |
| * |
| * @see java_cup.production |
| * @version last updated: 11/25/95 |
| * @author Scott Hudson |
| */ |
| public abstract class production_part { |
| |
| /*-----------------------------------------------------------*/ |
| /*--- Constructor(s) ----------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Simple constructor. */ |
| public production_part(String lab) |
| { |
| _label = lab; |
| } |
| |
| /*-----------------------------------------------------------*/ |
| /*--- (Access to) Instance Variables ------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Optional label for referring to the part within an action (null for |
| * no label). |
| */ |
| protected String _label; |
| |
| /** Optional label for referring to the part within an action (null for |
| * no label). |
| */ |
| public String label() {return _label;} |
| |
| /*-----------------------------------------------------------*/ |
| /*--- General Methods ---------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Indicate if this is an action (rather than a symbol). Here in the |
| * base class, we don't this know yet, so its an abstract method. |
| */ |
| public abstract boolean is_action(); |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Equality comparison. */ |
| public boolean equals(production_part other) |
| { |
| if (other == null) return false; |
| |
| /* compare the labels */ |
| if (label() != null) |
| return label().equals(other.label()); |
| else |
| return other.label() == null; |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Generic equality comparison. */ |
| public boolean equals(Object other) |
| { |
| if (!(other instanceof production_part)) |
| return false; |
| else |
| return equals((production_part)other); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Produce a hash code. */ |
| public int hashCode() |
| { |
| return label()==null ? 0 : label().hashCode(); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Convert to a string. */ |
| public String toString() |
| { |
| if (label() != null) |
| return label() + ":"; |
| else |
| return " "; |
| } |
| |
| /*-----------------------------------------------------------*/ |
| |
| }; |