示例#1
0
 public Interpreter()
 {
     mTypeCtxt = new TypeCtxtGlobal();
     mTypeEnv = new TypeEnvGlobal();
     mValueCtxt = new ValueCtxtGlobal();
     mValueEnv = new ValueEnvGlobal();
 }
示例#2
0
文件: VEObj.cs 项目: takuto-h/omicron
 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);
 }
示例#3
0
 public VClosure(
     IValueEnv valueEnv,
     string valueVarName,
     IValueExpr valueExpr
 )
 {
     mValueEnv = valueEnv;
     mValueVarName = valueVarName;
     mValueExpr = valueExpr;
 }
示例#4
0
文件: VERef.cs 项目: takuto-h/omicron
 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);
 }
示例#5
0
文件: VEVar.cs 项目: takuto-h/omicron
 public IValue Eval(IValueEnv valueEnv)
 {
     IValue result;
     if (!valueEnv.TryGetValue(mValueVarName, out result))
     {
         throw new InvalidOperationException(
             string.Format("unbound variable: {0}", mValueVarName)
         );
     }
     return result;
 }
示例#6
0
文件: VEApp.cs 项目: takuto-h/omicron
 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);
 }
示例#7
0
 public IValue Eval(IValueEnv valueEnv)
 {
     return mValueExpr.Eval(valueEnv);
 }
示例#8
0
 public IValue Eval(IValueEnv valueEnv)
 {
     return VCUnit.Instance;
 }
示例#9
0
 public ValueEnvLocal(IValueEnv parent)
 {
     mDictionary = new Dictionary<string, IValue>();
     mParent = parent;
 }
示例#10
0
文件: VEAbs.cs 项目: takuto-h/omicron
 public IValue Eval(IValueEnv valueEnv)
 {
     return new VClosure(valueEnv, mValueVarName, mValueExpr);
 }
示例#11
0
文件: VEDef.cs 项目: takuto-h/omicron
 public IValue Eval(IValueEnv valueEnv)
 {
     IValue value = mValueExpr.Eval(valueEnv);
     valueEnv.Add(mValueVarName, value);
     return value;
 }
示例#12
0
 public IValue Eval(IValueEnv valueEnv)
 {
     return mValueConst;
 }