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()).
production_part,
symbol_part,
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 |
_rhs_length
How much of the right hand side array we are presently using.
|
protected static int |
next_index
Static counter for assigning unique index numbers.
|
| Constructor and Description |
|---|
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)
Full constructor.
|
| Modifier and Type | Method and Description |
|---|---|
protected String |
action_translate(String act_string,
int act_pos,
Hashtable label_map,
Hashtable label_types)
Translate all the label names within an action string to appropriate code.
|
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.
|
boolean |
equals(Object other)
Generic equality comparison.
|
boolean |
equals(production other)
Equality comparison.
|
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.
|
protected String |
label_translate(String id_str,
int act_pos,
Hashtable label_map,
Hashtable label_types)
Determine the translation for one label id found within a code_string.
|
symbol_part |
lhs()
The left hand side non-terminal.
|
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_known()
Is the nullability of the production known or unknown?
|
boolean |
nullable()
Nullability of the production (can it derive the empty string).
|
int |
num_reductions()
Count of number of reductions using this production.
|
static int |
number()
Total number of productions.
|
protected void |
remove_embedded_actions()
Remove all embedded actions from a production by factoring them
out into individual action production using new non terminals.
|
int |
rhs_length()
How much of the right hand side array we are presently using.
|
production_part |
rhs(int indx)
Access to the collection of parts for the right hand 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 |
to_simple_string()
Convert to a simpler string.
|
String |
toString()
Convert to a string.
|
protected String |
translate_labels(production_part[] rhs,
int rhs_len,
String final_action,
String lhs_type)
Translate label names to appropriate code within all action strings.
|
protected static Hashtable _all
protected static int next_index
protected symbol_part _lhs
protected production_part[] _rhs
protected int _rhs_length
protected action_part _action
protected int _index
protected int _num_reductions
protected boolean _nullable_known
protected boolean _nullable
protected terminal_set _first_set
public production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l, String action_str) throws internal_error
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.internal_errorpublic production(non_terminal lhs_sym, production_part[] rhs_parts, int rhs_l) throws internal_error
internal_errorpublic static Enumeration all()
public static int number()
public symbol_part lhs()
public production_part rhs(int indx) throws internal_error
internal_errorpublic int rhs_length()
public action_part action()
public int index()
public int num_reductions()
public void note_reduction_use()
public boolean nullable_known()
public boolean nullable()
public terminal_set first_set()
protected static boolean is_id_start(char c)
c - the character in question.protected static boolean is_id_char(char c)
c - the character in question.protected String label_translate(String id_str, int act_pos, Hashtable label_map, Hashtable label_types)
id_str - the name of the id to be translated.act_pos - the original position of the action it appears in.label_map - a hash table mapping labels to positions in the RHS.type_map - a hash table mapping labels to declared symbol types.protected String action_translate(String act_string, int act_pos, Hashtable label_map, Hashtable label_types)
act_string - the string to be translatedact_pos - the position that the action originally held in the
production.label_map - a hash table mapping labels to positions in the RHS.type_map - a hash table mapping labels to declared symbol types.protected String translate_labels(production_part[] rhs, int rhs_len, String final_action, String lhs_type)
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.protected int merge_adjacent_actions(production_part[] rhs_parts, int len)
rhs_parts - array of RHS parts.len - amount of that array that is valid.protected action_part strip_trailing_action(production_part[] rhs_parts, int len)
rhs_parts - array of RHS parts.len - how many of those are valid.protected void remove_embedded_actions()
throws internal_error
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.internal_errorpublic boolean check_nullable()
throws internal_error
internal_errorpublic terminal_set check_first_set() throws internal_error
internal_errorpublic boolean equals(production other)
public boolean equals(Object other)
public String to_simple_string() throws internal_error
internal_errorCopyright © 2014. All Rights Reserved.