Ejemplo n.º 1
0
        public IExpression GetParseExp(int ctxPrecedence)
        {
            var prefixToken = _scanner.Consume();

            if (prefixToken.IsEmpty)
            {
                return(null);
            }
            return(PrefixParse(prefixToken, ctxPrecedence));
        }
Ejemplo n.º 2
0
        public static List <TextSpan> ConsumeList(this IScanner scanner, params SqlToken[] tokenTypeList)
        {
            scanner.IgnoreComments();
            var textSpanList = new List <TextSpan>();

            foreach (var tokenType in tokenTypeList)
            {
                textSpanList.Add(scanner.Consume <SqlToken>(tokenType));
            }
            return(textSpanList);
        }
Ejemplo n.º 3
0
        public static bool MatchAny(this IScanner scanner, params SqlToken[] tokenTypeList)
        {
            scanner.IgnoreComments();
            var expectTokenTypeList = tokenTypeList.Select(x => x.ToString()).ToList();
            var span = scanner.Peek();

            if (!expectTokenTypeList.Contains(span.Type))
            {
                return(false);
            }
            scanner.Consume();
            return(true);
        }
Ejemplo n.º 4
0
        public static bool TryConsumeStringAny <TTokenType>(this IScanner scanner, out string token, params TTokenType[] expectTokenTypeList)
            where TTokenType : struct
        {
            var span = scanner.Peek();
            var expectTokenTypeStrList = expectTokenTypeList.Select(x => x.ToString());

            if (!expectTokenTypeStrList.Contains(span.Type))
            {
                token = string.Empty;
                return(false);
            }
            scanner.Consume();
            token = scanner.GetSpanString(span);
            return(true);
        }
Ejemplo n.º 5
0
 public static bool TryConsumeAny <TTokenType>(this IScanner scanner, out TextSpan outSpan, params TTokenType[] tokenTypes)
     where TTokenType : struct
 {
     for (var i = 0; i < tokenTypes.Length; i++)
     {
         var tokenType = tokenTypes[i].ToString();
         var token     = scanner.Peek();
         if (token.Type == tokenType)
         {
             scanner.Consume();
             outSpan = token;
             return(true);
         }
     }
     outSpan = TextSpan.Empty;
     return(false);
 }
Ejemplo n.º 6
0
        public static TextSpan ConsumeAny <TTokenType>(this IScanner scanner, params TTokenType[] tokenTypes)
            where TTokenType : struct
        {
            for (var i = 0; i < tokenTypes.Length; i++)
            {
                var tokenType = tokenTypes[i].ToString();
                var token     = scanner.Peek();
                if (token.Type == tokenType)
                {
                    scanner.Consume();
                    return(token);
                }
            }
            var helpMessage   = scanner.GetHelpMessage(scanner.Peek());
            var tokenTypesStr = string.Join(",", tokenTypes.Select(x => x.ToString()));

            throw new ScanException($"Expect one of {tokenTypesStr}.\r\n{helpMessage}");
        }
Ejemplo n.º 7
0
 public TextSpan Consume(string expect = null)
 {
     return(_scanner.Consume(expect));
 }
Ejemplo n.º 8
0
 public static TextSpan Consume(this IScanner scanner, SqlToken tokenType)
 {
     scanner.IgnoreComments();
     return(scanner.Consume <SqlToken>(tokenType));
 }