Package org.antlr.v4.runtime.atn
Class ATNSerializer
java.lang.Object
org.antlr.v4.runtime.atn.ATNSerializer
This class represents a target neutral serializer for ATNs. An ATN is converted to a list of integers
that can be converted back to and ATN. We compute the list of integers and then generate an array
into the target language for a particular lexer or parser. Java is a special case where we must
generate strings instead of arrays, but that is handled outside of this class.
See
ATNDeserializer.encodeIntsWith16BitWords(IntegerList)
and
SerializedJavaATN
.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final IntegerList
private final IntegerList
private final IntegerList
private final Map
<IntervalSet, Boolean> Note that we use a LinkedHashMap as a set to mainintain insertion order while deduplicating entries with the same key. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
private int
addEdges()
private void
addEdges
(int nedges, Map<IntervalSet, Integer> setIndices) private void
private void
private void
private void
private void
private void
private Map
<IntervalSet, Integer> addSets()
static IntegerList
getSerialized
(ATN atn) Serialize state descriptors, edge descriptors, and decision→state map into list of ints.private static void
serializeSets
(IntegerList data, Collection<IntervalSet> sets)
-
Field Details
-
atn
-
data
-
sets
Note that we use a LinkedHashMap as a set to mainintain insertion order while deduplicating entries with the same key. -
nonGreedyStates
-
precedenceStates
-
-
Constructor Details
-
ATNSerializer
-
-
Method Details
-
serialize
Serialize state descriptors, edge descriptors, and decision→state map into list of ints. Likely out of date, but keeping as it could be helpful: SERIALIZED_VERSION UUID (2 longs) grammar-type, (ANTLRParser.LEXER, ...) max token type, num states, state-0-type ruleIndex, state-1-type ruleIndex, ... state-i-type ruleIndex optional-arg ... num rules, rule-1-start-state rule-1-args, rule-2-start-state rule-2-args, ... (args are token type,actionIndex in lexer else 0,0) num modes, mode-0-start-state, mode-1-start-state, ... (parser has 0 modes) num unicode-bmp-sets bmp-set-0-interval-count intervals, bmp-set-1-interval-count intervals, ... num unicode-smp-sets smp-set-0-interval-count intervals, smp-set-1-interval-count intervals, ... num total edges, src, trg, edge-type, edge arg1, optional edge arg2 (present always), ... num decisions, decision-0-start-state, decision-1-start-state, ... Convenient to pack into unsigned shorts to make as Java string. -
addPreamble
private void addPreamble() -
addLexerActions
private void addLexerActions() -
addDecisionStartStates
private void addDecisionStartStates() -
addEdges
-
addSets
-
addModeStartStates
private void addModeStartStates() -
addRuleStatesAndLexerTokenTypes
private void addRuleStatesAndLexerTokenTypes() -
addPrecedenceStates
private void addPrecedenceStates() -
addNonGreedyStates
private void addNonGreedyStates() -
addEdges
private int addEdges() -
serializeSets
-
getSerialized
-