public static DFAState <Token, Function> AddState(DFAState <Token, Function> state)
        {
            if (state.Id >= States.Length)
            {
                int newLength;

                if (state.Id < 2 * States.Length)
                {
                    newLength = 2 * States.Length;
                }
                else
                {
                    newLength = state.Id + 1;
                }

                DFAState <Token, Function>[] oldStates = States;

                States = new DFAState <Token, Function> [newLength];

                oldStates.CopyTo(States, 0);
            }

            if (States[state.Id] != null)
            {
                throw new DFAException("state.Id must be equal to States index!", 0, state.Id);
            }

            States[state.Id] = state;

            return(state);
        }
Esempio n. 2
0
        private static void InitNumericStates()
        {
            DFAState <int, LexicalFunction> s5 = AddState(new LexicalState(5, false));                               //Numeric begin state;
            DFAState <int, LexicalFunction> s6 = AddState(new LexicalState(6, false));                               //Number dot state;
            DFAState <int, LexicalFunction> s7 = AddState(new LexicalState(7, true, LexicalFunction.OutputNumeric)); //Number quit state;

            //s0 [0-9] s5
            s0.AddNextState('0', '9', s5.Id);
            s0.AddNextState('0', '9', s5.Id);

            //s5 [0-9] s5
            s5.AddNextState('0', '9', s5.Id);
            s5.AddNextState('0', '9', s5.Id);

            //s5 [\.] s6
            s5.AddNextState('.', s6.Id);

            //s5 else s7 (integer)
            s5.AddElseState(s7.Id);

            //s6 [0-9] s6
            s6.AddNextState('0', '9', s6.Id);
            s6.AddNextState('0', '9', s6.Id);

            //s6 else s7 (float)
            s6.AddElseState(s7.Id);
        }
Esempio n. 3
0
        private static void InitChineseStates()
        {
            DFAState <int, LexicalFunction> s8 = AddState(new LexicalState(8, false));                               //Numeric begin state;
            DFAState <int, LexicalFunction> s9 = AddState(new LexicalState(9, true, LexicalFunction.OutputChinese)); //Number quit state;

            //s0 [4e00-9fa5] s5
            s0.AddNextState(0x4e00, 0x9fa5, s8.Id);

            s8.AddNextState(0x4e00, 0x9fa5, s8.Id);

            s8.AddElseState(s9.Id);
        }
Esempio n. 4
0
        private static void InitEndOfLineStates()
        {
            DFAState <int, LexicalFunction> s10 = AddState(new LexicalState(10, false));                                 //EOL begin state;
            DFAState <int, LexicalFunction> s11 = AddState(new LexicalState(11, true, LexicalFunction.OutputEndOfLine)); //EOL quit state;

            //s0 [ \t\r\n] s3
            s0.AddNextState(new int[] { '\r', '\n' }, s10.Id);

            //s3 [ \t\r\n] s3
            s10.AddNextState(new int[] { '\r', '\n' }, s10.Id);

            //s3 ^[ \t\r\n] s4
            s10.AddElseState(s11.Id);
        }
Esempio n. 5
0
        private static void InitSpaceStates()
        {
            DFAState <int, LexicalFunction> s3 = AddState(new LexicalState(3, false));                             //Space begin state;
            DFAState <int, LexicalFunction> s4 = AddState(new LexicalState(4, true, LexicalFunction.OutputSpace)); //Space quit state;

            //s0 [ \t\r\n] s3
            s0.AddNextState(new int[] { ' ', '\t' }, s3.Id);

            //s3 [ \t\r\n] s3
            s3.AddNextState(new int[] { ' ', '\t' }, s3.Id);

            //s3 ^[ \t\r\n] s4
            s3.AddElseState(s4.Id);
        }
Esempio n. 6
0
        private static DFAState <int, LexicalFunction> sother = AddState(new LexicalState(255, true, LexicalFunction.Other)); //Start state;

        private static void InitIdentifierStates()
        {
            DFAState <int, LexicalFunction> s1 = AddState(new LexicalState(1));                                         //Identifier begin state;
            DFAState <int, LexicalFunction> s2 = AddState(new LexicalState(2, true, LexicalFunction.OutputIdentifier)); //Identifier quit state;

            //s0 [_a-zA-Z] s1
            s0.AddNextState('_', s1.Id);
            s0.AddNextState('a', 'z', s1.Id);
            s0.AddNextState('A', 'Z', s1.Id);
            s0.AddNextState('a', 'z', s1.Id);
            s0.AddNextState('A', 'Z', s1.Id);

            //s1 [_a-zA-Z0-9] s1
            s1.AddNextState('_', s1.Id);
            s1.AddNextState('a', 'z', s1.Id);
            s1.AddNextState('A', 'Z', s1.Id);
            s1.AddNextState('0', '9', s1.Id);
            s1.AddNextState('a', 'z', s1.Id);
            s1.AddNextState('A', 'Z', s1.Id);
            s1.AddNextState('0', '9', s1.Id);

            //s1 ^[_a-zA-Z0-9] s2
            s1.AddElseState(s2.Id);
        }