public void Visit(MulExpr mulExpr, object[] args) { mulExpr.FirstOp.Accept(this); mulExpr.SecondOp.Accept(this); RightValue v1 = readRightValue(mulExpr.FirstOp); RightValue v2 = readRightValue(mulExpr.SecondOp); DataType resultType = readAlgoOperand(v1, v2, mulExpr.Location); if (resultType == DataType.Int) { IntConst result = new IntConst(); result.Value = Convert.ToInt32(v1.GetValueObject()) * Convert.ToInt32(v2.GetValueObject()); mulExpr.RightValue = result; //mulExpr.DataType = DataType.Int; } else if (resultType == DataType.Float) { FloatConst result = new FloatConst(); result.Value = Convert.ToDouble(v1.GetValueObject()) * Convert.ToDouble(v2.GetValueObject()); mulExpr.RightValue = result; //mulExpr.DataType = DataType.Float; } else { throw new Exception(); } }
private Expr parseMulExpr() { Expr expr = parseParenExpr(); while (true) { int token = parseToken(); switch (token) { case '%': expr = new ModExpr(expr, parseParenExpr()); break; case '*': expr = new MulExpr(expr, parseParenExpr()); break; case '/': expr = new DivExpr(expr, parseParenExpr()); break; default: _peekToken = token; return(expr); } } }
/// <summary> /// Validate a multiplication expression. /// </summary> /// <param name="mulex"> /// is the expression. </param> /// <returns> null. </returns> public virtual object visit(MulExpr mulex) { printBinExpr("MUL", mulex); return(null); }
/// <param name="mulex"> /// is the multiply expression. </param> /// <returns> a new function. </returns> public virtual object visit(MulExpr ex) { ex.left().accept(this); ex.right().accept(this); return(null); }
/// <param name="mulex"> /// is the multiply expression. </param> /// <returns> a new function. </returns> public virtual object visit(MulExpr mulex) { return(make_ArithOp(mulex, new QName("fs", "times", OpFunctionLibrary.XPATH_OP_NS))); }