Пример #1
0
    def expression(self):
        me = Trees.Tree()
        if self.Tok.type == "ID":
            # aR'
            # semantic: check table for id
            me.addNextOperand(self.Tok)
            if self.Works[self.boi + 1].dataC != "(":
                symb = self.Table.getSymbol(self.Tok.dataC)
            else:
                symb = self.Table.getFuncSymbol(self.Tok.dataC)
            self.sDict[
                "ID"] = self.Tok.dataC  # capture ID #add to druple maybe
            # accept: ID
            self.accept(self.Tok.type, "ID")
            expr = self.expression_prime(me)
            last = self.createInstruct(me.root)
            return self.testExpression([symb, expr]), (last, me.root)
        elif self.Tok.type == "INTEGER" or self.Tok.type == "FLOAT":
            # bX'V'T'
            me.root = Trees.TreeNode(self.Tok)
            if self.Tok.type == "FLOAT":
                type = "float"
            else:
                type = "int"
            num = Symbol(type, "NUM", self.Tok.dataC)
            # accept: NUM
            self.accept(self.Tok.type, self.Tok.type)
            term = self.term_prime(me)
            adde = self.additive_expression_prime(me)
            sime = self.ok_expression_prime(me)
            last = self.createInstruct(me.root)
            return self.testExpression([num, term, adde,
                                        sime]), (last, me.root)
        elif self.Tok.dataC == "(":
            # accept: (
            self.accept(self.Tok.dataC, "(")
            expr = self.expression()
            last = expr[1][1]
            expr = expr[0]

            if self.Tok.dataC == ")":
                # accept: )
                self.accept(self.Tok.dataC, ")")
                term = self.term_prime(me)
                adde = self.additive_expression_prime(me)
                sime = self.ok_expression_prime(me)
                last = self.createInstruct(me.root)
                return self.testExpression([expr, term, adde,
                                            sime]), (last, me.root)
        print("REJECT")
        sys.exit(0)