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
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, ";")
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()