Class DFA


  • public class DFA
    extends Object
    A DFA implemented as a set of transition tables. Any state that has a semantic predicate edge is special; those states are generated with if-then-else structures in a specialStateTransition() which is generated by cyclicDFA template. There are at most 32767 states (16-bit signed short). Could get away with byte sometimes but would have to generate different types and the simulation code too. For a point of reference, the Java lexer's Tokens rule DFA has 326 states roughly.
    • Field Detail

      • eot

        protected short[] eot
      • eof

        protected short[] eof
      • min

        protected char[] min
      • max

        protected char[] max
      • accept

        protected short[] accept
      • special

        protected short[] special
      • transition

        protected short[][] transition
      • decisionNumber

        protected int decisionNumber
      • recognizer

        protected BaseRecognizer recognizer
        Which recognizer encloses this DFA? Needed to check backtracking
    • Constructor Detail

      • DFA

        public DFA()
    • Method Detail

      • predict

        public int predict​(IntStream input)
                    throws RecognitionException
        From the input stream, predict what alternative will succeed using this DFA (representing the covering regular approximation to the underlying CFL). Return an alternative number 1..n. Throw an exception upon error.
        Throws:
        RecognitionException
      • getDescription

        public String getDescription()
      • unpackEncodedString

        public static short[] unpackEncodedString​(String encodedString)
        Given a String that has a run-length-encoding of some unsigned shorts like "\1\2\3\9", convert to short[] {2,9,9,9}. We do this to avoid static short[] which generates so much init code that the class won't compile. :(
      • unpackEncodedStringToUnsignedChars

        public static char[] unpackEncodedStringToUnsignedChars​(String encodedString)
        Hideous duplication of code, but I need different typed arrays out :(