Informatique et recherche
opérationnelle
IFT2030

Concepts des langages de programmation

Automne 2002


Accueil

Professeur et
Démonstrateurs

Horaires et locaux

Notes de cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Démonstration 4: Révisions C/C++ (Application au TP1)

Pas de "baratin" cette semaine, les démonstrateurs vous parlerons à nouveau de pointeurs et de structures, mais cette fois-ci avec un exemple qui pourrait vous servir dans la réalisation de l'étape 3 de votre TP1.

Travail pratique (pas noté mais fortement recommandé)

1) MINI Analyseur syntaxique

Mettez les principes vus en cours en application en écrivant:
  • un mini-mini analyseur lexical,
  • un mini-mini analyseur syntaxique,
pour la grammaire BNF suivante:
S -> (S)S
S ->

Votre programme se contentera de demander à l'utilisateur de saisir une expression qui sera analysée (en accord avec la grammaire) de manière à décider si l'expression est valide ou pas.

2) Table de symboles

Écoutez ce que vos démonstrateurs vont vous expliquer (c'est une consigne qui ne s'applique pas qu'à cet exercice :-), et "faites de cela" une classe C++ (ou alternativement un programme C standard) qui répondra aux besoins de l'étape 3 du TP1. Voici le squelette de la classe TableSymbole dont il sera question dans la démonstration théorique:
class TableSymbole {

  private: 
    // va vous regarde

  public:
    // les constructeurs que vous voulez
    // un destructeur (si necessaire)

    /**
     * ajoute l'identificateur de variable dans la table
     * de symboles
     */
    void addVariable(const string& identificateur);

    /**
     * @param bi borne inferieure du tableau
     * @param bs borne superieure du tableau
     * ajoute l'identificateur de tableau dans la table
     * de symboles. 
     */
    void addTableau(const string& identificateur, int bi, int bs);

    /**
     * @param nbArgs le nb d'arguments de la méthode
     * ajoute l'identificateur de fonction dans la table
     * de symboles. 
     */
    void addFonction(const string& identificateur, int nbArgs);

    /**
     * @param identificateur dont on veut l'info
     * @return true si l'identificateur est dans la table
     */
    bool isInTable(const string& identificateur);

    /**
     * @param identificateur dont on veut l'info
     * @return true si l'identificateur est un identificateur de variable
     */
    bool isVariable(const string& identificateur);

    /**
     * @param identificateur dont on veut l'info
     * @param bi borne inf du tableau (si la réponse est true) 
     * @param bs borne sup du tableau (si la réponse est true) 
     * @return true si l'identificateur est un identificateur de tableau
     *         met a jour bi et bs le cas échéant
     */
    bool isTable(const string& identificateur, int& bi, int &bs);

    /**
     * @param identificateur dont on veut l'info
     * @param nbArg le nombre d'arg. de la fonction (si la réponse est true) 
     * @return true si l'identificateur est un identificateur de fonction
     */
    bool isFonction(const string& identificateur, int& nbArg);

    /**
     * @param out le flux de sortie 
     * @param tableSymbole reference sur la table a afficher
     * afficher sur out la table de symbole passee en reference
     */
    friend ostream& operator<< (ostream& out, const TableSymbole & table);
};
[top]


Dernière mise à jour : Tue Oct 8 13:07:12 EDT 2002
dift2030@iro.umontreal.ca