Ce document a été produit par HEVEA.
Votre browser peut avoir a être configuré pour afficher correctement certains symboles.
Reportez-vous à la
documentation d'HEVEA.

Maîtrise d'informatique
Module de Projet 1

Examen -- Compilateur Pascal

Philippe Marquet

Janvier 1997

Documents autorisés --- Durée : 2 heures

Ce document est disponible sous forme d'un fichier PostScript compressé.





On introduit dans le langage PP1 (grammaire page 26 du polycopié) l'instruction de contrôle compare suivante :

INST ::= ... | COMPARE | ...
COMPARE ::= compare ID with EXPR : RELOP : INST ; { RELOP : INST ; } end

La sémantique de l'instruction compare est la suivante. On compare la valeur de l'identificateur ID et celle de l'expression EXPR successivement grâce aux opérateurs RELOP rencontrés. Dès qu'une comparaison donne vrai, l'instruction INST correspondante est exécutée et on sort du compare. Si aucune des comparaisons ne donne vrai, on ne fait rien.

Exemple :
        compare I with MAX : 
          > : I := MAX ; 
          < : 
            compare I with MIN
              < : I := MIN ;
            end ; 
        end

Exercice 1  [Analyse syntaxique]   Donner une procédure d'analyse syntaxique pour l'instruction compare.

Exercice 2  [Précision sémantique]   Préciser une sémantique de l'instruction compare ; en particulier au regard de l'évaluation de la variable ID et de l'expresion EXPR.

Exercice 3  [Schéma de génération de P-Code]   Donner la structure de P-Code à générer pour une instruction compare et schématiser l'évolution de la pile lors de l'exécution d'une telle instruction de contrôle.

Exercice 4  [Traduction en P-Code]   Traduire en P-Code le programme de la figure 1.

program dicho ;
const RUNNING = 9 ; TERMINE = 11 ; 
var sup, inf, val, essai, recherche ; 
begin 
  sup := 1000 ; inf := 0 ; 
  recherche = RUNNING ; 
  read (val) ; 
  while recherche <> TERMINE do begin
    write (sup) ; write (inf) ; 
    essai = (sup+inf)/2 ; 
    compare val with essai 
      < : sup := essai-1 ; 
      = : recherche := TERMINE ; 
      > : inf := essai+1 ; 
    end ;
  end ;
  write (essai) ;
end . 

Figure 1 : Programme à traduire en P-Code



Exercice 5  [Génération de code]   Étendre la procédure d'analyse syntaxique de l'exercice 1 pour y inclure les instructions de génération de P-Code.


Ce document a été traduit de LATEX par HEVEA.