public override IType VisitExpression([NotNull] FAILangParser.ExpressionContext context) { var type = context.type(); var name = context.name(); var op = context.op; var prefix = context.prefix(); var cond = context.cond(); var callparams = context.callparams(); var lambda = context.lambda(); var union = context.union(); var indexer = context.indexer(); if (type != null) { return(VisitType(type)); } else if (name != null) { return(VisitName(name)); } else if (op != null) { var exprs = context.expression(); Operator oper = Operator.MULTIPLY; switch (op.Text) { case "+": oper = Operator.ADD; break; case "-": oper = Operator.SUBTRACT; break; case "*": oper = Operator.MULTIPLY; break; case "": oper = Operator.MULTIPLY; break; case "/": oper = Operator.DIVIDE; break; case "%": oper = Operator.MODULO; break; case "^": oper = Operator.EXPONENT; break; case "=": oper = Operator.EQUALS; break; case "~=": oper = Operator.NOT_EQUALS; break; case ">": oper = Operator.GREATER; break; case "<": oper = Operator.LESS; break; case ">=": oper = Operator.GR_EQUAL; break; case "<=": oper = Operator.LE_EQUAL; break; } return(new OperatorExpression(oper, VisitExpression(exprs[0]), VisitExpression(exprs[1]))); } else if (prefix != null) { Prefix pre = Prefix.NOT; switch (prefix.GetText()) { case "~": pre = Prefix.NOT; break; case "-": pre = Prefix.NEGATIVE; break; } return(new PrefixExpression(pre, VisitExpression(context.expression(0)))); } else if (cond != null) { return(VisitCond(cond)); } else if (callparams != null) { return(new FunctionExpression(VisitExpression(context.expression(0)), callparams.arg() .Select(x => (VisitExpression(x.expression()), x.elipsis != null)).ToArray())); } else if (lambda != null) { return(VisitLambda(lambda)); } else if (union != null) { return(VisitUnion(union)); } else if (indexer != null) { IType l_expr = null; if (indexer.l_index != null) { l_expr = VisitExpression(indexer.l_index); } IType r_expr = null; if (indexer.r_index != null) { r_expr = VisitExpression(indexer.r_index); } return(new IndexerExpression(VisitExpression(context.expression(0)), l_expr, r_expr, indexer.elipsis != null)); } return(VisitExpression(context.expression(0))); }
public override IType VisitExpression([NotNull] FAILangParser.ExpressionContext context) { return(VisitWhere(context.where ())); }