Class ATNSerializer


  • public class ATNSerializer
    extends java.lang.Object
    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 Detail

      • atn

        public ATN atn
      • sets

        private final java.util.Map<IntervalSet,​java.lang.Boolean> sets
        Note that we use a LinkedHashMap as a set to mainintain insertion order while deduplicating entries with the same key.
      • nonGreedyStates

        private final IntegerList nonGreedyStates
      • precedenceStates

        private final IntegerList precedenceStates
    • Constructor Detail

      • ATNSerializer

        public ATNSerializer​(ATN atn)
    • Method Detail

      • serialize

        public IntegerList 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

        private void addEdges​(int nedges,
                              java.util.Map<IntervalSet,​java.lang.Integer> setIndices)
      • addSets

        private java.util.Map<IntervalSet,​java.lang.Integer> addSets()
      • addModeStartStates

        private void addModeStartStates()
      • addRuleStatesAndLexerTokenTypes

        private void addRuleStatesAndLexerTokenTypes()
      • addPrecedenceStates

        private void addPrecedenceStates()
      • addNonGreedyStates

        private void addNonGreedyStates()
      • addEdges

        private int addEdges()
      • serializeSets

        private static void serializeSets​(IntegerList data,
                                          java.util.Collection<IntervalSet> sets)
      • getSerialized

        public static IntegerList getSerialized​(ATN atn)