예제 #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
파일: VEType.cs 프로젝트: takuto-h/omicron
 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
파일: VEConst.cs 프로젝트: takuto-h/omicron
 public IValue Eval(IValueEnv valueEnv)
 {
     return mValueConst;
 }