Ecole Nationale des Sciences
de l'Informatique
Introduction aux Systèmes d’Exploitation
M. SELLAMI
TD : Chaine de production de programmes
Exercice 1 : Analyse des langages
Soit le langage suivant :
<programme> ::= PROGRAM <identificateur> <suite de phrases> FIN
<suite de phrases> ::= <phrase> | <phrase><suite de phrases>
<phrase> ::= <déclaration> ; | <instruction> ;
<déclaration> ::= <identificateur> : <type>
<type>::= réel | entier
<instruction> ::= <identificateur> = <expression>
<expression> ::= <facteur> { + | - } <expression> | <facteur>
<facteur> ::= <terme> { * | / } <facteur> | <terme>
<terme> ::= <identificateur> | <nombre> | ( <expression> )
<nombre> ::= <nombre entier> | <nombre réel>
De ces règles, on peut déduire qu’un tel langage contient déjà les unités lexicales
suivantes:
= + - * / ( ) réel entier PROGRAM FIN ; :
De plus, les identificateurs sont des unités lexicales constituées d’une lettre. Les nombres entiers sont des
unités lexicales constituées d’un chiffre et les nombres réels sont des unités lexicales constituées de deux
chiffres séparés par une virgule. Ceci peut donc se décrire comme suit:
<nombre entier> ::= <chiffre>
<nombre réel> ::= <chiffre> , <chiffre>
<identificateur> ::= <lettre>
<chiffre> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Publicité
<lettre> ::= A | B ... | Z
L'espace (blanc) est sans signification, mais ne peut se trouver à l’intérieur
d’une unité lexicale.
Les espaces ne peuvent se trouver à l'intérieur d'une unité lexicale, et n'ont pas de signification. Une
instruction doit se trouver toute entière sur une même ligne, et une ligne ne peut contenir qu'une seule
instruction.
1. On s'intéresse d’abord à l'analyse lexicale. Présentez le découpage en unités lexicales en enfermant
celles-ci dans des rectangles. Donner le résultat fourni par l'analyseur lexical pour les lignes
suivantes, en justifiant votre raisonnement. Signalez les éventuelles erreurs lexicales.
PROGRAM X
A : entier $
C : réel ;
C = 3 * C + 12 / (A + 3) ;
C = 3,5 + C * 2 ;
D : entier ;
b = 3 * C 1
FIN
2. Donner le résultat de l’analyse syntaxique sur les 4 lignes suivantes, en justifiant votre raisonnement.
C = 3 * C + 12 / (A + 3) ;
C = 3,5 + C * 2 ;
D : entier ;
B = 3 * C 1
On exprimera cette analyse sous la forme d’arbres de syntaxe.
3. Analyse sémantique.
L'analyse sémantique doit vérifier pour notre langage, les règles suivantes :
• Tout identificateur, utilisé dans une instruction, doit être déclaré.
• Tout identificateur déclaré doit être utilisé dans une instruction ;
Publicité
• Dans une instruction, si l'identificateur à gauche de "=" est déclaré de type "entier" alors l’expression à
droite ne doit comporter que des valeurs entières. De même, si l'identificateur à gauche de "=" est déclaré de
type "réel" alors alors l’expression à droite ne doit comporter que des valeurs réelles.
.
votre réponse.
• Quelles sont les erreurs signalées par l'analyse sémantique pour notre programme corrigé ? Justifiez
PROGRAM X
A : entier ;
C : réel ;
C = 3 * C + 12 / (A + 3) ;
C = 3,5 + C * 2 ;
D : entier ;
B = 3 * C ;
FIN
Exercice 2 : Edition des liens
On dispose d'un ensemble de modules définis comme suit:
module GERER_ABONNEMENT taille 410
liens à satisfaire CREER_ABONNE
RECHERCHER_ABONNE
PAYER_ABONNEMENT
TROUVER_LIVRE
TROUVER_DVD
liens utilisables ENREGISTRER 212
RENDRE 321
adresse de lancement 100
module GERER_ABONNE taille 1132
liens utilisables CREER_ABONNE 212
Publicité
RECHERCHER_ABONNE 620
DETRUIRE_ABONNE 1010
liens à satisfaire ENVOYER_COURRIER
IMPRIMER_CARTE
module ENTREES_SORTIES taille 750
liens utilisables ENVOYER_COURRIER 120
IMPRIMER_CARTE 324
EDITER_FACTURE 612
module GERER_FOND
taille 1022
liens utilisables TROUVER_LIVRE 340
TROUVER_DVD 514
CREER_LIVRE 1011
module CAISSE taille 200
liens utilisables PAYER_ABONNEMENT 124
liens à satisfaire IMPRIMER_FACTURE
On effectue l'édition de liens de tous ces modules. Donnez en justifiant brièvement votre réponse:
.
.
.
.
• les adresses d'implantation de ces modules,
• la taille totale du programme résultant,
• la table des liens,
• l'adresse de lancement du programme résultant.
L’édition des liens est-elle correcte ? Justifiez votre réponse.