Exemplo n.º 1
0
        public override Maybe<Result> VisitTerm_expr(QueryParser.Term_exprContext context)
        {
            if (context.string_const() != null)
                return new ResultSingle(new ValueString(context.string_const().GetText().Trim('\"'))).Just()
                    .FMap(Result.Id);
            if (context.bool_const() != null)
                return new ResultSingle(new ValueBoolean(context.bool_const().TRUE() != null)).Just()
                    .FMap(Result.Id);
            if (context.int_const() != null)
                return new ResultSingle(new ValueInt(int.Parse(context.int_const().GetText()))).Just()
                    .FMap(Result.Id);
            if (context.double_const() != null)
                return new ResultSingle(new ValueDouble(double.Parse(context.double_const().GetText(),
                    CultureInfo.InvariantCulture))).Just().FMap(Result.Id);
            if (context.LBRACE() != null)
                //return new ResultSingle(new ValueSet());
                throw new NotImplementedException("term_expr: {}");
            if (context.LBRACK() != null)
                throw new NotImplementedException("term_expr: []");
            if (context.LT() != null)
                throw new NotImplementedException("term_expr: <...>");

            if (context.cond_expr() != null)
                return new CondExprVisitor(_zmi, _env).Visit(context.cond_expr());
            if (context.statement() != null)
                return VisitStmt(context.statement()).FMap(Result.Id);

            var id = context.identifier().ID().GetText();
            if (context.LPAREN() != null)
                return VisitFunction(id, context);

            var cell = _env.GetIdent(id, out var hasColumn);
            return !hasColumn ? Maybe<Result>.Nothing : cell.Just();
        }
Exemplo n.º 2
0
        private Maybe<Result> VisitFunction(string id, QueryParser.Term_exprContext context)
        {
            List<Result> arguments;
            if (context.MUL() != null)
                arguments = _env.ToList();
            else
            {
                var searchedFor = context.expr_list()?.cond_expr()
                    .Select(c => new CondExprVisitor(_zmi, _env).Visit(c))
                    .Sequence();
                if (searchedFor == null)
                    arguments = new List<Result>();
                else if (searchedFor.HasNothing)
                    return Maybe<Result>.Nothing;
                else
                    arguments = searchedFor.Val;
            }

            return Functions.Instance.Evaluate(id, arguments);
        }
Exemplo n.º 3
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="QueryParser.term_expr"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitTerm_expr([NotNull] QueryParser.Term_exprContext context)
 {
     return(VisitChildren(context));
 }