java_cup
public class production extends Object
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()).
Version: last updated: 7/3/96
See Also: production_part symbol_part action_part
Field Summary | |
---|---|
protected static int | next_index Static counter for assigning unique index numbers. |
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 | _rhs_assoc |
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 |
Constructor Summary | |
---|---|
production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str) Full constructor. | |
production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l) Constructor with no action string. | |
production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str, int prec_num, int prec_side) | |
production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, int prec_num, int prec_side) |
Method Summary | |
---|---|
action_part | action() An action_part containing code for the action to be performed when we
reduce with this production. |
static Enumeration | all() Access to all productions. |
terminal_set | check_first_set() Update (and return) the first set based on current NT firsts.
|
boolean | check_nullable() Check to see if the production (now) appears to be nullable.
|
protected String | declare_labels(production_part[] rhs, int rhs_len, String final_action) Declare label names as valid variables within the action string |
boolean | equals(production other) Equality comparison. |
boolean | equals(Object other) Generic equality comparison. |
static production | find(int indx) Lookup a production by index. |
terminal_set | first_set() First set of the production. |
int | hashCode() Produce a hash code. |
int | index() Index number of the production. |
protected static boolean | is_id_char(char c) Determine if a character can be in a label id. |
protected static boolean | is_id_start(char c) Determine if a given character can be a label id starter. |
symbol_part | lhs() The left hand side non-terminal. |
protected String | make_declaration(String labelname, String stack_type, int offset) Return label declaration code |
protected int | merge_adjacent_actions(production_part[] rhs_parts, int len) Helper routine to merge adjacent actions in a set of RHS parts |
void | note_reduction_use() Increment the count of reductions with this non-terminal |
boolean | nullable() Nullability of the production (can it derive the empty string). |
boolean | nullable_known() Is the nullability of the production known or unknown? |
static int | number() Total number of productions. |
int | num_reductions() Count of number of reductions using this production. |
int | precedence_num() Access to the precedence of the rule |
int | precedence_side() |
protected void | remove_embedded_actions() 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} Dthen 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. |
production_part | rhs(int indx) Access to the collection of parts for the right hand side. |
int | rhs_length() How much of the right hand side array we are presently using. |
void | set_precedence_num(int prec_num) Setting the precedence of a rule |
void | set_precedence_side(int prec_side) |
protected action_part | strip_trailing_action(production_part[] rhs_parts, int len) Helper routine to strip a trailing action off rhs and return it |
String | toString() Convert to a string. |
String | to_simple_string() Convert to a simpler string. |
Factoring out of actions is accomplished by creating new "hidden" non terminals. For example if the production was originally:
A ::= B {action} C Dthen 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.
Parameters: rhs array of RHS parts. rhs_len how much of rhs to consider valid. final_action the final action string of the production. lhs_type the object type associated with the LHS symbol.
Parameters: c the character in question.
Parameters: c the character in question.
Parameters: labelname the label name stack_type the stack type of label?
Parameters: rhs_parts array of RHS parts. len amount of that array that is valid.
Returns: remaining valid length.
A ::= B {action1} C {action2} Dthen 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.
Parameters: rhs_parts array of RHS parts. len how many of those are valid.
Returns: the removed action part.