| |
| package java_cup; |
| |
| /** This class represents a reduce action within the parse table. |
| * The action simply stores the production that it reduces with and |
| * responds to queries about its type. |
| * |
| * @version last updated: 11/25/95 |
| * @author Scott Hudson |
| */ |
| public class reduce_action extends parse_action { |
| |
| /*-----------------------------------------------------------*/ |
| /*--- Constructor(s) ----------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Simple constructor. |
| * @param prod the production this action reduces with. |
| */ |
| public reduce_action(production prod ) throws internal_error |
| { |
| /* sanity check */ |
| if (prod == null) |
| throw new internal_error( |
| "Attempt to create a reduce_action with a null production"); |
| |
| _reduce_with = prod; |
| } |
| |
| /*-----------------------------------------------------------*/ |
| /*--- (Access to) Instance Variables ------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** The production we reduce with. */ |
| protected production _reduce_with; |
| |
| /** The production we reduce with. */ |
| public production reduce_with() {return _reduce_with;} |
| |
| /*-----------------------------------------------------------*/ |
| /*--- General Methods ---------------------------------------*/ |
| /*-----------------------------------------------------------*/ |
| |
| /** Quick access to type of action. */ |
| public int kind() {return REDUCE;} |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Equality test. */ |
| public boolean equals(reduce_action other) |
| { |
| return other != null && other.reduce_with() == reduce_with(); |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Generic equality test. */ |
| public boolean equals(Object other) |
| { |
| if (other instanceof reduce_action) |
| return equals((reduce_action)other); |
| else |
| return false; |
| } |
| |
| /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/ |
| |
| /** Compute a hash code. */ |
| public int hashCode() |
| { |
| /* use the hash code of the production we are reducing with */ |
| return reduce_with().hashCode(); |
| } |
| |
| |
| /** Convert to string. */ |
| public String toString() |
| { |
| return "REDUCE(" + reduce_with().index() + ")"; |
| } |
| |
| /*-----------------------------------------------------------*/ |
| |
| }; |