antlr
Class Lookahead

java.lang.Object
  |
  +--antlr.Lookahead
All Implemented Interfaces:
Cloneable

public class Lookahead
extends Object
implements Cloneable

This object holds all information needed to represent the lookahead for any particular lookahead computation for a single lookahead depth. Final lookahead information is a simple bit set, but intermediate stages need computation cycle and FOLLOW information.

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 + 1
 
Also, 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 {} with depth = 4, which indicates that at 2 (5-4+1) tokens ahead, end of rule was reached. Therefore, the token at 4=5-(5-4) past rule ref b must be included in the set == F. The situation is complicated by the fact that a computation may hit the end of a rule at many different depths. For example,
 		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.

See Also:
combineWith(Lookahead)

Constructor Summary
Lookahead()
           
Lookahead(BitSet p)
          create a new lookahead set with the LL(1) set to the parameter
Lookahead(String c)
          create an empty lookahead set, but with cycle
 
Method Summary
 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?
 boolean nil()
           
static Lookahead of(int el)
           
 void resetEpsilon()
           
 void setEpsilon()
           
 String toString()
           
 String toString(String separator, CharFormatter formatter)
           
 String toString(String separator, CharFormatter formatter, Grammar g)
           
 String toString(String separator, Vector vocab)
           
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Lookahead

public Lookahead()

Lookahead

public Lookahead(BitSet p)
create a new lookahead set with the LL(1) set to the parameter


Lookahead

public Lookahead(String c)
create an empty lookahead set, but with cycle

Method Detail

clone

public Object clone()
Make a deep copy of everything in this object

Overrides:
clone in class Object

combineWith

public void combineWith(Lookahead q)

containsEpsilon

public boolean containsEpsilon()

intersection

public Lookahead intersection(Lookahead q)
What is the intersection of two lookahead depths? Only the Epsilon "bit" and bitset are considered.


nil

public boolean nil()

of

public static Lookahead of(int el)

resetEpsilon

public void resetEpsilon()

setEpsilon

public void setEpsilon()

toString

public String toString()
Overrides:
toString in class Object

toString

public String toString(String separator,
                       CharFormatter formatter)

toString

public String toString(String separator,
                       CharFormatter formatter,
                       Grammar g)

toString

public String toString(String separator,
                       Vector vocab)


Copyright 1999-2003 Oliver Zeigermann. All Rights Reserved.