/// <summary> /// 从最近的作用域寻找变量并赋值;若变量不存在则在栈顶作用域声明之 /// </summary> /// <param name="varName"></param> /// <param name="value"></param> internal void SetValue(string varName, RightValue value) { Scope scope = searchVar(varName); if (scope != null) { scope.SetValue(varName, value); } else { scope = scopeStack.First.Value; scope.SetValue(varName, value); } }
private DataType readAlgoOperand(RightValue v1, RightValue v2, Location loc) { if (v1 is BoolConst || v2 is BoolConst || v1 is StringConst || v2 is StringConst) { throw new RuntimeException(new Error(ErrorType.OprandTypeError, loc)); } else if (v1 is FloatConst || v2 is FloatConst) { return DataType.Float; } else if (v1 is IntConst && v2 is IntConst) { return DataType.Int; } else { throw new RuntimeException(new Error(ErrorType.OprandTypeError, loc)); } }