Top Fields Constructors Methods
org.antlr.v4.runtime.atn

public abstract Class ATNSimulator

extends Object
Class Inheritance
Known Direct Subclasses
org.antlr.v4.runtime.atn.LexerATNSimulator, org.antlr.v4.runtime.atn.ParserATNSimulator
Imports
org.antlr.v4.runtime.dfa.DFAState, org.antlr.v4.runtime.misc.IntervalSet, java.util.IdentityHashMap, .List

Field Summary

Modifier and TypeField and Description
public final ATN
public static final DFAState
ERROR

Must distinguish between missing edge and edge we know leads nowhere

protected final PredictionContextCache
sharedContextCache

The context cache maps all PredictionContext objects that are equals() to a single cached copy.

Constructor Summary

AccessConstructor and Description
public
ATNSimulator(ATN atn, PredictionContextCache sharedContextCache)

Method Summary

Modifier and TypeMethod and Description
public void
clearDFA()

Clear the DFA cache used by the current instance.

public PredictionContext
public PredictionContextCache
public abstract void
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

atnback to summary
public final ATN atn
ERRORback to summary
public static final DFAState ERROR

Must distinguish between missing edge and edge we know leads nowhere

sharedContextCacheback to summary
protected final PredictionContextCache sharedContextCache

The context cache maps all PredictionContext objects that are equals() to a single cached copy. This cache is shared across all contexts in all ATNConfigs in all DFA states. We rebuild each ATNConfigSet to use only cached nodes/graphs in addDFAState(). We don't want to fill this during closure() since there are lots of contexts that pop up but are not used ever again. It also greatly slows down closure().

This cache makes a huge difference in memory and a little bit in speed. For the Java grammar on java.*, it dropped the memory requirements at the end from 25M to 16M. We don't store any of the full context graphs in the DFA because they are limited to local context only, but apparently there's a lot of repetition there as well. We optimize the config contexts before storing the config set in the DFA states by literally rebuilding them with cached subgraphs only.

I tried a cache for use during closure operations, that was whacked after each adaptivePredict(). It cost a little bit more time I think and doesn't save on the overall footprint so it's not worth the complexity.

Constructor Detail

ATNSimulatorback to summary
public ATNSimulator(ATN atn, PredictionContextCache sharedContextCache)

Method Detail

clearDFAback to summary
public void clearDFA()

Clear the DFA cache used by the current instance. Since the DFA cache may be shared by multiple ATN simulators, this method may affect the performance (but not accuracy) of other parsers which are being used concurrently.

Exceptions
UnsupportedOperationException:
if the current instance does not support clearing the DFA.
Since
4.3
getCachedContextback to summary
public PredictionContext getCachedContext(PredictionContext context)
getSharedContextCacheback to summary
public PredictionContextCache getSharedContextCache()
resetback to summary
public abstract void reset()