code: def statement(self):
          
          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")
docs: statement   : assign_statement
                      | expression
                      | control
                      | empty
          Feature For Loop adds:
                      | loop
          Feature Func adds:
                      | func
                      | return statement