This class represents an LALR item. Each LALR item consists of
a production, a "dot" at a position within that production, and
a set of lookahead symbols (terminal). (The first two of these parts
are provide by the super class). An item is designed to represent a
configuration that the parser may be in. For example, an item of the
form:
[A ::= B * C d E , {a,b,c}]
indicates that the parser is in the middle of parsing the production
A ::= B C d E
that B has already been parsed, and that we will expect to see a lookahead
of either a, b, or c once the complete RHS of this production has been
found.
Items may initially be missing some items from their lookahead sets.
Links are maintained from each item to the set of items that would need
to be updated if symbols are added to its lookahead set. During
"lookahead propagation", we add symbols to various lookahead sets and
propagate these changes across these dependency links as needed.
add_propagate
public void add_propagate(lalr_item prop_to)
Add a new item to the set of items we propagate to.
calc_lookahead
public terminal_set calc_lookahead(terminal_set lookahead_after)
throws internal_error
Calculate lookahead representing symbols that could appear after the
symbol that the dot is currently in front of. Note: this routine must
not be invoked before first sets and nullability has been calculated
for all non terminals.
equals
public boolean equals(Object other)
Generic equality comparison.
- equals in interface lr_item_core
equals
public boolean equals(lalr_item other)
Equality comparison -- here we only require the cores to be equal since
we need to do sets of items based only on core equality (ignoring
lookahead sets).
hashCode
public int hashCode()
Return a hash code -- here we only hash the core since we only test core
matching in LALR items.
- hashCode in interface lr_item_core
lookahead
public terminal_set lookahead()
The lookahead symbols of the item.
lookahead_visible
public boolean lookahead_visible()
throws internal_error
Determine if everything from the symbol one beyond the dot all the
way to the end of the right hand side is nullable. This would indicate
that the lookahead of this item must be included in the lookaheads of
all items produced as a closure of this item. Note: this routine should
not be invoked until after first sets and nullability have been
calculated for all non terminals.
propagate_items
public Stack propagate_items()
Links to items that the lookahead needs to be propagated to
propagate_lookaheads
public void propagate_lookaheads(terminal_set incoming)
throws internal_error
Propagate incoming lookaheads through this item to others need to
be changed.
shift
public lalr_item shift()
throws internal_error
Produce the new lalr_item that results from shifting the dot one position
to the right.
toString
public String toString()
Convert to string.
- toString in interface lr_item_core