statement   : assign_statement
                    | expression
                    | control
                    | empty
        Feature For Loop adds:
                    | loop
        Feature Func adds:
                    | func
                    | return statement

def statement(self):
        """
        statement   : assign_statement
                    | expression
                    | control
                    | empty
        Feature For Loop adds:
                    | loop
        Feature Func adds:
                    | func
                    | return statement
        """
        if self.cur_token.type == TokenTypes.VAR:
            self.tokenizer.start_saving(self.cur_token)
            self.variable()
            peek_var = self.cur_token
            self.tokenizer.replay()
            self.eat()
            if peek_var.type == TokenTypes.ASSIGN:
                return self.assign_statement()
            else:
                return self.expression()
        elif self.cur_token.type in TokenTypes.control(self.features):
            return self.control()
        elif self.cur_token.type in TokenTypes.loop(self.features):
            return self.loop()
        elif self.cur_token.type in TokenTypes.func(self.features):
            if self.cur_token.type == TokenTypes.FUNC:
                return self.func()
            elif self.cur_token.type == TokenTypes.RETURN:
                return self.return_statement()
        self.error("Invalid token or unfinished statement")