コード例 #1
0
ファイル: ExactMatchRult.cs プロジェクト: zleepy/SqlCleanup
        public override bool Match(Lexer lexer, out State result)
        {
            int startPos = lexer.Pos;
            if (IsMatchingString(lexer, MatchString))
            {
                result = new State(Type, startPos, lexer.Pos - startPos);
                return true;
            }

            result = new State();
            return false;
        }
コード例 #2
0
        public override bool Match(Lexer lexer, out State result)
        {
            int startPos = lexer.Pos;

            if (IsMatchingString(lexer, Start))
            {
                if (EscapeCharacter == null)
                {
                    do
                    {
                        if (IsMatchingString(lexer, End))
                        {
                            result = new State(Type, startPos, lexer.Pos - startPos);
                            return true;
                        }
                    } while (lexer.Next());

                    // Det här är specialfall som uppstår om man inte har något sluttecken och vi kommer till slutet på texten.
                    // I teorin är det inte en träff, men jag vill ändå räkna det som en träff fast som inte är komplett.
                    result = new State(Type, startPos, lexer.Pos - startPos, true);
                    return true;
                }
                else
                {
                    do
                    {
                        if (lexer.Current == EscapeCharacter)
                        {
                            // Är det nuvarande tecknet samma som escape så hoppa över det och nästa.
                            lexer.Next();
                        }
                        else if (IsMatchingString(lexer, End))
                        {
                            result = new State(Type, startPos, lexer.Pos - startPos);
                            return true;
                        }
                    } while (lexer.Next());

                    // Det här är specialfall som uppstår om man inte har något sluttecken och vi kommer till slutet på texten.
                    // I teorin är det inte en träff, men jag vill ändå räkna det som en träff fast som inte är komplett.
                    result = new State(Type, startPos, lexer.Pos - startPos, true);
                    return true;
                }
            }

            result = new State();
            return false;
        }
コード例 #3
0
ファイル: Rule.cs プロジェクト: zleepy/SqlCleanup
 public abstract bool Match(Lexer lexer, out State result);
コード例 #4
0
ファイル: ExactMatchRult.cs プロジェクト: zleepy/SqlCleanup
        public override bool Match(Lexer lexer, out State result)
        {
            if (!lexer.IsLetter)
            {
                result = new State();
                return false;
            }

            int startPos = lexer.Pos;

            while (lexer.Next())
            {
                if (!(lexer.IsLetterOrDigit || lexer.Current == '_'))
                    break;
            }

            var foundWord = lexer.GetSubArray(startPos, lexer.Pos - startPos).ToString().ToUpper();
            result = new State(SpecialWords.ContainsKey(foundWord) ? SpecialWords[foundWord] : Type, startPos, lexer.Pos - startPos);
            return true;
        }