コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: EvalVisitor.cs プロジェクト: cyendra/RavenParser
        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));
        }
コード例 #3
0
ファイル: EvalVisitor.cs プロジェクト: cyendra/RavenParser
 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);
     }
 }
コード例 #4
0
ファイル: EvalVisitor.cs プロジェクト: cyendra/RavenParser
 public void Visit(PrimaryExpr t, IEnvironment env, int nest)
 {
     EvalSubExpr(t, env, nest);
 }
コード例 #5
0
ファイル: EvalVisitor.cs プロジェクト: cyendra/RavenParser
 /*
  * 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);
 }
コード例 #6
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;
 }
コード例 #7
0
 /// <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;
 }
コード例 #8
0
 public PostfixExpr(object pexpr, ICollection <ICollection <Expr> > exprs)
 {
     _pexpr = (PrimaryExpr)pexpr;
     _exprs = exprs;
 }
コード例 #9
0
        private XPathExpr make_xpathexpr(PrimaryExpr pex)
        {
            FilterExpr fe = new FilterExpr(pex, new List <Expr>());

            return(new XPathExpr(0, false, fe));
        }