/// <param name="e"> /// is the filter expression. </param> /// <returns> e </returns> public virtual object visit(FilterExpr e) { PrimaryExpr pe = (PrimaryExpr)e.primary().accept(this); e.set_primary(pe); printCollExprs(e.GetEnumerator()); return(e); }
private object ComputeAssign(BinaryExpr t, IEnvironment env, object rvalue) { ASTree l = t.Left; if (l is Name) { env.Put((l as Name).Text, rvalue); return(rvalue); } else if (l is PrimaryExpr) { PrimaryExpr p = l as PrimaryExpr; if (p.HasPostfix(0) && (p.Postfix(0) is Dot)) { p.Accept(this, env, 1); object tp = result; if (result is ErrorValue) { return(result); } if (tp is RavObject) { return(SetField(t, (tp as RavObject), (p.Postfix(0) as Dot), rvalue)); } } else if (p.HasPostfix(0) && (p.Postfix(0) is ArrayRef)) { p.Accept(this, env, 1); object a = result; if (result is ErrorValue) { return(result); } if (a is object[]) { ArrayRef aref = p.Postfix(0) as ArrayRef; aref.Index.Accept(this, env); if (result is ErrorValue) { return(result); } object index = result; if (index is int) { (a as object[])[(int)index] = rvalue; return(rvalue); } } result = new ErrorValue("bad array access", t); return(result); } } return(new ErrorValue("bad assignment", t)); }
private object EvalSubExpr(PrimaryExpr t, IEnvironment env, int nest) { if (t.HasPostfix(nest)) { object target = EvalSubExpr(t, env, nest + 1); t.Postfix(nest).Accept(this, env, target); return(result); } else { t.Operand.Accept(this, env); return(result); } }
public void Visit(PrimaryExpr t, IEnvironment env, int nest) { EvalSubExpr(t, env, nest); }
/* * public void Visit(PrimaryExpr t, IEnvironment env) { * t.Operand.Accept(this, env); * object res = result; * if (res is ErrorValue) return; * int n = t.NumChildern; * for (int i = 0; i < n - 1; i++) { * t.Postfix(i).Accept(this, env, res); * if (result is ErrorValue) return; * } * return; * } */ public void Visit(PrimaryExpr t, IEnvironment env) { EvalSubExpr(t, env, 0); }
/// <summary> /// Set a new primary expression. /// </summary> /// <param name="e"> /// is set as the new primary expression. </param> public virtual void set_primary(PrimaryExpr e) { _pexpr = e; }
/// <summary> /// Constructor of FilterExpr. /// </summary> /// <param name="pexpr"> /// is copied to _pexpr. </param> /// <param name="exprs"> /// is copied to _exprs. </param> public FilterExpr(PrimaryExpr pexpr, ICollection <Expr> exprs) { _pexpr = pexpr; _exprs = exprs; }
public PostfixExpr(object pexpr, ICollection <ICollection <Expr> > exprs) { _pexpr = (PrimaryExpr)pexpr; _exprs = exprs; }
private XPathExpr make_xpathexpr(PrimaryExpr pex) { FilterExpr fe = new FilterExpr(pex, new List <Expr>()); return(new XPathExpr(0, false, fe)); }