public VariableAssignStatement(VariableUseExpression variableUseExpr, Expression valueExpr) { this.variableUseExpr = variableUseExpr; this.valueExpr = valueExpr; CheckTypes(); }
private Expression Factor() { Expression expr = null; switch (look.Tag) { case '(': Move(); expr = Bool(); Match(')'); return(expr); case Tags.NUMBER: IntegerToken token = (IntegerToken)look; expr = new IntConstantExpression(token.Value); Move(); return(expr); case Tags.REAL: RealToken realToken = (RealToken)look; expr = new FloatConstantExpression(realToken.Value); Move(); return(expr); case Tags.TRUE: Move(); return(BoolConstantExpression.True);; case Tags.FALSE: Move(); return(BoolConstantExpression.False); case Tags.ID: Move(); if (look.Tag == '(') { return(FuncCallExpression()); } else { VariableUseExpression varUseExpr = VariableUseExpression(); if (look.Tag == Tags.INCR) { Expression incrExpr = UnaryArithmeticExpression.CreatePostIncrement(varUseExpr); Move(); return(incrExpr); } if (look.Tag == Tags.DECR) { Expression decrExpr = UnaryArithmeticExpression.CreatePostDecrement(varUseExpr); Move(); return(decrExpr); } if (look.Tag == '=') { Move(); return(new VariableAssignExpression(varUseExpr, Bool())); } return(varUseExpr); } } Error("Syntax error"); return(null); }