Université de Rennes 1
EXAMEN DE CMPL
Jeudi 16 juin 2016 à 8h
Durée : 2 heures
Notation : Exercice 1 = 5 points ; Exercice 2 = 7 points ; Exercice 3 = 3 points ;
Exercice 4= 5 points
Nombre de pages : 5 (4 pages de sujet + 1 page grammaire langage Projet)
Seul document autorisé : résumé personnel au format A4 recto-verso
1/5
EXERCICE 2 (7 points) - Compilation
qui possède la même sémantique que l’instruction do ... while de Java (arrêt
de l’itération lorsque expression vaut faux).
Placer les points de génération et donner les traitements associés (code
MAPILE produit et/ou contrôles éventuels) nécessaires à la compilation de
insrepeter.
2/5
2.3 On ajoute la règle :
primaire :
’somme_ou_prod’ ’(’ expression (’,’ expression ) ’,’ (’’ | ’’) ’)’;
où somme_ou_prod ( e1 , e2 , ... , en , ) délivre la somme des n expressions
entières ei. Ainsi, somme_ou_prod ( 3, 5, 72, 10, ) délivre 27,
et somme_ou_prod ( e1 , e2 , ... , en , ) délivre le produit des n expressions
entières ei. Ainsi, somme_ou_prod ( 3, 5, 72, 10, ) délivre 1350.
module m :
def p1, p2 ;
ref q1, q2 fixe (bool) mod (ent) ;
const n = 10 ; b = faux ;
var ent x, y ;
proc p1 mod (ent y)
ADD
var ent x ;
ADD
debut ADD exp3
lire (x) ; ADD exp4
y := xn ; exp5
nbExp == 3 EMPILER exp5
q2 (b) (y) ; EMPILER exp4
exp 4 + exp5
QUESTION
Donner le programme objet m.gen et la liste transExt obtenus en compilant le
module m.
On ne demande pas le descripteur m.desc.
3/5
EXERCICE 4 (5 points) - Automate fini
QUESTIONS
4/5
Grammaire du langage PROJET :
unite : unitprog | unitmodule ;
unitprog :: ’ programme ’ ident ’ : ’ declarations corps ;
unitmodule :: ’ module ’ ident ’ : ’ declarations ;
declarations : partiedef ? partieref ?
consts ?
vars ?
decprocs ? ;
partiedef : ’ def ’ ident ( ’ , ’ ident ) ptvg ;
partieref : ’ ref ’ specif ( ’ , ’ specif ) ptvg ;
specif : ident ( ’ fixe ’ ’ ( ’ type ( ’ , ’ type ) ’ ) ’ ) ?
( ’ mod ’ ’ ( ’ type ( ’ , ’ type ) ’ ) ’ ) ? ;
consts : ’ const ’ ( ident ’ = ’ valeur ptvg )+ ;
vars : ’ var ’ ( type ident ( ’ , ’ ident ) ptvg )+ ;
type : ’ ent ’ | ’ bool ’ ;
decprocs : ( decproc ptvg )+ ;
decproc : ’ proc ’ ident parfixe ? parmod ?
consts ? vars ?
corps ;
ptvg : ’;’ | ;
corps : ’ debut ’ instructions ’ fin ’ ;
parfixe : ’ fixe ’ ’ ( ’ pf ( ’; ’ pf ) ’ ) ’ ;
pf : type ident ( ’ , ’ ident ) ;
parmod : ’ mod ’ ’ ( ’ pm ( ’ ; ’ pm ) ’ ) ’ ;
pm : type ident ( ’ , ’ ident ) ;
instructions : instruction ( ’ ; ’ instruction ) ;
instruction : inssi | inscond
| boucle
| lecture | ecriture
| affouappel
| ;
inssi : ’ si ’ expression ’ alors ’ instructions
( ’ sinon ’ instructions )?
’ fsi ’ ;
inscond : ’ cond ’ expression ’ : ’ instructions
( ’ , ’ expression ’ : ’ instructions )
( ’ aut ’ instructions )? ’ fcond ’ ;
boucle : ’ ttq ’ expression ’ faire ’ instructions ’ fait ’ ;
lecture : ’ lire ’ ’ ( ’ ident ( ’ , ’ ident ) ’) ’ ;
ecriture : ’ ecrire ’ ’ ( ’ expression ( ’ , ’ expression ) ’ ) ’ ;
affouappel : ident ( ’ := ’ expression
| ( effixes ( effmods )? )?
) ;
effixes : ’ ( ’ ( expression ( ’ , ’ expression ) )? ’ ) ’ ;
effmods : ’ ( ’ ( ident ( ’ , ’ ident ) )? ’ ) ’ ;
expression : exp1 ( ’ ou ’ exp1 )* ;
exp1 : exp2 ( ’ et ’ exp2 )* ;
exp2 : ’ non ’ exp2 | exp3 ;
exp3 : exp4 ( ’ = ’ exp4 | ’ <> ’ exp4
| ’ > ’ exp4 | ’ >= ’ exp4
| ’ < ’ exp4 | ’ <= ’ exp4
)? ;
exp4 : exp5 ( ’ ’ exp5 | ’ ’ exp5 )* ;
exp5 : primaire ( ’ ’ primaire | ’ div ’ primaire )* ;
primaire : valeur | ident | ’ ( ’ expression ’ ) ’ ;
valeur : nbentier | ’ ’ nbentier | ’ ’ nbentier | ’ vrai ’ | ’ faux ’ ;
5/5