public Interpreter() { mTypeCtxt = new TypeCtxtGlobal(); mTypeEnv = new TypeEnvGlobal(); mValueCtxt = new ValueCtxtGlobal(); mValueEnv = new ValueEnvGlobal(); }
public IValue Eval(IValueEnv valueEnv) { var methodValues = new Dictionary<string, IValue>(); foreach (KeyValuePair<string, IValueExpr> kvp in mMethodValueExprs) { methodValues.Add(kvp.Key, kvp.Value.Eval(valueEnv)); } return new VObj(methodValues); }
public VClosure( IValueEnv valueEnv, string valueVarName, IValueExpr valueExpr ) { mValueEnv = valueEnv; mValueVarName = valueVarName; mValueExpr = valueExpr; }
public IValue Eval(IValueEnv valueEnv) { IValue value = mValueExpr.Eval(valueEnv); if (!(value is VObj)) { throw new InvalidOperationException( string.Format("object required, but got {0}", value.Show()) ); } return ((VObj)value).GetMethodValue(mMethodName); }
public IValue Eval(IValueEnv valueEnv) { IValue result; if (!valueEnv.TryGetValue(mValueVarName, out result)) { throw new InvalidOperationException( string.Format("unbound variable: {0}", mValueVarName) ); } return result; }
public IValue Eval(IValueEnv valueEnv) { IValue value1 = mValueExpr1.Eval(valueEnv); IValue value2 = mValueExpr2.Eval(valueEnv); IValueFunc func = value1 as IValueFunc; if (func == null) { throw new InvalidOperationException( string.Format( "function required, but got {0}", value1.Show() ) ); } return func.Apply(value2); }
public IValue Eval(IValueEnv valueEnv) { return mValueExpr.Eval(valueEnv); }
public IValue Eval(IValueEnv valueEnv) { return VCUnit.Instance; }
public ValueEnvLocal(IValueEnv parent) { mDictionary = new Dictionary<string, IValue>(); mParent = parent; }
public IValue Eval(IValueEnv valueEnv) { return new VClosure(valueEnv, mValueVarName, mValueExpr); }
public IValue Eval(IValueEnv valueEnv) { IValue value = mValueExpr.Eval(valueEnv); valueEnv.Add(mValueVarName, value); return value; }
public IValue Eval(IValueEnv valueEnv) { return mValueConst; }