Beispiel #1
0
 def visitCons(self, elem):
     return C.Cons()
Beispiel #2
0
 def visitHead(self, elem):
     return C.Head()
Beispiel #3
0
 def visitLambda(self, elem):
     s = elem.head.s
     return C.Lambda(elem.head, self(elem.body))
Beispiel #4
0
 def visitNil(self, elem):
     return C.Nil()
Beispiel #5
0
 def visitString(self, elem):
     return C.String(elem.s)
Beispiel #6
0
 def visitLambda(self, elem):
     return C.Lambda(self(elem.head), self(elem.body))
Beispiel #7
0
 def visitSeq(self, elem):
     return C.Seq()
Beispiel #8
0
 def visitInteger(self, elem):
     return C.Number(elem.n)
Beispiel #9
0
 def visitTRUE(self, elem):
     return C.TRUE()
Beispiel #10
0
 def visitIf(self, elem):
     return C.If()
Beispiel #11
0
 def visitFALSE(self, elem):
     return C.FALSE()
Beispiel #12
0
 def visitBottom(self, elem):
     return C.Bottom()
Beispiel #13
0
 def visitApply(self, elem):
     self_copy = copy.deepcopy(self)
     return C.Apply(self_copy(elem.left), self_copy(elem.right))
Beispiel #14
0
 def visitTail(self, elem):
     return C.Tail()
Beispiel #15
0
 def visitAdd(self, elem):
     return C.Add()
Beispiel #16
0
 def visitLet(self, elem):
     # return self(T.Apply(T.Lambda(elem.var, elem.expr), elem.val))
     # return self(T.Apply(T.Lambda(elem.var, elem.expr), T.Apply(Y, T.Lambda(elem.var, elem.val))))
     return C.Letrec([self(x) for x in elem.vars],
                     [self(x) for x in elem.vals], self(elem.expr))
Beispiel #17
0
 def visitMult(self, elem):
     return C.Mult()
Beispiel #18
0
 def visitFloat(self, elem):
     return C.Number(elem.n)
Beispiel #19
0
 def visitEqual(self, elem):
     return C.Equal()
Beispiel #20
0
 def visitApply(self, elem):
     return C.Apply(self(elem.left), self(elem.right))
Beispiel #21
0
 def visitSub(self, elem):
     return C.Sub()
Beispiel #22
0
 def visitVariable(self, elem):
     if elem.s == "_|_":
         return C.Bottom()
     elif elem.s == "*":
         return C.Mult()
     elif elem.s == '+':
         return C.Add()
     elif elem.s == "-":
         return C.Sub()
     elif elem.s == "if":
         return C.If()
     elif elem.s == "==":
         return C.Equal()
     elif elem.s == "!=":
         return C.NEqual()
     elif elem.s == "head":
         return C.Head()
     elif elem.s == "tail":
         return C.Tail()
     elif elem.s == "seq":
         return C.Seq()
     elif elem.s == "Cons":
         return C.Cons()
     elif elem.s == "Nil":
         return C.Nil()
     elif elem.s == "null":
         return C.Null()
     elif elem.s == "True":
         return C.TRUE()
     elif elem.s == "False":
         return C.FALSE()
     elif elem.s == "concat":
         return C.Concat()
     return C.Variable(elem.s)
Beispiel #23
0
 def visitVariable(self, elem):
     return C.Variable(elem.s)