예제 #1
0
 def visitCons(self, elem):
     return C.Cons()
예제 #2
0
 def visitHead(self, elem):
     return C.Head()
예제 #3
0
 def visitLambda(self, elem):
     s = elem.head.s
     return C.Lambda(elem.head, self(elem.body))
예제 #4
0
 def visitNil(self, elem):
     return C.Nil()
예제 #5
0
 def visitString(self, elem):
     return C.String(elem.s)
예제 #6
0
 def visitLambda(self, elem):
     return C.Lambda(self(elem.head), self(elem.body))
예제 #7
0
 def visitSeq(self, elem):
     return C.Seq()
예제 #8
0
 def visitInteger(self, elem):
     return C.Number(elem.n)
예제 #9
0
 def visitTRUE(self, elem):
     return C.TRUE()
예제 #10
0
 def visitIf(self, elem):
     return C.If()
예제 #11
0
 def visitFALSE(self, elem):
     return C.FALSE()
예제 #12
0
 def visitBottom(self, elem):
     return C.Bottom()
예제 #13
0
 def visitApply(self, elem):
     self_copy = copy.deepcopy(self)
     return C.Apply(self_copy(elem.left), self_copy(elem.right))
예제 #14
0
 def visitTail(self, elem):
     return C.Tail()
예제 #15
0
 def visitAdd(self, elem):
     return C.Add()
예제 #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))
예제 #17
0
 def visitMult(self, elem):
     return C.Mult()
예제 #18
0
 def visitFloat(self, elem):
     return C.Number(elem.n)
예제 #19
0
 def visitEqual(self, elem):
     return C.Equal()
예제 #20
0
 def visitApply(self, elem):
     return C.Apply(self(elem.left), self(elem.right))
예제 #21
0
 def visitSub(self, elem):
     return C.Sub()
예제 #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)
예제 #23
0
 def visitVariable(self, elem):
     return C.Variable(elem.s)