public void SetVariable(string name, bool value) { variables[name] = new TypedValue(value); }
public TypedValue Evaluate(BinaryOperation operation, InterpreterContext context) { TypedValue left = Evaluate(operation.Left, context); TypedValue right = Evaluate(operation.Right, context); WhileType resultType = CheckBinaryOperationTyping(operation.Operator, left.ValueType, right.ValueType); object value = null; switch (operation.Operator) { case BinaryOperator.ADD: { value = left.IntValue + right.IntValue; break; } case BinaryOperator.SUB: { value = left.IntValue - right.IntValue; break; } case BinaryOperator.MULTIPLY: { value = left.IntValue * right.IntValue; break; } case BinaryOperator.DIVIDE: { value = left.IntValue / right.IntValue; break; } case BinaryOperator.AND: { value = left.BoolValue && right.BoolValue; break; } case BinaryOperator.OR: { value = left.BoolValue || right.BoolValue; break; } case BinaryOperator.GREATER: { switch (left.ValueType) { case WhileType.BOOL: { value = left.BoolValue == true && right.BoolValue == false; break; } case WhileType.INT: { value = left.IntValue > right.IntValue; break; } case WhileType.STRING: { value = left.StringValue.CompareTo(right.StringValue) == 1; break; } default: { value = false; break; } } break; } case BinaryOperator.LESSER: { switch (left.ValueType) { case WhileType.BOOL: { value = left.BoolValue == false && right.BoolValue == true; break; } case WhileType.INT: { value = left.IntValue < right.IntValue; break; } case WhileType.STRING: { value = left.StringValue.CompareTo(right.StringValue) == -1; break; } default: { value = false; break; } } break; } case BinaryOperator.EQUALS: { switch (left.ValueType) { case WhileType.BOOL: { value = left.BoolValue == right.BoolValue; break; } case WhileType.INT: { value = left.IntValue == right.IntValue; break; } case WhileType.STRING: { value = left.StringValue == right.StringValue; break; } default: { value = false; break; } } break; } case BinaryOperator.DIFFERENT: { switch (left.ValueType) { case WhileType.BOOL: { value = left.BoolValue != right.BoolValue; break; } case WhileType.INT: { value = left.IntValue != right.IntValue; break; } case WhileType.STRING: { value = left.StringValue != right.StringValue; break; } default: { value = false; break; } } break; } case BinaryOperator.CONCAT: { value = left.StringValue + right.StringValue; break; } default: { value = null; break; } } return(new TypedValue(resultType, value)); }
public void SetVariable(string name, TypedValue value) { variables[name] = value; }
private void Interprete(AssignStatement ast, InterpreterContext context) { TypedValue val = evaluator.Evaluate(ast.Value, context); context.SetVariable(ast.VariableName, val); }