Example #1
0
        /// <summary>
        /// Parse the specified context
        /// evaluation is method
        /// expr->func(formula)->cmp->add(sub)->mul(div)->app->facter
        /// </summary>
        /// <param name="ctx">ParserContext.</param>
        /// <returns></returns>
        public static SExpr Parse(ParseContext context)
        {
            SExpr expr = NewMethod(context);

            context.ReadToken(TokenType.EOF);
            return(expr);
        }
Example #2
0
        public List <Instruction> PutFromReg(RegVRef src)
        {
            var code = new List <Instruction>();

            FieldSRef addr = this.addr as FieldSRef;

            if (addr == null)
            {
                if (this.addr.IsConstant())
                {
                    addr = FieldSRef.Imm1();
                }
                else
                {
                    addr = FieldSRef.ScratchInt();
                    code.AddRange(this.addr.FetchToField(addr));
                }
            }

            code.Add(new Instruction
            {
                opcode = Opcode.MemWrite,
                op1    = addr,
                op2    = src,
                imm1   = this.addr.IsConstant() ? this.addr : null,
            });
            return(code);
        }
Example #3
0
        public static LispLiteral InterpreteSExpr(Context context, SExpr sExpr)
        {
            if (sExpr.Head is SymbolLiteral id)
            {
                if (context.Get(id.Value) is LispRuntimeFunction runtimeFunction)
                {
                    return(Call(runtimeFunction, sExpr, context));
                }
            }
            if (sExpr.Head is LispRuntimeFunction function)
            {
                return(Call(function, sExpr, context));
            }
            if (sExpr.Head is SExpr subExpr && sExpr.MoreThanOne())
            {
                var evaluatedSubExpr = InterpreteSExpr(context, subExpr);
                var t = new SExpr(evaluatedSubExpr, sExpr.Tail.ToArray());
                return(InterpreteSExpr(context, t));
            }

            // if (sExpr.Head is SExpr single && sExpr.Single())
            // {
            //     return InterpreteSExpr(context, single);
            // }
            return(sExpr);
        }
Example #4
0
        public List <Instruction> FetchToReg(RegVRef dest)
        {
            var code = new List <Instruction>();

            FieldSRef addr = this.addr.AsDirectField();

            if (addr == null)
            {
                if (this.addr.IsConstant())
                {
                    addr = FieldSRef.Imm1();
                }
                else
                {
                    addr = FieldSRef.ScratchInt();
                    code.AddRange(this.addr.FetchToField(addr));
                }
            }

            code.Add(new Instruction
            {
                opcode = Opcode.MemRead,
                op1    = addr,
                dest   = dest,
                imm1   = this.addr.IsConstant() ? this.addr : null,
                idx    = this.addr.frame(),
            });
            return(code);
        }
Example #5
0
            public _Function(SExpr sexp, TypeReference argumentType,
				TypeReference resultType)
                : base(sexp)
            {
                ArgumentType = argumentType;
                ResultType = resultType;
            }
Example #6
0
            public _Generic(SExpr sexp, Expression._Symbol typeName,
				StrictList<TypeReference> typeParams)
                : base(sexp)
            {
                TypeName = typeName;
                TypeParams = typeParams;
            }
Example #7
0
        public static LispLiteral Call(LispRuntimeFunction runtimeFunction, SExpr sexpr,
                                       Context context)
        {
            var args = sexpr.Tail;

            var result = runtimeFunction.Apply(context, args.ToArray());

            return(result);
        }
Example #8
0
        public static LispLiteral CONTEXT(Context context, params LispLiteral[] args)
        {
            SExpr c = new SExpr();

            foreach (var ctx in context.Scope)
            {
                c.Add(new SymbolLiteral(ctx.Key));
            }

            return(c);
        }
Example #9
0
        public void CdrTest()
        {
            var r = Test(@"(cdr (""a"" ""b"" ""c"" ))");

            Assert.IsInstanceOf <SExpr>(r);
            SExpr lst = r as SExpr;

            Assert.AreEqual(2, lst.Elements.Count);
            Assert.AreEqual("b", (lst.Elements[0] as StringLiteral).Value);
            Assert.AreEqual("c", (lst.Elements[1] as StringLiteral).Value);
        }
Example #10
0
 public Exchange(RegVRef source, RegVRef dest, PointerIndex frame, SExpr addr)
 {
     if (addr.AsDirectField() == null && !addr.IsConstant())
     {
         throw new ArgumentException("must be register field or constant", "addr");
     }
     this.source = source;
     this.dest   = dest;
     this.frame  = frame;
     this.addr   = addr;
 }
Example #11
0
        public void TestLispInLisp()
        {
            string lispLisp = File.ReadAllText("lisp.lisp");
            var    r        = Test(lispLisp);

            Assert.IsInstanceOf <SExpr>(r);
            SExpr result = r as SExpr;

            Assert.AreEqual(2, result.Count);
            Assert.AreEqual(13, result.Head.IntValue);
            Assert.AreEqual(14, result.Tail.First().IntValue);
        }
Example #12
0
        public void TestAssoc()
        {
            string assocLisp = File.ReadAllText("assoc.lisp");
            var    r         = Test(assocLisp);

            Assert.IsInstanceOf <SExpr>(r);
            SExpr result = r as SExpr;

            Assert.AreEqual(3, result.Count);
            Assert.AreEqual(3, result.Head.IntValue);
            Assert.AreEqual(4, result.Tail.First().IntValue);
            Assert.AreEqual(5, result.Tail.Last().IntValue);
        }
Example #13
0
        public void ConsTest()
        {
            var r = Test(@"(cons ""x"" (""a"" ""b"" ""c"" ))");

            Assert.IsInstanceOf <SExpr>(r);
            SExpr lst = r as SExpr;

            Assert.AreEqual(4, lst.Elements.Count);
            Assert.AreEqual(new List <string>()
            {
                "x", "a", "b", "c"
            }, lst.Elements.Select(x => (x as StringLiteral).Value).ToList());
        }
Example #14
0
        public void SetCdrTest()
        {
            var r = Test(@"
(set 'variable (""a"" ""b"" ""c"" ))
(cdr variable)
");

            Assert.IsInstanceOf <SExpr>(r);
            SExpr lst = r as SExpr;

            Assert.AreEqual(2, lst.Elements.Count);
            Assert.AreEqual(new List <string>()
            {
                "b", "c"
            }, lst.Elements.Select(x => (x as StringLiteral).Value).ToList());
        }
Example #15
0
 public static Expression Set(SExpr sexp, _Symbol variable, Expression value)
 {
     return new _Set (sexp, variable, value);
 }
Example #16
0
 public static Expression Symbol(SExpr.Symbol symbol)
 {
     return new _Symbol (symbol);
 }
Example #17
0
 public _Lambda(SExpr sexp, StrictList<VariableDefinition> parameters, Expression functionBody)
     : base(sexp)
 {
     Parameters = parameters;
     FunctionBody = functionBody;
 }
Example #18
0
            public _If(SExpr sexp, Expression condition, Expression thenExpression,
				Expression elseExpression)
                : base(sexp)
            {
                Condition = condition;
                ThenExpression = thenExpression;
                ElseExpression = elseExpression;
            }
Example #19
0
 public _Literal(SExpr.Literal literal)
     : base(literal)
 {
     Literal = literal;
 }
 public ArithSExpr(SExpr S1, ArithSpec Op, SExpr S2)
 {
     this.S1 = S1;
     this.Op = Op;
     this.S2 = S2;
 }
Example #21
0
 public HitRect(RectangleF rect, SExpr sexp)
 {
     Rect = rect;
     SExp = sexp;
 }
Example #22
0
 public TableItem(string fieldname, SExpr value)
 {
     this.fieldname = fieldname;
     this.value     = value;
 }
Example #23
0
 public _Set(SExpr sexp, _Symbol variable, Expression value)
     : base(sexp)
 {
     Variable = variable;
     Value = value;
 }
Example #24
0
 public _Symbol(SExpr.Symbol symbol)
     : base(symbol)
 {
     Symbol = symbol;
 }
Example #25
0
        public static Expression If(SExpr sexp, Expression condition, Expression thenExpression,
			Expression elseExpression)
        {
            return new _If (sexp, condition, thenExpression, elseExpression);
        }
Example #26
0
 public _Quoted(SExpr sexp, Expression quotedExpression)
     : base(sexp)
 {
     QuotedExpression = quotedExpression;
 }
Example #27
0
        public static Expression Application(SExpr sexp, Expression function,
				StrictList<Expression> parameters)
        {
            return new _Application (sexp, function, parameters);
        }
Example #28
0
 public VariableDefinition(SExpr sexp, Expression._Symbol name, TypeReference type)
     : base(sexp)
 {
     Name = name;
     Type = type;
 }
Example #29
0
 public Expression(SExpr sexp)
     : base(sexp)
 {
 }
Example #30
0
 public _Depiction(SExpr sexp)
 {
     SExpr = sexp;
 }
Example #31
0
 public _Let(SExpr sexp, VariableDefinition variable, Expression value, Expression body)
     : base(sexp)
 {
     Variable = variable;
     Value = value;
     Body = body;
 }
Example #32
0
 public TableItem(char c, SExpr value)
 {
     this.fieldname = Program.CurrentProgram.charmap[c];
     this.value     = value;
 }
Example #33
0
            public _LetRec(SExpr sexp, StrictList<Tuple<VariableDefinition, Expression>> definitions, 
				Expression body)
                : base(sexp)
            {
                Definitions = definitions;
                Body = body;
            }
Example #34
0
 public bool IsPong(SExpr sx)
 {
   return sx != null && sx.Name == ":name";
 }
Example #35
0
        public static TypeReference Function(SExpr sexp, TypeReference argumentType,
			TypeReference resultType)
        {
            return new _Function (sexp, argumentType, resultType);
        }
 public ArithVSExpr(VExpr V1, ArithSpec Op, SExpr S2)
 {
     this.V1 = V1;
     this.Op = Op;
     this.S2 = S2;
 }
Example #37
0
 public Return(SExpr sret)
 {
     sreturn = sret;
 }
Example #38
0
 /// <summary>
 /// Create a visual for a symbol S-expression.
 /// </summary>
 public static Visual Symbol(SExpr sexp)
 {
     return Label (((SExpr.Symbol)sexp).Name);
 }
Example #39
0
 public MemVRef(SExpr addr, string datatype = null)
 {
     this.addr     = addr;
     this.datatype = datatype;
 }
Example #40
0
 public Exchange(RegVRef reg, PointerIndex frame, SExpr addr) : this(reg, reg, frame, addr)
 {
 }
Example #41
0
 public static Expression Quoted(SExpr sexp, Expression quotedExpression)
 {
     return new _Quoted (sexp, quotedExpression);
 }
Example #42
0
        public static Expression Lambda(SExpr sexp, StrictList<VariableDefinition> parameters,
			Expression functionBody)
        {
            return new _Lambda (sexp, parameters, functionBody);
        }
Example #43
0
            public _Application(SExpr sexp, Expression function,
				StrictList<Expression> parameters)
                : base(sexp)
            {
                Function = function;
                Parameters = parameters;
            }
Example #44
0
 public TypeReference(SExpr sexp)
     : base(sexp)
 {
 }
Example #45
0
        public static Expression Let(SExpr sexp, VariableDefinition variable, Expression value, 
			Expression body)
        {
            return new _Let (sexp, variable, value, body);
        }
Example #46
0
        public static TypeReference Generic(SExpr sexp, Expression._Symbol typeName,
			StrictList<TypeReference> typeParams)
        {
            return new _Generic (sexp, typeName, typeParams);
        }
Example #47
0
        public static Expression LetRec(SExpr sexp, StrictList<Tuple<VariableDefinition, Expression>> definitions,
			Expression body)
        {
            return new _LetRec (sexp, definitions, body);
        }
Example #48
0
 public static Expression Literal(SExpr.Literal literal)
 {
     return new _Literal (literal);
 }
Example #49
0
 /// <summary>
 /// Parse an S-expression and generate the AST.
 /// </summary>
 public static Expression Parse(SExpr sexp)
 {
     return SExprParser.Expr ().Parse (Input.FromSExpr (sexp));
 }
Example #50
0
 public bool IsPong(SExpr sx)
 {
     return(sx != null && sx.Name == ":name");
 }
Example #51
0
        }                                                      //TODO: Maybe sometimes loaded?

        public ArrayVRef(string arrname, SExpr offset)
        {
            this.arrname = arrname;
            this.offset  = offset;
        }