Top Description Fields Constructors Methods
org.antlr.analysis

public Class LL1Analyzer

extends Object
Class Inheritance
Imports
org.antlr.grammar.v3.ANTLRParser, org.antlr.misc.IntSet, .IntervalSet, org.antlr.tool.Grammar, .Rule, java.util.HashMap, .HashSet, .Map, .Set

Created by IntelliJ IDEA. User: parrt Date: Dec 31, 2007 Time: 1:31:16 PM To change this template use File | Settings | File Templates.

Field Summary

Modifier and TypeField and Description
public static final int
DETECT_PRED_EOR

0 if we hit end of rule and invoker should keep going (epsilon)

public static final int
DETECT_PRED_FOUND

1 if we found a nonautobacktracking pred

public static final int
DETECT_PRED_NOT_FOUND

2 if we didn't find such a pred

public Map<NFAState, LookaheadSet>
public Map<Rule, LookaheadSet>
public Grammar
protected Set<NFAState>
lookBusy

Used during LOOK to detect computation cycles

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
protected int
_detectConfoundingPredicates(NFAState s, Rule enclosingRule, boolean chaseFollowTransitions)

protected LookaheadSet
_FIRST(NFAState s, boolean chaseFollowTransitions)

protected SemanticContext
_getPredicates(NFAState s, NFAState altStartState)

public boolean
detectConfoundingPredicates(NFAState s)

Is there a non-syn-pred predicate visible from s that is not in the rule enclosing s?

public LookaheadSet
FIRST(NFAState s)

From an NFA state, s, find the set of all labels reachable from s.

public LookaheadSet
public SemanticContext
getPredicates(NFAState altStartState)

Return predicate expression found via epsilon edges from s.

public LookaheadSet
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

DETECT_PRED_EORback to summary
public static final int DETECT_PRED_EOR

0 if we hit end of rule and invoker should keep going (epsilon)

DETECT_PRED_FOUNDback to summary
public static final int DETECT_PRED_FOUND

1 if we found a nonautobacktracking pred

DETECT_PRED_NOT_FOUNDback to summary
public static final int DETECT_PRED_NOT_FOUND

2 if we didn't find such a pred

FIRSTCacheback to summary
public Map<NFAState, LookaheadSet> FIRSTCache
FOLLOWCacheback to summary
public Map<Rule, LookaheadSet> FOLLOWCache
grammarback to summary
public Grammar grammar
lookBusyback to summary
protected Set<NFAState> lookBusy

Used during LOOK to detect computation cycles

Constructor Detail

LL1Analyzerback to summary
public LL1Analyzer(Grammar grammar)

Method Detail

_detectConfoundingPredicatesback to summary
protected int _detectConfoundingPredicates(NFAState s, Rule enclosingRule, boolean chaseFollowTransitions)
_FIRSTback to summary
protected LookaheadSet _FIRST(NFAState s, boolean chaseFollowTransitions)
_getPredicatesback to summary
protected SemanticContext _getPredicates(NFAState s, NFAState altStartState)
detectConfoundingPredicatesback to summary
public boolean detectConfoundingPredicates(NFAState s)

Is there a non-syn-pred predicate visible from s that is not in the rule enclosing s? This accounts for most predicate situations and lets ANTLR do a simple LL(1)+pred computation.

Todo

what about gated vs regular preds?

FIRSTback to summary
public LookaheadSet FIRST(NFAState s)

From an NFA state, s, find the set of all labels reachable from s. Used to compute follow sets for error recovery. Never computes a FOLLOW operation. FIRST stops at end of rules, returning EOR, unless invoked from another rule. I.e., routine properly handles a : b A ; where b is nullable. We record with EOR_TOKEN_TYPE if we hit the end of a rule so we can know at runtime (when these sets are used) to start walking up the follow chain to compute the real, correct follow set (as opposed to the FOLLOW, which is a superset). This routine will only be used on parser and tree parser grammars.

FOLLOWback to summary
public LookaheadSet FOLLOW(Rule r)
getPredicatesback to summary
public SemanticContext getPredicates(NFAState altStartState)

Return predicate expression found via epsilon edges from s. Do not look into other rules for now. Do something simple. Include backtracking synpreds.

LOOKback to summary
public LookaheadSet LOOK(NFAState s)