Master Informatique
Option Compilation
TD mardi 15 février
Analyse lexicale/syntaxique en (f)lex

  1. Si vous n'avez pas déjà maîtrisé flex, finir les exercices de la semaine dernière avant de regarder les corrigés en ~robson/compilation.
    Ecrire un fichier complet flex qui effectue l'opération sur un programme C:

    1. afficher le nombre de ``;'' (mais pas ceux qui sont inclus en commentaires ou chaînes de caractères)
    2. afficher les mots réservés utilisés
    3. supprimer tout l'espace blanc inutile et ajouter une indentation raisonnable
  2. Analyse syntaxique descendante par descente récursive:
    En utilisant flex (et en particulier la possibilité de renvoyer un résultat de yylex à une autre fonction qui pourra ensuite rappeler yylex; voir page 9 de la man), écrire une analyseur par descente récursive pour des expressions arithmétiques comme celles de C.

    1. D'abord un analyseur simple pour des expressions construites de constantes et identificateurs en n'utilisant que des multiplications,
    2. ensuite ajouter les autres opérateurs et les parenthèses,
    3. et enfin modifier l'analyseur afin d'afficher la version postfixe de l'expression (sans parenthèses),
    4. Et, si vous avez du temps, ajouter à la version postfixe une indication, pour chaque identificateur, constante et opération arithmétique, du registre à utiliser (dans une machine avec registres numérotés à partir de 0, où chaque opération prend deux valeurs stockées en registres et produit un résultat dans un registre; on essayera de minimiser le nombre de registres utilisés sans changer l'ordre des calculs).

    Il faut noter qu'une grammaire possible pour les expressions est la suivante:

    E ::= T | E addop T
    T ::= F | T mulop F
    F ::= constante | identificateur | ( E )
    addop :: + | -
    mulop ::= * | /




File translated from TEX by TTH, version 3.05.
On 14 Feb 2005, 17:05.