コード例 #1
0
ファイル: Segment.cs プロジェクト: RockNHawk/SS.Pangu
        private SuperLinkedList <WordInfo> GetInitSegment(string text)
        {
            SuperLinkedList <WordInfo> result = new SuperLinkedList <WordInfo>();

            var lexical = new Lexical(text);

            DFAResult dfaResult;

            for (int i = 0; i < text.Length; i++)
            {
                char c = text[i];

                dfaResult = lexical.Input(c, i);

                switch (dfaResult)
                {
                case DFAResult.Continue:
                    continue;

                case DFAResult.Quit:
                    result.AddLast(lexical.OutputToken);
                    break;

                case DFAResult.ElseQuit:
                    result.AddLast(lexical.OutputToken);
                    if (lexical.OldState != 255)
                    {
                        i--;
                    }

                    break;
                }
            }

            dfaResult = lexical.Input(0, text.Length);

            switch (dfaResult)
            {
            case DFAResult.Continue:
                break;

            case DFAResult.Quit:
                result.AddLast(lexical.OutputToken);
                break;

            case DFAResult.ElseQuit:
                result.AddLast(lexical.OutputToken);
                break;
            }

            return(result);
        }
コード例 #2
0
ファイル: SyntaxAnalyse.cs プロジェクト: wj60387/hubble
        public SyntaxAnalyse(string text)
        {
            _SFQLSentenceList = new List <TSFQLSentence>();

            Lexical lexical = new Lexical(text);

            DFAResult dfaResult;

            for (int i = 0; i < text.Length; i++)
            {
                dfaResult = lexical.Input(text[i], i);

                switch (dfaResult)
                {
                case DFAResult.Continue:
                    continue;

                case DFAResult.Quit:
                    InputLexicalToken(lexical.OutputToken);
                    break;

                case DFAResult.ElseQuit:
                    InputLexicalToken(lexical.OutputToken);
                    i--;
                    break;
                }
            }


            dfaResult = lexical.Input(0, text.Length);

            switch (dfaResult)
            {
            case DFAResult.Continue:
                throw new Hubble.Core.SFQL.LexicalAnalysis.LexicalException("Lexical abort at the end of sql");

            case DFAResult.Quit:
                InputLexicalToken(lexical.OutputToken);
                break;

            case DFAResult.ElseQuit:
                InputLexicalToken(lexical.OutputToken);
                break;
            }

            InputLexicalToken(new Lexical.Token());
        }