I addition to construction and manipulation operations, productions provide methods for factoring out actions (see remove_embedded_actions()), for computing the nullability of the production (i.e., can it derive the empty string, see check_nullable()), and operations for computing its first set (i.e., the set of terminals that could appear at the beginning of some string derived from the production, see check_first_set()).
java_cup.production_part , java_cup.symbol_part , java_cup.action_part
| Modifier and Type | Field and Description |
|---|---|
| protected action_part | _action
An action_part containing code for the action to be performed when we reduce with this production. |
| protected static Hashtable | _all
Table of all productions. |
| protected terminal_set | _first_set
First set of the production. |
| protected int | _index
Index number of the production. |
| protected symbol_part | _lhs
The left hand side non-terminal. |
| protected boolean | _nullable
Nullability of the production (can it derive the empty string). |
| protected boolean | _nullable_known
Is the nullability of the production known or unknown? |
| protected int | _num_reductions
Count of number of reductions using this production. |
| protected production_part[] | _rhs
A collection of parts for the right hand side. |
| protected int | |
| protected int | _rhs_length
How much of the right hand side array we are presently using. |
| protected int | _rhs_prec
The precedence of the rule |
| protected static int | next_index
Static counter for assigning unique index numbers. |
| Access | Constructor and Description |
|---|---|
| public | production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str)
Full constructor. |
| public | production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l)
Constructor with no action string. |
| public | production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str, int prec_num, int prec_side)
|
| public | production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, int prec_num, int prec_side)
|
| Modifier and Type | Method and Description |
|---|---|
| public action_part | action()
An action_part containing code for the action to be performed when we reduce with this production. |
| public static Enumeration | |
| public terminal_set | |
| public boolean | |
| protected String | declare_labels(production_part[]
array of RHS parts. rhs, int how much of rhs to consider valid. rhs_len, String the final action string of the production. final_action)Declare label names as valid variables within the action string |
| public boolean | |
| public boolean | equals(Object
the reference object with which to compare. other)Overrides java. |
| public static production | |
| public terminal_set | |
| public int | |
| public int | |
| protected static boolean | |
| protected static boolean | is_id_start(char
the character in question. c)Determine if a given character can be a label id starter. |
| public symbol_part | |
| protected String | make_declaration(String
the label name labelname, String the stack type of label? stack_type, int offset)Return label declaration code |
| protected int | Returns: remaining valid length.array of RHS parts. rhs_parts, int amount of that array that is valid. len)Helper routine to merge adjacent actions in a set of RHS parts |
| public void | |
| public boolean | |
| public boolean | |
| public int | |
| public static int | |
| public int | |
| public int | |
| protected void | remove_embedded_actions()
Remove all embedded actions from a production by factoring them out into individual action production using new non terminals. |
| public production_part | |
| public int | |
| pack-priv boolean | |
| public void | |
| public void | |
| protected action_part | Returns: the removed action part.array of RHS parts. rhs_parts, int how many of those are valid. len)Helper routine to strip a trailing action off rhs and return it |
| public String | |
| public String |
| _action | back to summary |
|---|---|
| protected action_part _action An action_part containing code for the action to be performed when we reduce with this production. | |
| _all | back to summary |
|---|---|
| protected static Hashtable<K, V> _all Table of all productions. Elements are stored using their index as the key. | |
| _first_set | back to summary |
|---|---|
| protected terminal_set _first_set First set of the production. This is the set of terminals that could appear at the front of some string derived from this production. | |
| _index | back to summary |
|---|---|
| protected int _index Index number of the production. | |
| _lhs | back to summary |
|---|---|
| protected symbol_part _lhs The left hand side non-terminal. | |
| _nullable | back to summary |
|---|---|
| protected boolean _nullable Nullability of the production (can it derive the empty string). | |
| _nullable_known | back to summary |
|---|---|
| protected boolean _nullable_known Is the nullability of the production known or unknown? | |
| _num_reductions | back to summary |
|---|---|
| protected int _num_reductions Count of number of reductions using this production. | |
| _rhs | back to summary |
|---|---|
| protected production_part[] _rhs A collection of parts for the right hand side. | |
| _rhs_assoc | back to summary |
|---|---|
| protected int _rhs_assoc | |
| _rhs_length | back to summary |
|---|---|
| protected int _rhs_length How much of the right hand side array we are presently using. | |
| _rhs_prec | back to summary |
|---|---|
| protected int _rhs_prec The precedence of the rule | |
| next_index | back to summary |
|---|---|
| protected static int next_index Static counter for assigning unique index numbers. | |
| production | back to summary |
|---|---|
| public production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str) throws internal_error Full constructor. This constructor accepts a LHS non terminal, an array of RHS parts (including terminals, non terminals, and actions), and a string for a final reduce action. It does several manipulations in the process of creating a production object. After some validity checking it translates labels that appear in actions into code for accessing objects on the runtime parse stack. It them merges adjacent actions if they appear and moves any trailing action into the final reduce actions string. Next it removes any embedded actions by factoring them out with new action productions. Finally it assigns a unique index to the production. Factoring out of actions is accomplished by creating new "hidden" non terminals. For example if the production was originally:
A ::= B {action} C D
then it is factored into two productions:
A ::= B X C D
X ::= {action}
(where X is a unique new non terminal). This has the effect of placing
all actions at the end where they can be handled as part of a reduce by
the parser.
| |
| production | back to summary |
|---|---|
| public production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l) throws internal_error Constructor with no action string. | |
| production | back to summary |
|---|---|
| public production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str, int prec_num, int prec_side) throws internal_error | |
| production | back to summary |
|---|---|
| public production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, int prec_num, int prec_side) throws internal_error | |
| action | back to summary |
|---|---|
| public action_part action() An action_part containing code for the action to be performed when we reduce with this production. | |
| all | back to summary |
|---|---|
| public static Enumeration Access to all productions. | |
| check_first_set | back to summary |
|---|---|
| public terminal_set check_first_set() throws internal_error Update (and return) the first set based on current NT firsts. This assumes that nullability has already been computed for all non terminals and productions. | |
| check_nullable | back to summary |
|---|---|
| public boolean check_nullable() throws internal_error Check to see if the production (now) appears to be nullable. A production is nullable if its RHS could derive the empty string. This results when the RHS is empty or contains only non terminals which themselves are nullable. | |
| declare_labels | back to summary |
|---|---|
| protected String declare_labels(production_part[] rhs, int rhs_len, String final_action) Declare label names as valid variables within the action string
| |
| equals | back to summary |
|---|---|
| public boolean equals(production other) Equality comparison. | |
| equals | back to summary |
|---|---|
| public boolean equals(Object other) Overrides java. Generic equality comparison.
| |
| find | back to summary |
|---|---|
| public static production find(int indx) Lookup a production by index. | |
| first_set | back to summary |
|---|---|
| public terminal_set first_set() First set of the production. This is the set of terminals that could appear at the front of some string derived from this production. | |
| hashCode | back to summary |
|---|---|
| public int hashCode() Overrides java. Produce a hash code.
| |
| index | back to summary |
|---|---|
| public int index() Index number of the production. | |
| is_id_char | back to summary |
|---|---|
| protected static boolean is_id_char(char c) Determine if a character can be in a label id.
| |
| is_id_start | back to summary |
|---|---|
| protected static boolean is_id_start(char c) Determine if a given character can be a label id starter.
| |
| lhs | back to summary |
|---|---|
| public symbol_part lhs() The left hand side non-terminal. | |
| make_declaration | back to summary |
|---|---|
| protected String make_declaration(String labelname, String stack_type, int offset) Return label declaration code | |
| merge_adjacent_actions | back to summary |
|---|---|
| protected int merge_adjacent_actions(production_part[] rhs_parts, int len) Helper routine to merge adjacent actions in a set of RHS parts
| |
| note_reduction_use | back to summary |
|---|---|
| public void note_reduction_use() Increment the count of reductions with this non-terminal | |
| nullable | back to summary |
|---|---|
| public boolean nullable() Nullability of the production (can it derive the empty string). | |
| nullable_known | back to summary |
|---|---|
| public boolean nullable_known() Is the nullability of the production known or unknown? | |
| num_reductions | back to summary |
|---|---|
| public int num_reductions() Count of number of reductions using this production. | |
| number | back to summary |
|---|---|
| public static int number() Total number of productions. | |
| precedence_num | back to summary |
|---|---|
| public int precedence_num() Access to the precedence of the rule | |
| precedence_side | back to summary |
|---|---|
| public int precedence_side() | |
| remove_embedded_actions | back to summary |
|---|---|
| protected void remove_embedded_actions() throws internal_error Remove all embedded actions from a production by factoring them out into individual action production using new non terminals. if the original production was:
A ::= B {action1} C {action2} D
then it will be factored into:
A ::= B NT$1 C NT$2 D
NT$1 ::= {action1}
NT$2 ::= {action2}
where NT$1 and NT$2 are new system created non terminals.
| |
| rhs | back to summary |
|---|---|
| public production_part rhs(int indx) throws internal_error Access to the collection of parts for the right hand side. | |
| rhs_length | back to summary |
|---|---|
| public int rhs_length() How much of the right hand side array we are presently using. | |
| set_nullable | back to summary |
|---|---|
| pack-priv boolean set_nullable(boolean v) set (and return) nullability | |
| set_precedence_num | back to summary |
|---|---|
| public void set_precedence_num(int prec_num) Setting the precedence of a rule | |
| set_precedence_side | back to summary |
|---|---|
| public void set_precedence_side(int prec_side) | |
| strip_trailing_action | back to summary |
|---|---|
| protected action_part strip_trailing_action(production_part[] rhs_parts, int len) Helper routine to strip a trailing action off rhs and return it
| |
| to_simple_string | back to summary |
|---|---|
| public String to_simple_string() throws internal_error Convert to a simpler string. | |
| toString | back to summary |
|---|---|
| public String toString() Overrides java. Convert to a string.
| |