Example #1
0
        private IReadOnlyList <Token> ParseTokens(string query, out Expr immediateResult)
        {
            try
            {
                if (string.IsNullOrEmpty(query))
                {
                    immediateResult = new IdentityExpr(new Location(1, 1));
                    return(null);
                }

                var lexer = new Lexer(
                    operators: new [] {
                    "|", "|<", "&", ".", "(", "[?", "[", "{", "}", "]", ")", ".", "@", "*",
                    "?", ":", ",", "-", "+", "/", "%", "==", "!=", "&&", "||", "??", "..",
                    "<", "<=", ">", ">=", "=", "$", ";", "...", "!"
                },
                    charKind: "STRING",
                    charsMustBeOneChar: false,
                    backtickStringKind: "STRING",
                    intKind: "NUMBER",
                    floatKind: "NUMBER",
                    stringKind: "STRING",
                    hasVariables: true
                    );

                // Take a guess as to the size of the list so that it doesn't have to get rebuilt a bunch.
                var tokens = new List <Token>(query.Length / 3);
                foreach (var token in lexer.Parse(query))
                {
                    tokens.Add(token);
                }

                immediateResult = null;
                return(tokens);
            }
            catch (ParseException ex)
            {
                immediateResult = new ErrorExpr(ex.Location, ex.Message);
                return(null);
            }
            catch (Exception ex)
            {
                immediateResult = new ErrorExpr(new Location(0, 0), ex.Message);
                return(null);
            }
        }
Example #2
0
 private Expr _Substitute(ErrorExpr e)
 {
     return e;
 }
Example #3
0
 private Expr _Numericize(ErrorExpr e)
 {
     return e;
 }
Example #4
0
 private Expr _Canonicalize(ErrorExpr e)
 {
     return e;
 }
Example #5
0
        private List<Expr> GetFieldExpressions()
        {
            List<Expr> fieldExprs = new List<Expr>();

            ExpectWhitespace();

            while (fieldExprs.Count == 0 || ExpectSymbol(","))
            {
                ExpectWhitespace();

                // TODO: Add support for *
                Expr fieldExpr = GetFieldExpression();
                if (fieldExpr == null)
                {
                    fieldExpr = new ErrorExpr("Syntax error: Unable to parse field expression");
                }

                fieldExprs.Add(fieldExpr);

                ExpectWhitespace();
            }

            return fieldExprs;
        }
Example #6
0
 public virtual void Visit(ErrorExpr expr)
 {
 }