public class Lookahead
extends java.lang.Object
implements java.lang.Cloneable
Concerning the cycle variable. If lookahead is computed for a RuleEnd node, then computation is part of a FOLLOW cycle for this rule. If lookahead is computed for a RuleBlock node, the computation is part of a FIRST cycle to this rule.
Concerning the epsilonDepth variable. This is not the depth relative to the rule reference that epsilon was encountered. That value is
initial_k - epsilonDepth + 1Also, lookahead depths past rule ref for local follow are:
initial_k - (initial_k - epsilonDepth)Used for rule references. If we try to compute look(k, ruleref) and there are fewer than k lookahead terminals before the end of the the rule, epsilon will be returned (don't want to pass the end of the rule). We must track when the the lookahead got stuck. For example,
a : b A B E F G; b : C ;LOOK(5, ref-to(b)) is {
a : b A B C ; b : E F // epsilon depth of 1 relative to initial k=3 | G // epsilon depth of 2 ;Here, LOOK(3,ref-to(b)) returns epsilon, but the depths are {1, 2}; i.e., 3-(3-1) and 3-(3-2). Those are the lookahead depths past the rule ref needed for the local follow.
This is null unless an epsilon is created.
combineWith(Lookahead)
Modifier and Type | Field and Description |
---|---|
(package private) java.lang.String |
cycle
is this computation part of a computation cycle?
|
(package private) BitSet |
epsilonDepth
What k values were being computed when end of rule hit?
|
(package private) BitSet |
fset
actual bitset of the lookahead
|
(package private) boolean |
hasEpsilon
Does this lookahead depth include Epsilon token type? This
is used to avoid having a bit in the set for Epsilon as it
conflicts with parsing binary files.
|
Constructor and Description |
---|
Lookahead() |
Lookahead(BitSet p)
create a new lookahead set with the LL(1) set to the parameter
|
Lookahead(java.lang.String c)
create an empty lookahead set, but with cycle
|
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
clone()
Make a deep copy of everything in this object
|
void |
combineWith(Lookahead q) |
boolean |
containsEpsilon() |
Lookahead |
intersection(Lookahead q)
What is the intersection of two lookahead depths?
Only the Epsilon "bit" and bitset are considered.
|
boolean |
nil() |
static Lookahead |
of(int el) |
void |
resetEpsilon() |
void |
setEpsilon() |
java.lang.String |
toString() |
java.lang.String |
toString(java.lang.String separator,
CharFormatter formatter) |
java.lang.String |
toString(java.lang.String separator,
CharFormatter formatter,
Grammar g) |
java.lang.String |
toString(java.lang.String separator,
Vector vocab) |
BitSet fset
java.lang.String cycle
BitSet epsilonDepth
boolean hasEpsilon
public Lookahead()
public Lookahead(BitSet p)
public Lookahead(java.lang.String c)
public java.lang.Object clone()
clone
in class java.lang.Object
public void combineWith(Lookahead q)
public boolean containsEpsilon()
public Lookahead intersection(Lookahead q)
public boolean nil()
public static Lookahead of(int el)
public void resetEpsilon()
public void setEpsilon()
public java.lang.String toString()
toString
in class java.lang.Object
public java.lang.String toString(java.lang.String separator, CharFormatter formatter)
public java.lang.String toString(java.lang.String separator, CharFormatter formatter, Grammar g)
public java.lang.String toString(java.lang.String separator, Vector vocab)