java_cup
public class lalr_item_set extends Object
This class provides fairly conventional set oriented operations (union, sub/super-set tests, etc.), as well as an LALR "closure" operation (see compute_closure()).
Version: last updated: 3/6/96
See Also: lalr_item lalr_state
Field Summary | |
---|---|
protected Integer | hashcode_cache Cached hashcode for this set. |
protected Hashtable | _all A hash table to implement the set. |
Constructor Summary | |
---|---|
lalr_item_set() Constructor for an empty set. | |
lalr_item_set(lalr_item_set other) Constructor for cloning from another set. |
Method Summary | |
---|---|
lalr_item | add(lalr_item itm) Add a singleton item, merging lookahead sets if the item is already
part of the set. returns the element of the set that was added or
merged into. |
void | add(lalr_item_set other) Add a complete set, merging lookaheads where items are already in
the set |
Enumeration | all() Access to all elements of the set. |
void | compute_closure() Compute the closure of the set using the LALR closure rules. |
boolean | contains(lalr_item itm) Does the set contain a particular item? |
boolean | equals(lalr_item_set other) Equality comparison. |
boolean | equals(Object other) Generic equality comparison. |
lalr_item | find(lalr_item itm) Return the item in the set matching a particular item (or null if not
found) |
lalr_item | get_one() Remove and return one item from the set (done in hash order). |
int | hashCode() Return hash code. |
boolean | is_subset_of(lalr_item_set other) Is this set an (improper) subset of another? |
boolean | is_superset_of(lalr_item_set other) Is this set an (improper) superset of another? |
protected void | not_null(Object obj) Helper function for null test. |
void | remove(lalr_item itm) Remove a single item if it is in the set. |
void | remove(lalr_item_set other) Remove (set subtract) a complete set. |
int | size() Size of the set |
String | toString() Convert to string. |
Parameters: other indicates set we should copy from.
Parameters: itm the item being added.
Parameters: other the set to be added.
[L ::= a *N alpha, l](where N is a a non terminal and alpha is a string of symbols) make sure there are also items of the form:
[N ::= *beta, first(alpha l)]corresponding to each production of N. Items with identical cores but differing lookahead sets are merged by creating a new item with the same core and the union of the lookahead sets (the LA in LALR stands for "lookahead merged" and this is where the merger is). This routine assumes that nullability and first sets have been computed for all productions before it is called.
Parameters: itm the item in question.
Parameters: itm the item we are looking for.
Parameters: other the other set in question.
Parameters: other the other set in question.
Parameters: obj the object we are testing.
Parameters: itm the item to remove.
Parameters: other the set to remove.