Beispiel #1
0
 def parse(self,c):
     c.pushcode(code.push_int(0))
     c.pushcode(code.variable("arg"))
     c.pushcode(code.argument())
     while (self.t.checkNext()):
         self.Statement(c)
     return 0
Beispiel #2
0
 def Statement(self,c):
     n = self.t.checkNext()
     if (n == ";"):
         self.t.getNext()
         return
     elif (n == "{"):
         self.t.getNext()
         self.ParseBlock(c)
         return
     elif (n == "identifier"):
         self.t.getNext()
         if self.t.data == "if":
             self.ParseIf(c)
             return
         elif self.t.data == "for":
             self.ParseFor(c)
             return
         else:
             name = self.t.data
             if self.t.checkNext() == "(":
                 self.t.getNext()
                 arg = variable.variable()
                 if self.t.checkNext() == ")":
                     self.t.getNext()
                     arg.pushcode(code.push_null())
                 else:
                     self.Expression(arg, ")")
                 if self.t.checkNext() == "{":
                     self.t.getNext()
                     arg.pushcode(code.argument())
                     self.ParseBlock(arg)
                     c.index(name).assignment(arg)
                     return
                 c.pushcode(code.pop())
                 c.pushcode(code.variable(name))
                 c.x.code.c += arg.x.code.c
                 c.pushcode(code.call())
             else:
                 c.pushcode(code.pop())
                 c.pushcode(code.variable(name))
             self.getSuff(c)
             self.Expression(c, ";", True)
             return
     c.pushcode(code.pop())
     self.Expression(c, ";")
Beispiel #3
0
 def getterm(self,c):
     n = self.t.checkNext()
     if (n == "("):
         self.t.getNext()
         self.Expression(c, ")")
     elif (n == "-"):
         self.t.getNext()
         c.pushcode(code.minus())
         self.getterm(c)
     elif (n == "int"):
         self.t.getNext()
         c.pushcode(code.push_int(self.t.data))
         self.getSuff(c)
     elif (n == "string"):
         self.t.getNext()
         c.pushcode(code.push_string(self.t.data))
         self.getSuff(c)
     elif (n == "identifier"):
         self.t.getNext()
         c.pushcode(code.variable(self.t.data))
         self.getSuff(c)
     else:
         self.error("error!")
         self.t.getNext()