Université de Rennes 1
EXAMEN DE CMPL
Vendredi 26 Avril 2019 à 14h
Durée : 2 heures
Notation : Exercice 1 = 4 points ; Exercice 2 = 6 points ; Exercice 3 = 10 points
Nombre de pages : 6 (dont la grammaire du langage Projet, rappelée page 6)
Seul document autorisé : résumé personnel au format A4 recto-verso
T Y a Y |
Y c | d R T
R eR f |
Cette grammaire est LL(1).
QUESTIONS
1.1 Donner les ensembles de prédiction Pred pour toutes les règles associées aux
non-terminaux X, T et R.
1/6
EXERCICE 2 (6 points) - Automate fini
On considère le langage rationnel L généré par la grammaire suivante :
<suite_fiches> ( <fiche> ; )* /
<fiche> <début_loc> | <fin_loc>
<début_loc> <client> <horaire>0/1 DEBUT <quantité_louée>
<quantité_louée> <qté> ADULTE <qté> ENFANT
| <qté> ADULTE | <qté> ENFANT
<client> ident
<horaire> nbentier HEURES
<qté> nbentier
<fin_loc> <client> <horaire>0/1 FIN
Les <horaire> concernent une même journée. Une fiche de début de location sans <horaire> cor-
respond à un début à 8h et une fiche de fin de location sans <horaire> correspond à une fin à 18h.
Pour faciliter la gestion du parc de vélos, on dispose de :
private static class InfosClient {
public int heureD, qteA, qteE ; // heure de début, nb vélos adultes et nb vélos enfant loués
}
private static void debuterLoc ( int nId, InfosClient infoC) {
/ met à jour la structure de données nécessaire à la mémorisation des informations de
location infoC liées au client de numId nId /
}
private static InfosClient recupInfos (int nId) {
/ retourne les informations de location mémorisées pour le client de numId nId /
}
On dispose aussi des attributs lexicaux Lex.valNb (associé à nbentier), Lex.numId (associé à
ident) et de la procédure Lex.repId(int numId) qui permet d’obtenir la chaîne associée à un
numId.
Les fiches sont supposées sans erreur et aucun contrôle n’est demandé dans les
actions.
QUESTIONS
Exemple :
Grazon DEBUT 3 ADULTE 1 ENFANT ; Masson 10 HEURES DEBUT 8 ADULTE ;
Grazon 14 HEURES FIN ; Girard 15 HEURES DEBUT 6 ADULTE ; Girard FIN /
signifie ce qui suit
Grazon : a loué 3 vélos adulte et 1 vélo enfant de 8h à 14h (soit 6h)
et doit payer 3x6x4+1x6x2 = 84€,
Girard : a loué 6 vélos adulte de 15h à 18h (soit 3h)
et doit payer 6x3x4 = 72€,
à la fin de la journée, 8 vélos adulte n’ont pas été ramenés.
4/6
primaire : ’croissant’ ’(’ expression ( ’,’ expression )+ ’)’ ;
PileExec
val2 = empile
5/6
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 ’ ;
6/6