示例#1
0
        private LinkedList <Framework.WordInfo> GetInitSegment(string text)
        {
            LinkedList <Framework.WordInfo> result = new LinkedList <Framework.WordInfo>();

            Framework.Lexical lexical = new Framework.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:
                    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
文件: Lexical.cs 项目: wj60387/hubble
        public override void DoThings(int action, DFA <int, LexicalFunction> dfa)
        {
            Lexical lexical = (Lexical)dfa;

            switch (Func)
            {
            case LexicalFunction.OutputIdentifier:
                lexical.OutputToken = new WordInfo();
                GetTextElse(dfa);
                lexical.OutputToken.WordType = WordType.English;

                break;

            case LexicalFunction.OutputSpace:
                lexical.OutputToken = new WordInfo();
                GetTextElse(dfa);
                lexical.OutputToken.WordType = WordType.Space;
                break;

            case LexicalFunction.OutputNumeric:
                lexical.OutputToken = new WordInfo();
                GetTextElse(dfa);
                lexical.OutputToken.WordType = WordType.Numeric;
                break;

            case LexicalFunction.OutputChinese:
                lexical.OutputToken = new WordInfo();
                GetTextElse(dfa);
                lexical.OutputToken.WordType = WordType.SimplifiedChinese;
                break;

            case LexicalFunction.Other:
                lexical.OutputToken = new WordInfo();
                GetText(dfa);
                lexical.OutputToken.WordType = WordType.Symbol;
                break;
            }
        }
示例#3
0
文件: Lexical.cs 项目: wj60387/hubble
        private void GetText(DFA <int, LexicalFunction> dfa)
        {
            int endIndex = dfa.CurrentToken;

            Lexical lexical = (Lexical)dfa;

            if (endIndex == lexical.InputText.Length)
            {
                lexical.OutputToken.Position = lexical.beginIndex;

                lexical.OutputToken.Word = lexical.InputText.Substring(lexical.beginIndex,
                                                                       endIndex - lexical.beginIndex);
            }
            else
            {
                lexical.OutputToken.Position = lexical.beginIndex;

                lexical.OutputToken.Word = lexical.InputText.Substring(lexical.beginIndex,
                                                                       endIndex - lexical.beginIndex + 1);
            }

            lexical.beginIndex = endIndex + 1;
        }