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] |