Correction du TP5

Introduction

Cette correction du TP5 est faite de manière incrémentale. Elle prend quelques libertés avec l’énoncé exact du TP5, pour préparer le TP6. Ce document ne contient qu’un plan rapide de la correction, qui sera faite en temps réel.

La correction du TP5 lui-même


  1. Création d’une pile simple.

  2. Opérateurs arithmétiques simples.

  3. La fonction tokenize.

  4. La fonction rpn (nommée eval dans l’énoncé).

Quelques améliorations


  1. Simplification: utilisation de la fonction apply_op et du module Python operator, par exemple op_add devient :
        def op_add(self):
            return self.apply_op(operator.__add__)
    


  2. Utilisation d’une table de hash pour les opérateurs, sans même passer par op_.

  3. Modification de tokenize pour utiliser la liste d’opérateurs en clé.

  4. Modification de rpn pour prendre en paramètres une chaine ou une liste.

Et pour les curieux


  1. Gestion du nombre d’arguments variables (attention, ça marche difficilement avec les operator.*, il faut ruser).

  2. Simplification: création d’une fonction stackify, op_add devient :
        op_add = stackify(operator.__add__)
    


  3. stackify est un décorateur.

  4. staticmethod pour tokenize.