Introduction aux Systèmes d’Exploitation

Page 1 sur 3Lecteur de document UniversityLib

Introduction aux Systèmes d’Exploitation

Programming, Math, Lexical Analysis, Syntax Analysis, Semantic Analysis · course

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.