Ejemplo n.º 1
0
        public static void ThrowScanException(IScanner scanner, string errorMessage)
        {
            var token       = scanner.Peek();
            var helpMessage = scanner.GetHelpMessage(token);

            throw new ScanException($"{errorMessage}\r\n{helpMessage}");
        }
Ejemplo n.º 2
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.º 3
0
        public SqlDom ParseExp(int ctxPrecedence)
        {
            var prefixToken = _scanner.Consume();

            if (prefixToken.IsEmpty)
            {
                throw new Exception($"expect token but found NONE");
            }

            PrefixParselet prefixParse = null;

            try
            {
                prefixParse = SqlSpec.Instance.Prefix(prefixToken.Type);
            }
            catch (KeyNotFoundException)
            {
                var tokenStr = _scanner.GetSpanString(prefixToken);
                var message  = _scanner.GetHelpMessage(prefixToken);
                throw new ParseException($"Prefix '{tokenStr}' Parse fail.\r\n" + message);
            }

            return(ProcessPrefix(prefixToken, prefixParse, ctxPrecedence));
        }
Ejemplo n.º 4
0
        public static string GetHelpMessage(this IScanner scanner)
        {
            var token = scanner.Peek();

            return(scanner.GetHelpMessage(token));
        }