Vous êtes sur la page 1sur 334

£ CEA-R-4991

2 COMMISSARIAT A L'ENERGIE ATOMIQUE

F 50

ETUDE D'UN LANGAGE ET REALISATION


D'UN SYSTEME DE SIMULATION NUMERIQUE
MUNI D'UNE DERIVATION FORMELLE
APPLICATIONS AUX REACTEURS NUCLEAIRES
AU LANGAGE-COMMANDE
ET AUX RESEAUX ELECTRONIQUES

par

Michel NAKHLE

Centre d'Etudes Nucléaires de Saclay

Rapport CEA-R-4991

1979
Ni*
SERVICE DE DOCUMENTATION
^ ^ M ^ ^ B ^ ^ H B ^ C.E.N - SACLAY B P n> 2, 91 190 - GIF-sur-YVETTE • France
PLAN DE CLASSIFICATION DES RAPPORTS ET BIBLIOGRAPHIES CEA
(Classification du système international de documentation nucléaire SIDON/INIS)

A II Physique théorique C 30 Utilisation des traceurs dans les sciences de la vie


A 12 Physique atomique et moléculaire C 40 Sciences de la vie : autres études
A 13 Physique de l'état condensé C 50 Radioprotection et environnement
A 14 Physique des plasmas et réactions thermonucléaires
A 15 Astrophysique, cosmologie et rayonnements cosmiques D 10 Isotopes et sources de rayonnements
A 16 Conversion directe d'énergie D 20 Applications des isotopes et des rayonnements
A 17 Physique des basses températures
A 20 Physique des hautes énergies E 11 Thermodynamique et mécanique des fluides
A 30 Physique neutronique et physique nucléaire E 12 Cryogénie
E 13 Installations pilotes et laboratoires
B (1 Analyse chimique et isotopique E 14 Explosions nucléaires
B 12 Chimie minérale, chimie organique et physico-chimie E 15 Installations pour manipulation de matériaux
B 13 Radiochimie et chimie nucléaire radioactifs
B 14 Chimie sous rayonnement E 16 Accélérateurs
B 15 Corrosion E 17 Essais des matériaux
B 16 Traitement du combustible E 20 Réacteurs nucléaires (en général)
B 21 Métaux et alliages (production et fabrication) E JO Réacteurs nucléaires (types)
B 22 Métaux et alliages (structure «i propriétés physiques) E 40 Instrumentation
B 23 Céramiques et cermets E SO Effluents et déchets radioactifs
B 24 Matières plastiques et autres matériaux
B 25 Effets des rayonnements sur les propriétés physiques F 10 Economie
des matériaux F 20 Législation nucléaire
B 30 Sciences de la terre F 30 Documentation nucléaire
F 40 Sauvegarde et contrôle
C 10 Action de l'irradiation externe en biologie F 50 Méthodes mathématiques et codes de calcul
C 20 Action des radioisotopes et leur cinétique F 60 Divers

Rapport CEA-R-4991

Cote-matière de ce rapport : F.50

DESCRIPTION-MATIERi Imots clefs exu.iits du thesaurus SIDON/INIS)

en français en anglais
LANGAGES DE PROGRAMMATION PROGRAMMING LANGUAGES
TRAITEMENT DE L'INFORMATION DATA PROCESSING
INFORMATION INFORMATION
CODES POUR ORDINATEURS COMPUTER CODES
LANGAGE PLI PLI LANGUAGE
EQUATIONS DE CINETIQUE DE REACTEUR REACTOR KINETICS EQUATIONS
GENERATEURS DE VAPEUR VAPOR GENERATORS
ORSAY
N° d'ordre
2102 T H E S E

PRESENTEE

A L'UNIVERSITE DE PARIS-SUD

CENTRE D'ORSAY

POUR OBTENIR

LE GRADE DE DOCTEUR ES SCIENCES (INFORMATIQUE)

Michel NAKHLE

ETUDE D'UN LANGAGE ET REALISATION D'UN SYSTEME


DE SIMULATION NUMERIQUE MUNI D'UNE DERIVATION FORMELLE
APPLICATIONS AUX REACTEURS NUCLEAIRES AU LANGAGE-COMMANDE
ET AUX RESEAUX ELECTRONIQUES

Soutenus le 16 février 1979, devant la Commission d'Examen

MM. L. MALAVARD Président


P. DEBRAINE
A. LAPLACE
Y. MONSEF Examinateurs
B. PICINBONO
J. POTTIER
J. VIGNES
A. BONNEMAY Mambre invité

II'
- Rapport CEA-R-4991 -

Centre d'Etudes Nucléaires de Saday


Services d'Electronique de Saclay

ETUDE D'UN LANGAGE ET REALISATION D'UN SYSTEME


DE SIMULATION NUMERIQUE MUNI D'UNE DERIVATION FORMELLE
APPLICATIONS AUX REACTEURS NUCLEAIRES AU LANGAGE^OMMANDE
ET AUX RESEAUX ELECTRONIQUES

par

Michel NAKHLE

- Juin 1979 -
I

Je remercie vivement Monsieur le Professeur L. 14A.LA.VA.BD de n'avoir faiz l'hon-


neur de présider le jury ce cette thèse.

Monsieur le Professeur P. DE3PJ.INE a assuré la direction de ce travail ez n'a


cessé de me manifeszer sa bienveillanze azter.zion zcuz au long de son élabo-
razion. Je le prie de bien vouloir trouver l'expression de r,a profonde grczi-
zude.

Je remercie Monsieur le Professeur J. VI3VES pour l'inzérêz qu'il a manifeszé


d oe travail donz il a bien voulu être le Pappcrzeur, ainsi que Monsieur le
Professeur B. PICIWBOUO pour la richesse de son enseignement. Je scuhaize que
ce mémoire leur exprime ma reconnaissance ez je les remercie également de
l'honneur qu'ils me font de parziciper à. ce jury.

Que Monsieur A. LAPLACE^ Maître de Conférences à l'Université Paris XI qui t

m'a faiz l'honneur de juger ce zravail et a accepzê de faire pcrzie du juri^


trouve ici l'expression de ma gratitude.

Je remercie Monsieur J, FC??ZE?. adjoint au Chef des Services


t d'Electronique
de Saclay^ pour l'honneur qu'il me fait en participant i ce jur^.

Je remercie Monsieur 7. MOXSZF pour la bienveillance qu'il m'a manifestée


ez pour l'amitié qu'il m'a témoignée en accepzanz d'être membre du juri-.

Cette étude a été effeczuée dans d'excellenzes conditions mazérielles aux


Services d'Electronique de Saclay^ grâce à l'accueil bienveillanz de Monsieur
J. IvEILLj Chef des Services d'Electronique de Scclcj i et de Monsieur j ' . A:JPA>!3

Chef du Service d'Instrumentation pour le Recherche. Qu'ils zrcuvenz ici


l'expression de ma profonde grazizude.
II

Monsieur B. De COSNAC adjoint au Chef du Service d'Instrumentation


t pour ta
Reoherahe a suivi pas â pas l'avance de cette étude et en a permis le succès.
3

Je tiens à lui dire combien j'ai apprécié de travailler sous sa direction. Je


le remercie également pour son soutien constant et ses conseils précieux.

Je dois une reconnaissance particulière â Monsieur A. BCNITEMAZ pour tout le


bénéfice que j'ai trouvé dans notre collaboration et dans les nombreuses discus-
sions que nous avons eues.

J'adresse mes plus vifs remerciements â Monsieur P. ROUX et à Madame V. SON


pour leur collaboration et leur encouragement,

Que Madame ?. CzAFAAVIU, Madame J. rjR1LZ'dNZ?. Madame M. DZUlC'àZRZ, Madame M.


3

SOffUIGS es Madone 7. FERREIRA trouvent ici l'expression de ne gratitude.

Je remercie ici tous ceux qui m'ont aidé à la réalisation de ce travail 3 qu'il
3'agisse de la direction des S.E.S. ou de mes collègues dont la présence four-
nit un environnement indispensable et apprécié.

Je voudrais pourtant, en précisant que tous les défauts de ce mémoire sont miens,
témoigner ma reconnaissance d Mademoiselle C. 3UFFET et â zous ceux qui m'ont
aidé en lisant le manuscrit tout en me faisant part de leur critique.

Je suis redevable à mes parents, non seulement des études générales et scienti-
fiques que j'ai pu accomplir, mais encore de leur appui et de leur affection.
Ce sont des remerciements très profonds que je veux leia* adresser dans ce mémoire.

Je remercie Madame 30NGVET qui a frappé et réalisé la mise en page de ce rapport.

Le service de la doeûmentatzon 'a assuré avec le sciix qui' luï est oout-.jrler } ^a.
publication de cette t^.ese; qu'il en scit ici remercié.

H
TABLE DES MATIERE3

ir.orccuc-icr.

Préliminaires

Chapitre 1 : ::E?TO;IX de
-es equations ?.içrecrc-ai
Chapitre II Etape ce c o - p i l a t i c n , p = 37
Chapitre :îl Etape ce c c n p i l a - i o n , pa r t i e svr.tnese
Chapitre IV Etape d'ordonr.ar.carr.enc-t raduccicr.-crêcc 211
Chapitre V Sxe.T^Ies 259

Conclusion

Annexe h : Messages d'erreur

Annexe 3 : Procédures d'exploita-ion

Annexe C : Productions de "Icyd-Eva.-


i-= = ?.CG?A> !

procrarr-.as -e
CEA-R-4991 - NAKHLE Michel
ETUDE D'UN LANGAGE ET REALISATION D'UN SYSTEME DE SIMULATION NUMERIQUE
MUNI D'UNE DERIVATION FORMELLE - APPLICATION AUX REACTEURS NUCLEAIRES
AU LANGAGE COMMANDE ET AUX RESEAUX F.LECTRONIQUES.
Somma ire. - L'étude en simulation d'un système physique ne peut se
faire que sur le modèle mathématique approchant au mieux ce système
physique. Par ailleurs, l'expérience montre que la plupart des organes
qui constituent les systèmes sont variables avec le temps et non
linéaires. De plus, les Equations décrivant ces organes sont a constantes
de temps très séparées et ont un rang élevé.L'objet de cette étude est
de décrire le langage et le système NEPTUNIX de résolution des systè-
mes algébro-différentiels non linéaires, une partie des algorithmes
utilisés ainsi que certaines applications â la simulation des réacteur*
nucléaires et des systèmes mécaniques. NEPTUNIX admet les équations
du système à simuler sous la forme directe suivante : f (x, *, t) = 0
très proche du langage mathématique. De plus, le calcul du jacobien
associé, nécessaire à l'algorithme d'intégration, est fait automatique-
ment, par dérivation formelle (sous forme symbolique], évitant ainsi,
pour les grands systèmes le calcul du jacobien par differentiation ou
encore le calcul du jacobien de façon manuelle, tâche à la fois fasti-
dieuse et génératrice d'erreurs. Le jacobien ainsi calculé est obtenu

CEA-R-4991 - NAKHLE Michel


A PROGRAMMING LANGUAGE STUDY AND AN IMPLEMENTATION OF A SIMULATION
SYSTEM WITH FORMAL DERIVATION. APPLICATION TO NUCLEAR REACTORS, CONTROL
SYSTEMS AND ELECTRONIC NETWORKS.
Summary.- Physical systems simulation requires a lot of information
about the controlled process, and the mathematical approach must be
appropriate. On the other hand, the parameters describing most systems
components are nonlinear and time dependent, Moreover the differential
equations describing them are "stiff" equations of high order. The
scope of the study is the description of the NEPTUNrX language and the
NEPTUNIX package capable of solving mixed nonlinear algebraic and
differential equations. Most of the algorithms used, and the programs
implementing these algorithms, are dealt vith. Examples of nuclear
reactors and mechanical processes simulation are investigated. NEPTUNIX
handles a given mathematical description of a continuous system such
as : f (x, x, t) - O.Even more, symbolic derivation is performed
automatically in order to compute the jacobian associated with the
system, requisite for the numerical integration. So, for large systems
the manual method for computing the jacobian and the classical method
of differentiation are avoided, the former being tiresome and consu-
ming of human time and the latter being costly in run time. The jaco-

../..
sous forme de " t a b l e a u x c r e u x " , c ' e s t - S - d i r e que s e u l s l e s éléments
non n u l s s o n t pTis en compte. Une h i é r a r c h i e e s t a t t r i b u é e de façon
automatique aux éléments du j a c o b i e n et e x p l o i t é e au niveau de l'exécu-
t i o n . Ce t r a i t e m e n t , pour un modèle topologiquement i n v a r i a n t , n ' e s t
e f f e c t u é qu'une s e u l e f o i s e t sauvegardé s u r un support informatique
convenable, p r ê t il ê t r e u t i l i s é pour p l u s i e u r s s i m u l a t i o n s s u c c e s s i v e s

1979 341 p .

Commissariat â L'Energ ie Atomique - Franct

bian e v a l u a t e d in t h i s way i s d e a l t w i t h , by t h e approach of s p a r s e


m a t r i c e s , Every element of t h i s matrix i s assigned a type a t t r i b u t e
t o improve time e x e c u t i o n . Moreover, t h i s is done only once, for a
p h y s i c a l system which i s d e s c r i b e d by a rai t h e m a t i c a l model which
topology i s i n v a r i a n t , The r e s u l t s of t h i . p r o c e s s are saved on a
s u i t a b l e deyice ready for performing repea ted s i m u l a t i o n s ,

1979 34 1 p .

Commissariat â l ' E n e r g i e Atomique - France


A toutes celles et â tous ceux qui ont
fait de mon cheminement dans le traite-
ment de l'information une merveilleuse
promenade, je didie cette thèse.
Puissions-nous continuer â extraire de
l'information qui emplit notre vie, la
seule information vraiment valable: la
JOIE DE LA COMMUNICATION.

"Lzi uni itizi'-t oui z'aî :;.'. caidtj:;,


iii aattil di.ii.ixt i'-xz c' Lit un ociiiK.
ai liîtt, ".'ut -MI ciui..."
Linza. Vil '.'.lit;
1
- 1 -

INTRODUCTION

Dans le but de répondre à une acquisition et à un traitement


d'informations de plus en plus nombreuses, les machines de traitement
de l'information ont vu le jour.
U n ordinateur électronique n'est capable d'exécuter des opé-
rations de traitement de l'information que lorsqu'il en reçoit l'ordre.
Sans "programme" ou suite d'ordres, il s'avère inutile. Le "programme"
peut être câblé, enregistré ou les deux à la fois.
Comme la langue est l'un des moyens permettant aux hommes de
faciliter la propagation de leurs idées, le langage permet à l'homme
de communiquer avec la machine. Les langages sont de différents niveaux
d'évolution : certains se rapprochent beaucoup des langues humaines,
d'autres sont près du langage-machine. Un langage évolué, proche du
langage mathématique par exemple, doit être traduit en langage-
machine . Cette opération est effectuée par un traducteur : compilateur
ou interpréteur.
De plus, en vue H'épargner à l'utilisateur une gymnastique
intellectuelle à laquelle seul un informaticien très entraîné est habi-
tué (celle de travailler en binaire, en octal ou hexadécimal : ces
deux derniers sont des codes déduits du code binaire p^r concaténation
respective de 3 ou k digits binaires), un langage évolué, possédant
une syntaxe indépendante du contexte présente les avantages supplémen-
taires suivants :

1 ) Le programme écrit dans ce langage avec un minimum de commen-


taires explicatifs peut être repris assez facilement par Tout
programmeur.
2) Le langage évolué étant plus synthétique que le langage-machine,
la programmation est plus facile.
3) La concision des ordres réduit l'encombrement du paquet de
cartes à fournir par l'utilisateur et apporte, par conséquent
à ce dernier, un gain de temps appréciable.

Le développement des langages formalisés explique l'évolutioi


des compilateurs comme premiers éléments de la programmation-système
1
dont on ait cherché à automatiser la réalisation. A l heure actuelle
on dispose d'un certain nombre de moyens systématiques pour écrire et
implanter un compilateur.
Samelson et Bauer [SI Oj , étudiant l'analyse des expressions
arithmétiques, ont été les premiers à introduire une pile afin de dé-
cider l'action à entreprendre.
Dijkstra [D21J a utilisé les notions de priorité entre les
opérateurs lors de la construction d'un compilateur pour 1'ALGOL.
Chomsky [CI 0 J a introduit une classification des langages
selon la forme des règles qui les décrivent. En plus de la formalisa-
tion des grammaires engendrant les langages, il a introduit la distinc-
tion entre les langages indépendants du contexte et ceux à dépendance
contextuelle. Pour ces derniers,l'analyse d'une partie de la phrase
nécessite la connaissance de toute cette phrase.
Floyd fFloJ, [Fil] a développé une théorie fondée sur la no-
tion de precedence entre les symboles terminaux d'un langage d'opéra-
teurs, indépendant du contexte.
Wirth et Weber [W1Oj et indépendamment Pair fPI il ont géné-
ralisé cette théorie aux langages à precedence simple.
Ichbiah et Morse [ilOj ont développé une technique permet-
tant d'obtenir les productions de Floyd-Evans quasi-optimales décri-
vant un langage à precedence faible.
Alors que tout construe tear d•ordinateurs électroniques dé-
veloppe ses propres compilateurs, dans la littérature un certain nom-
bre d'ouvrages ont traité ce sujet [B2O] , [B2IJ , (cioJ, [El oj , (jG20j ,
[G30] . . .
Construits selon des règles bien précises, les compilateurs
doivent pouvoir effectuer les tâches fondamentales d'analyse suivantes
1) Balayage systématique du programme-source afin d'en isoler les
différents composants.
2) Traitement des noms symboliques et remplacement des différents
symboles par les grandeurs représentées.
ainsi que les tâches de synthèse suivantes :
- 3 -

1) Après analyse de la structure du programme-source, génération


des ordres qui le composent.
2) Allocation réelle des données et des programmes {parties stati-
ques du programme-source).
3) Allocation virtuelle des données et des programmes (parties
dynamiques du programme-source).
Le compilateur que nous avons étudié est entièrement écrit
en PL/1 structuré [D3OJ. Il est destiné à constituer l'interface entre
l'utilisateur et le système NEPTUNIX de résolution des systèmes algèbro-
différentiels. La "métiicde de Gear généralisée", outil de base du sys-
tème, est une méthode implicite, à pas liés, à prédiction-correction
et à contrôle automatique d pas d'intégration en fonction de l'erreur
de troncature spécifiée. De plus, elle présente l'avantage de s'affran-
chir du problème de la constante de temps [>I3o] .
Comme cette méthode est implicite, elle nécessite le calcul
du Jacobien associé au système dont on cherche la solution. Toute ex-
tension du programme 2JBPTUNIX au contrôle-commande et à la simulation
des réacteurs nucléaires, doit tenir compte de cette contrainte et
mettre à la disposition de l'utilisateur un système capable d'admettre
les équations du système à simuler sous une forme simple en lui évitant:
de calculer le Jacobien associé à son système, tâche à la fois fasti-
dieuse et génératrice d'erreurs.

Le chapitre I du présent rapport constitue une présentation


succincte du langage ainsi que du système MEPTUNIX.
Le chapitre II traite des problèmes d'analyse, à savoir :
analyse lexicograpbu_que, représentation interne des informations et
analyses syntaxique et sémantique.
Le chapitre III présente les problèmes de synthèse, à savoir :
dérivation formelle et génération d'un code de sortie.
Le chapitre IV traite de l'ordonnancement de la matrice ja-
cobienne ainsi que de la précompilation du programme utilisateur com-
plétée par le calcul du jacobien associé.
Dans le chapitre V nous présentons des exemples d'applica-
tions aux réacteurs nucléaires et à des systèmes mécaniques. Nous ne
développerons pas la version du système NEPTUNTX qui traite des réseaux
électroniques. Le principe est calqué sur la version que nous allons
exposer concernant les systèmes physiques décrits par un langage mathé-
matiaue,
- 5 -

0 - PRELIMINAIRES

0-1 Théorie des ensembles.


0-2 Quelques concepts de la théorie des graphes,
0-3 Les systèmes physiques et leur description par des systèmes
d'équations algébro-différentielles.

0-k Calcul matriciel et méthode d'élimination de Gauss.


0-5 Méthode de Newton pour la résolution des systèmes d'équations
non linéaires.

0-6 Concepts de logique formelle.


0-7 Exposé du problème.
-7 -

Dans les paragraphes qui suivent, nous introduisons les no-


tions nécessaires à l'exposé sur les grammaires formelles et sur les
systèmes de résolution des équations algébro-différentielles. Le pro-
blème d'analyse numérique n'étant pas l'objet de notre exposé, nous
supposons connues les notions de fonctions de plusieurs variables, de
dérivée partielle d'une fonction de plusieurs variables par rapport
à une variable et de calcul matriciel.

0-1 THEORIE "S ENSEMBLES.

Envisageons plusieurs objets, en nombre quelconque, de même


nature ou de nature différente, puis réunissons-les par la pensée, en
un nouvel et unique objet. Ce nouvel objet constitue L'ENSEMBLE des
objets initiaux, qui en seront appelés les ELEMENTS.
Soit alors un ensemble A et un élément a. Si a se trouve
dans A, nous dirons que a APPARTIENT à A et nous écrirons :

a £ A.

Dans le cas contraire, nous dirons que a N'APPARTIENT PAS à A et nous


noterons ceci par :

a f A.

Soit un autre ensemble B CONTENANT A. Nous noterons ceci par

B 2 A ou A £ B.

Si B contient au moins un élément n'appartenant pas à A, nous dirons


que B CONTIENT STRICTEMENT A et nous écrirons t

B 3 A ou A C B.

Les opérations de REUNION et d'INTERSECTION* de deux ensembles


A et B seront notées AU B et A 0 B. Elles sont représentées par les
DIAGRAMMES DE VENN des figures 0-1 et 0-2.
FIG 0-1 AU B FIG0-2 ADB

FIG 05 Graphe d'une FIG 0-4 Exemple de


correspondance GRAPHE

<3
FIG05 GRAPHE PARTIEL FIG 0-6 SOUS-GRAPHE
- 9-

Si l'intersection de A avec B est VIDE (ne contenant aucun


élément) les deux ensembles sont dits DISJOINTS. Nous écrivons alors :

A n B = 0

Le COMPLEMENT de A par rapport à B est l'ensemble des élé-


ments appartenant à B et n'appartenant pas à A :

 = ^ = | x É B | x $ À |.

Le PRODUIT CARTESIEN de deux ensembles A et B sera noté A x B

A x B = |(a,b) | a £ A et b 6 B|.

Une RELATION définie sur deux ensembles A et B admet pour GRAPHE un


sous-ensemble de A x B.

0-2 QUELQUES CONCEPTS DE LA THEORIE DES GRAPHES [B4o) [B4I] [kl Ô] (~H11] .

Les graphes peuvent être orientés ou non orientés. Dans ce


qui suit nous ne nous intéressons qu'aux graphes orientés.
Revenons au cas classique de deux ensembles X et Y. Le graphe
de la correspondance f = (G, X, Y) peut être caractérisé par les cou-
ples (x, y ) , qui seront appelés ARCS, les éléments x et y étant eux-
mêmes appelés SOMMETS ou NOEUDS. Nous avons représenté figure 0-3 la
correspondance f = (G, X, Y) et utilisé une flèche pour matérialiser
1'arc (x, y ) ,
Certains auteurs, dont C. Berge, ont considéré le cas où
X = Y et envisagé le graphe d'une application multivoque P (chaque
élément pouvant avoir zéro, un ou plusieurs correspondants) d'un en-
semble X dans lui-même. Le graphe est alors le couple

G = (X, f )

c o n s t i t u é par l'ensemble X et l ' a p p l i c a t i o n T. Tout x 6 X e s t un 50>DET


du graphe et tout couple (x, y) t e l que y 6 Tx est un ARC dont 1'ex-
trémité INITIALE e s t x et l ' e x t r é m i t é TERMINALE e s t y. Par exemple,
considérons l e graphe de l a figure 0-4. I l représente l ' a p p l i c a t i o n i
de X - | A, B, C, D, E | dans X, t e l l e que :
- 10 -

T(A) = | C, D, EJ ; T(B) = |A, C, E I j T(C) = | D | I r(D) = | 0 | ; T(E) =

On nomme GRAPHE PARTIEL d'un graphe G = (X, r) un couple de


la forme (X, r ) tel que P'x C Px pour tout x S x (cela revient à sup-
1

primer un certain nombre d'arcs). La figure 0-5 représente un graphe


partiel du graphe de la figure 0-4.
Si E est un sous-ensemble de l'ensemble des sommets X, on
appelle SOUS-GRAPHE un couple (E, T ) tel que :

T„x= T x n E V x Ê E .
a

La figure 0-6 représente un sous-graphe du graphe de la figure 0-4.


Deux ARCS distincts sont dits ADJACENTS s'ils ont une extré-
mité commune. De ux SOMMSTS distincts sont dits ADJACENTS s'il existe
un arc liant le premier au second.
Le DEMI-DEGRE INTERIEUR (respectivement, EXTERIEUR) d'un som
met est le nombre d'arcs ayant ce sommet pour extrémité terminale
(respectivement, initiale).
On appelle CHEMIN dans un graphe une suite d'arcs (u. , u., .
telle que l'extrémité terminale de chaque arc coïncide avec l'extremit
initiale du suivant. La LONGUEUR d'un chemin est le nombre n (n £ N)
d'arcs qu'il comporte.
Un CIRCUIT ou une BOUCLE est un chemin fini dont le sommet
initial coïncide avec le sommet terminal.
Un graphe est dit FORTEMENT CONNEXE si, quel que soit le
couple (x, y ) , avec x distinct de y, x et y sont reliés par un chemin.
Dans un graphe connexe sans boucle, un noeud de demi-degré
intérieur égal à zéro est appelé BASE du graphe, alors qu'un noeud de
demi-degré extérieur égal à zéro est appelé FEUILLE. Si de plus on
considère un arc (x, y) x est un ANCETRE DIRECT (ou PERE) de y et y
est un DESCENDANT DIRECT (ou FILS) de x.
Un arbre est un graphe fortement connexe sans boucle possé-
dant un sommet a appelé RACINE et tel que :

1 - a est de demi-degré intérieur égal à 0


2 - tous les autres sommets possèdent un demi-degré intérieur
égal à 1
3 - tous les autres sommets sont accessibles de la racine a.
Généralement, on adopte la convention de représenter la racine en haut
de l'arbre. Tout les arcs sont alors dirigés vers le bas. De plus, on
- 11 -

ne représente pas le sens des arcs. La figure 0-7 constitue un exemple


d'arbre A à six noeuds. Il est à noter enfin que chaque noeud d'un
arbre est relié à la racine par un chemin unique.
Soit A = (X, r ) un arbre et soit E un sous-ensemble de som-
mets. On appelle SOUS-ARBRE A' un couple (E, T_ ) tel que :

r x = Tx n E VXÉE.
E
La f i g u r e 0-8 r e p r é s e n t e un s o u s - a r b r e de l ' a r b r e de l a f i g u r e 0 - 7 -
0-3 LES SYSTEMES PHYSIQUES ET LEUR DESCRIPTION PAR DES SYSTEMES
D'EQUATIONS ALGEBRO-DIFFERENTIELLES.

Une c l a s s e i m p o r t a n t e de p r o c e s s u s p h y s i q u e s p e u t ê t r e r e p r é -
s e n t é e p a r un modèle mathématique du t y p e ( 3 . 1 ) »

k = £(£. *) (3-1)
où x est vecteur de dimension n, f est un vecteur fonction et t est
une variable indépendante (le temps par exemple). Le système (3.1 )
est appelé système d'équations différentielles EXPLICITES.
En automatique, l'étude théorique des problèmes de stabilité
et d'optimisation est abordée sur des modèles de la forme (3-2).

x = f(x, e, t)
(3.2)
1 =fi(x.t)

x est le VECTEUR D'ETAT, e_ est le vecteur des ENTREES, si est le vecteur


des SORTIES, g est un vecteur de fonctions univoques et f un vecteur de
fonctions continues satisfaisant à la condition de Lipschitz . Le
système (3-2) est un système d'équations ALGEBRO-DIFFERENTIELLES.

(1) f satisfait à la condition de Lipschitz s'il existe une constante k


positive telle que, pour t et e_ fixés et quels que soient x.. et x_
appartenant à l'ensemble des états admissibles, on ait :

(x, , e, t) - f(x , e, t)|| Akjix, - x


2 2
%
FIG 0-7 Exemple d'ARBRE A'

FIG 0-8 SOUS-ARBRE de l'arbre "A


- 13 -

Considérons enfin le système (3.3) appelé système d'équations


algébro-différentielles IMPLICITES.

h(x, x, t) = 0 (3.3)

Ce système inclut non seulement des équations du type (3.1), mais aussi
les équations algébriques et finalement l'ensemble mixte d'équations
différentielles et algébriques.

0-4 CALCUL MATRICIEL ET METHODE D'ELIMINATION DE GAUSS.


n p
Une MATRICE représente une application A de R dans R . Elle
s'écrit sous la forme suivai.te :

^1 •Si

*PI pn

Nous nous intéressons aux matrices CARREES, applications de


R dans R et spécialement au système de n équations linéaires à n
inconnues x-, x., ..., x :

12" 2
a
22* 2

(VI)

et „ jt„ -r a_„x_ v . , . f a x. = y
7
ni 1 n2 2 nn n n

Sous forme matricielle le système (4.1) peut s'écrire :

M • | x 1 »! y |
t t
où | x | = (x , x
1 2 x ) et | y | = (y , y , .... y ) sont des vec-
n 1 £ n

teurs colonnes et A est la matrice carrée des coefficients.


Si A est REGULIERE, la matrice INVERSE P A I ~ existe et nous
avons :
«i-or-M
ou, sous forme explicite :
14 -

z .<-'> = (1, 2, n)
k=1
Ainsi, le problème du calcul des éléments de la matrice in-
verse [ A J ~ est équivalent au problème de la résolution du système
d'équations (3.1) pour des membres de droite arbitraires y-,y » ...,y 9

r i-1 n

Le calcul effectif des elements de Al par les formules classiques


est très long pour n grand. Par suite, les méthodes numériques de ccl-i
cul effectif des éléments d'une matrice inverse - et, par conséquent, '
de la résolution d'un système d'équations linéaires - sont d'une grand
portée pratique.
Méthode d'élimination de Gauss.

1 . S i aa,.. 7-0, on p e u t éliminer x., d e s équations 2 n du système


"21
(4.1) en a j o u t a n t , à l'équation 2, la première multipliée par -
3-21 11 a

a la troisième, la premiere multipliée par - —*— etc . a


11
Le système (3-1) est alors remplacé par le système (4.2)
equivalent

ail*! + ^
a-n xn = '1
y„

1 2
a< >x a< >x = ('!
a
22 2 X +
2n n '2 y

(4.2)

a X
,(D. „<D
n2 2

Les coefficients des inconnues et les termes constants des dernières


n-1 équations sont donnés par les formules :

a a
(1) n (1) n
•• = a. . a, ., y; ' = y. - -=- y. L (i, j = 2, ...

0 > A l o r s
2. Supposons &P2 ^ » éliminons x„ de la même façon des n-2
dernières équations du système (4.2). Nous obtenons le système :
15

1n n " '1
1

22 2 + a x i<
L
2n>xn X
a X 2 3 3
*2
- (3) (*.3)
a
33 3 3n n 3
y y

2 2 2
( >x„ + ... • a< >x = y< >
n3 "3 nn n 'n y

Les nouveaux coefficients et les nouveaux nombres de droite sont re-


liés aux précédents par les formules :

.<u 0 ) (S)-,(D.i2 (D,(1)


U)-„(l)_fj2 a T U, j = 3, n).
U ij 0) "2J CD '2
"22 <*22

3 . En c o n t i n u a n t l ' a l g o r i t h m e , nous p a s s o n s , en n-1 é t a p e s , du systèn


o r i g i n a l ( 4 . 1 ) au système t r i a n g u l a i r e r é c u r r e n t ( 4 . 4 ) .

a x + a X a X + + a x
l1 1 2 ' 3 • 13 3
3 ••• 1n n
, _ x + a. x + ... + a. x - y„
"22 "2 "23 3
2 2
«"33
i 2 > «"3, + . . . + a< >s =y< > (4.4)
3n n 'n

(n-O (n-D
v
a x = v
nn n •n
C e t t e r é d u c t i o n ne p e u t ê t r e e f f e c t u é e que s i , e t seulement
si, dans l e p r o c e s s u s d é c r i t :

a a< > 1
a (n-2)
a
a
11 ' 22 ' a n - 1 , n-1

Une r.atrice est mathématiquement SINGULIERE si elle comporte


deux lignes ou deux colonnes identiques ou proportionnelles. Elle est
numériquement SINGULIERE si le processus décrit précédemment échoue.
- 16

0-5 METHODE DE NEWTON POUR LA RESOLUTION DES SYSTEMES D'EQUATIONS


NON LINEAIRES.

Considérons un système d'équations non linéaires, à premiers


membres réels :

X x x
M V 2 n> " ° ^
f
2<*1> 2 X
*n> = °
(3.1) !

f x x
n<*1' 2 n> " °

Ecrivons ce système sous une forme abrégée. L'ensemble des


arguments x , x„, . . . , x
1 peut être considéré comme un vecteur de
dimension n

t
x = (x,, x , .... x )g n

De façon analogue, l'ensemble des fonctions f , f , ... f 1

peut aussi être considéré comme un vecteur f de dimension n. Ce demie


vecteur constitue le VECTEUR PONCTION.
Sous forme abrégée, le système (5-1) peut s'écrire :

£(x) = 0 (5.1 ') '


e s
Afin de résoudre le système (5>1')» il t fait appel à des
méthodes opérant par approximations successives.

Supposons trouvée la p-ième approximation d'une des solutions


x = {x-., x„, ..., x ) de l'équation vectorielle (5-1')« Soit x ceti
approximation :

v - /v{p)
x(p) - x x
1 ,„(p)
x , . . .V (, Px) / ; .
2 n

La solution exacte de (5.1') peut être écrite sous la forme :

p
où g} * p
= (e5 ', £^ p
, .... £^ ') p
est l'erreur sur la solution.
- 17 -

1
Portons (5.2) dans (5-1 )» nous obtenons :

( p ) ( p )
f(x + S ) = 0 (5.3)

Supposons que la fonction f(x) soit continûment derivable


dans un certain domaine convexe contenant x et x . Décomposons alors
le premier membre de l'équation (5-3) par rapport aux puissances du
petit vecteur s} ' en nous bornant aux termes linéaires. Nous obtenons

f(x ( p )
+ £ ( p )
) = f(x ( p )
) + f'(x ( p )
) £ ( p )
= 0 (5.1*)

Le système (5-*0 correspond, sous forme développée, au système (5-^') •

P > P > ) r :t (P> 1 P> p) (l,>


ri (x<f', 4 4 * ix,< l ' i xi )t 1 •
f x (p> P > p ) p ) p) p) P > P )
i'x ' i ' 4 =i )4 • ••. * r,', < * ( , 4 4 )^ •»
(5.4-)
(5
t (x<"> * «<«">, X<P' * £<*> «<"> » et»') .
ni 1 £ £ n n
. (_(P) ( P ) xX „(P>) -. ' I,(P) _(p)
r 1 x Jphs(p) t
V * 1 'a i> ' nx, *! '*2 n 'I *
(l ) !,)
r' (x ' ,xl . .. „(P>U(P) • , ' (,(P) ,<P)
f _(p)w(p> „ =

Les formules (5. h) et (5.V) entraînent qu'il faut entendrt


par dérivée f ' (x) la MATRICE JAC0BIEN2IE du système des fonctions

f a f
s f
1 * i l
•*s. ÎX. ' ' î xn
1 2

f i f
» ? P a
? f

1
J x ,2 ' ' 3X
n
f'(x) = J(x) =

Ôf Bf •èf
n n n
«1 SI, ' * ^x
- 18 -

La matrice jacobienne peut aussi être écrite sous forme condensée :

£'(*) = J(x) = Jx, (i, j = 1, a n)

Le système (5.*0 est un système linéaire par rapport aux


erreurs £>P'(i = 1 , 2, .... n) à matrice J(x). Il peut être écrit sous
la forme :
( p ) ( p ) ( p )
f(x ) + J(x )£ = 0 (5.5)

Si la matrice j(x j est régulière, nous pouvons alors

= (P) 1
J - ^ ' ) £(>>)

Par conséquent la solution par la METHODE DE XETJTON du sys-


tème (5-1') est donnée, à la p+1-_ème approximation par la formule (5.

,(P+1) ,(P> - J ~ ( x 1 (p) (p)


) £(* ) (5.6)

Nous limitons notre exposé à ce stade. Il est certain


qu'avant toute application de ce procédé pour trouver la solution de
systèmes d'équations non linéaires, il faut s'intéresser aux: problèmes
d'existence des solutions du système (5-1')» de l'unicité de la solu-
tion, de la rapidité avec laquelle le processus de Newton converge et
de la stabilité de ce processus par rapport au choix de l'approxima-
tion initiale,

Remarquons enfin que la méthode théorique qui consiste à


calculer l'inverse de la matrice J(x) n'est pas celle retenue dans
la pratique. En fait la solution par la méthode de Newton est donnée
par la résolution du système linéaire (5.5). De plus, si la matrice
J(x) est continue dans le voisinage de la solution cherchée et si
l'approximation initiale x est suffisamment proche de la solution
cherchée, on pose approximativement :

[ 0 )
J<x) « J(x ).
nans ce* conditio"?, la concurrence â.\i processus de résolution est
considérablement ralentie.
- 19 -

0-6 CONCEPTS DE LOGIQUE FORMELLE.

Un système mathématique formel peut être caractérisé par les


composants de base suivants :
1. les symboles de base,
2. lea règles d'écriture permettant de construire les assertions
à partir des symboles de base,
3. les axiomes qui sont des assertions admises sans justification,
k. les règles de formation permettant de construire de nouvelles
assertions à partir d'assertions déjà existantes.

En logique formelle, toute assertion est un axiome à moins


qu'elle ne soit démontrée. La démonstration se fait à l'aide de théorè-
raes, de corollaires ou bien par application d'an raisonnement par ré-
currence .
Dans le flot des symboles de base, nous citons : ET noté A ,

OU noté v , PAS noté , IMPLIQUE noté > , sans que la liste soit
=

exhaustive.
Introduisons enfin trois symboles de base particuliers que
nous désignons par ALGORITHME, PROCEDURE et PROBLEME.
Une PROCEDURE est une suite d'instructions machine qui, si
on admet une limite de temps supérieure (cette limite étant par essence
raisonnablement finie) se termine par l'analyse de la dernière donnée
ou bien s'arrête sur une instruction d'arrêt conséquence d'un certain
nombre d'erreurs.
Un ALGORITHME est une procédure ou un ensemble de procédures
permettant de traiter une suite de données.
Un PROBLEME est une assertion fonction d'un certain nombre
d'inconnues. En règle générale, il constitue une question ou une suite
de questions dont on souhaite connaître la réponse. Cette réponse peut
toujours se ramener à une variable logique booléenne à deux états :
1
'VRAI , si l'assertion est exacte, TAUX', si elle ne l'est pas.
- 20 -

0-7 EXPOSE DU PROBLEME.

En terminologie de logique formelle, le problème qui nous


intéresse est d'obtenir à partir d'un algorithme ou de plusieurs algo-
rithmes partiels, un système informatique constituant un interface
souple et aussi efficace que possible entre un utilisateur pouvant êtr
non informaticien et un ensemble de procédures permettant d'intégrer
un système d'équations algébro-différentielles par une méthode impli-
cite, I
L'objet de cette étude est d'exposer les algorithmes choisis
et les procédures que nous avons développées, compte tenu des moyens
informatiques dont nous disposons.
Chapitre I : PRESENTATION DU SYSTEME NEPTUNIX DE RESOLUTION
DES EQUATIONS ALGEBRO-DIFFEKBNTIELLES.

1.1. DESCRIPTION SUCCINCTE DU SYSTEME NEPTUNIX.


1.11. Généralités.
1.12. Compilateur NEPTUNIX.
1.13. Système NEPTUNIX.

1.2. LANGAGES ET GRAMMAIRES.


1.21. Définitions et conventions.
1.212. Puissance d'une chaîne.
1.213. Vocabulaire.
1.214. Production. Dérivation. Dérivation composée.
I.215• Grammaire.
1.215-1. Classification des grammaires proposées par Chomsky,
I.215.2. Grammaires à precedence d'opérateurs.
I.215-3- Grammaires à simple precedence.
1.215.4. Grammaires à precedence faible.
1.215.5. Conclusions.
1.215.6. Remarque s.
1.216. Langage engendré p a r une grammaire.
1.22. Représentation des grammaires.
1.221. Représentation de Backus-Naur.
1.222. Représentation à l'aide d'un graphe.
1.23. Recherche du langage.
1.231. Exposé du problème,
1.232. Grammaires algébriques.
1.233- Les conditions d'acceptabilité de P.
1.234. Remarques.
1.3. PRESENTATION DU LANGAGE.
1.31. Introduction.
1.32. Les éléments du programme.
1.321. Le jeu de caractères.
1.322. Les identificateurs.
1.323. Le commentaire.
1.324. Les constantes.
1.325. Les mots-clés.
1.326. Les cartes à introduire.
1.33- Le programme.
1.331. Le premier bloc (ïSYSTEME).
1.332. Le second bloc (lDECLARATIONS).
1.333- Les blocs d'équations.
1.334. Exemple simplifié.

1.4. ORGANISATION DU SYSTEME NEPTUNIX.


1.41. Introduction.
1.42. Organisation générale de chacune des étapes.
1.421. Etape de compilation.
1.422. Etape d'édition de liens en vue de l'ordonnancement-
traduction-précorapilation.
I,423• Etape d'ordonnancement-traduction-précompilation.
1.424. Etape d'édition de liens en vue de l'intégration.
1.425. Etape d'intégration.
1.43. Moyens de communication entre programmes du compilateur.
1.44. Le5 fichiers utilisés.
1.441. Fichiers utilisés à l'étape de compilation.
1.442. Fichiers utilisés à l'étape d'ordonnancement-traduction-
précompilation.
1.45. Description de la matrice jacobienne sous forme d'un
tableau creux.
- 23

1.1. DESCRIPTION SUCCINCTE DU SYSTEME NEPTUNIX.

1.11. Généralités.

Définition 1-1 : un ALPHABET ou vocabulaire terminal est un en-


semble fini d'éléments, n est indifféremment noté X ou VT.

Définition 1-2 : les éléments de X sont appelés les SYMBOLES DE


BASE.

Définition 1-3 : une CHAINE est constituée par la concaténation


d'une séquence de symbole de base, l'ordre d'écriture de ces symboles
étant important.

Définition I-** : la LONGUEUR D'UNE CHAINE est le nombre de sym-


boles de base qu'elle contient.

Définition 1-5 : la CHAINE VIDE, notée e, est une chaîne qui ne


contient pas de symbole. Sa longueur est nulle.

Définition 1-6 : un LANGAGE est l'ensemble ou le sous-enserable


des séquences de symboles appartenant à un vocabulaire de base.

Rappels :

Définition 1-7 : un PROGRAMME est une suite d'ordres, écrits se-


lon certaines règles, permettant d'effectuer un ensemble d'opérations
plus ou moins complexes.
Définition 1-8 : nous désignerons par PROGRAMME-SOURCE le pro-
gramme présenté à l'entrée de l'ordinateur. Le langage dans lequel ce
programme est écrit est appelé LANGAGE-SOURCE. Le LANGAGE-OBJET est le
langage dans lequel ce programme est traduit.
Intéressons-nous, dans un premier temps, au problème d'ana-
lyse d'un langage afin de dénombrer les difficultés à résoudre. Il
s'agit, en gros, d'analyser une suite d'ordres ou instructions, écrits
dans un langage-source à définir, et de produire un programme dans Lin
langage de traduction répondant aux mêmes souhaits.
- 2k

Effectuer la génération d'une phrase donnée dans le langage


de traduction est d'autant plus simple que les règles d'écriture du
langage-objet sont compatibles avec celles du langage-source. C'est le
cas si le langage-objet est un langage proche du langage machine ou
s'il a une structure syntaxique simple.
Pour atteindre cet objectif, nous devons nous intéresser à
la structure ou SYNTAXE des phrases du langage-source ainsi qu'à leur
sens ou SEMANTIQUE,

Définition 1-9 : le "mécanisme" qui effectue les opérations sur


les séquences de symboles du programme-source afin de les transformer
en éléments du langage-objet est un TRADUCTEUR. Si ce traducteur est
génératif, il est appelé COMPILATEUR. Si par contre il est interpréta-
tif, il est appelé INTERPRETEUR.
Nous venons de définir le traducteur comme un "mécanisme",
ou de façon plus juste un programme, assurant la traduction d'un pro-
gramme écrit dans un langage évolué en un programme que la machine peu
comprendre et exécuter. Examinons c omment atteindre cet objectif.
Désignons pax 5* un programme écrit dans un langage L et par
ÎP^ le même programme écrit en langage machine M. Il s'agit de réaliser
s
le passage de 9. à 5^,
Cette traduction peut être faite directement par emploi d'un
traducteur du langage L en langage machine, *£L -*M , tel que :
M

L-*M <p ,p
& J
M ^L —*- M

Elle peut être aussi faite indirectement par emploi, dans


une première phase d'un traducteur du langage L en un langage K, t „

K
•ch~ ?. —3?..

Jl L A

Ensuite une traduction du langage K en langage machine est effectuée :

Il est bien entendu que le langage K peut être un autre langage évolué
ou un langage d'assemblage.
- 25 -

Interpréteur
Un interpréteur produit un langage-objet exécuté au fur et à
mesure de la progression de la traduction. En règle générale, il prend
en charge un langage "conversationnel" ; ce terme souligne le fait que
le programme s'exécute sous le contrôle d'un utilisateur conversant
avec l'ordinateur au travers d'une console de style télétype ou autre.
Compilateur
Un compilateur ou traducteur génératif produit un programme-
objet susceptible d'être placé sur un support convenable permettant de
multiples utilisations successives.
Nous avons représenté figure 1-1 le passage d'un programme
en machine.

1.12. Compilateur MEPTUNIX.

Le programme fourni à l'entrée du compilateur ressemble à


un système d'équations algébro-différentielles implicites de la forme :

f(x,x,t) = 0 (1)

où x est un vecteur de n variables et x est un vecteur des dérivées


associées à ces variables par rapport à la variable indépendante t.
Le compilateur doit effectuer l'analyse de ces équations et
calculer la matrice jacobienne associée à ce système d'équations. En
effet, pour résoudre le système (1), nous disposons, en fin de chaîne,
d'un programme d'intégration utilisant la méthode de Newton pour la
résolution d'un système d'équations non linéaires. Comme nous l'avons
vu, paragraphe 0-5» cette méthode nécessite le calcul du jacobien. Si
nous voulons donc que le langage d'entrée soit simple, il est nécessai-
re de calculer symboliquement ce jacobien.
Par ailleurs, une sortie intermédiaire de traduction doit
être assurée dans un certain code d'exécution afin de permettre le
transport sur un ordinateur autre que l'IBM 360 ou l'IBM 370 du résul-
tat de l'analyse et de la synthèse.
De plus, pour une efficacité accrue de l'algorithme d'inté-
gration, le compilateur doit Stre capable de classer les codes engen-
drés en termes constants qui ne sont calculés qu'une seule fois, en
termes fonction de la variable indépendante qui ne sont calculés qu'à
Programme en
langage-
source SYSTEME DEXPLOITATION

COMPILATEUR

Z
Programme en
langage-objet

EDITEUR DE
LIENS
Programmes
requis en L.O. z
Image-mémoire
(bibliothèque,
translatable

PI6 H Schéma simplifié du passage d'un programme


- a? -

chaque variation du pas d'intégration et en termes non linéaire»


fonction des variables qui sont calculés à l'intérieur de la boucle
de Newton.
Nous avons représenté figure 1-2 le schéma synoptique du
compilateur.

1.13. Système NEPTUNXX.

La ^igure 1-3 constitue un schéma simplifié de l'organisation


générale du système NEPTUNIX. Il apparaît que ce dernier est composé de
5 étapes communicant entre elles par l'intermédiaire de fichiers cata-
logués ou temporaires. La description de chacune des étapes est donnée
paragraphe X.k.
Dans le cas normal d'exploitation (IBM 36O ou IBM 370), par-
tant du code de sortie propre, une vérification de la bonne écriture
du programme engendré, au sens du bon conditionnement de la matrice
jacobienne, est effectuée. Si le résultat de ce test est satisfaisant,
une traduction du code est effectuée en langage PL/1. Le résultat de
la compilation du programme PL/l , ainsi que les données nécessaires au
système NEPTUNIX sont sauvegardés sur un support convenable, en règle
générale sur cartes, afin de permettre de multiples utilisations.
Il est aussi possible, dans un même travail, d'enchaîner sur
la résolution du système d'équations fournies à l'entrée du système
NEPTUNIX.

1.2. LANGAGES ET GRAMMAIBES.

1.21. Définitions et conventions.

Les propriétés des caractères et des chaînes sont bien connues


et sont utilisées, au besoin, afin d'éclaircir l'exposé.
Utilisons les lettres majuscules grecques pour désigner 1'al-
phabe t.
Les lettres, t, u, v, w, x, y et z serviront en général pour
désigner des chaînes.
Nous désignons enfin les symboles du vocabulaire par a, b,
c et d.
Une chaîne comportant k fois le symbole a est .îotée ;
- 28 -

ANALYSE TABLES des

variables,
PROGRAMME LEXICO-
utilisateur fonctions,
GRAPHIQUE
constantes,...

t 1
SYNTAXIQUE et

SEMANTIQUE OUTILS :

jeu de carac-

teres, tables

mêlées,...

* V
SYNTHESE: DESCRIPTION
au problème ••
PRETRAITEMENT
DES CODES paramètres de
INTERNES

i\ + (integration,

CALCUL DU définition des


JACOBIEN.
EXTENSION DE sorties...
LA BIBLIOTHEQUE
DES FONCTIONS

FIG 1-2 Schéma synoptique du compilateur NEPTUNIX


29

fonctions exteméi EDITION


PUtfORTRAN, DE
etc. 1
LIENS

ORDONNANCEMENT
TRADUCTION en PUT et
PRECOMPILATION

fonctions externe EDITION


PUi, FORTRAN, DE
etc.) LIENS

O
INTEGRATION

FIG 1-3 Organisation générale du système NEPTUNIX


30 -

k fois
Le symbole e est réservé pour la CHAINE VIDE.
Formellement, une chaîne sur l'alphabet Z est définie de la
manière suivante :
1) e est une chaîne sur 2
2) si x est une chaîne sur J et a est un élément de Z alors xa
est une chaîne sur Z
3) y est une chaîne sur Z asi (si et seulement si) sa définition
obéit à (1) et (2).
Rappelons enfin que si x et y sont deux chaînes, la chaîne xy
est la chaîne obtenue en concatenant les symboles contenus dans y avec
ceux contenus dans x. Par exemple si x=ab et y=cd

xy=abcd

Propriété.

Quelle que soit la chaîne x nous avons :

xe=ex=x

1.211. Tête et Q££ue_d^une_chaîne .


Soient deux chaînes x et y définies sur Z . Et soit z=xy.
La chaîne x constitue la TETE de la chaîne z.
La chaîne y constitue la QUEUE de la chaîne z.

1.212. Puissance d'une chaîne.


Soit x une chaîne surZ .
La PUISSANCE de x est définie par la récurrence suivante :

x!n = xx! {n-1 ) pour n. > 0


avec xi1 = x et xîC = e

1.213- Vocabulaire.
îîous avons défini au paragraphe 1.11 le vocabulaire termi-
nal I .
Désignons par y le VOCABULAIHE XOX TERMINAL groupant les
ELEMENTS SYNTAXIQUES.
- 31 -

Appelons V le VOCABULAIRE TOTAL formé par la réunion du vo-


cabulaire terminal et du vocabulaire non terminal.
Désignons par V* = ( l u N ) * le monoïde libre de l'ENSBMBLE DE
TOUTES LES CHAINES DEFINIES SUR V et par V l'ensemble des chaînes dé-
finies sur V, la chaîne vide étant exclue V = V - e I.

Conventions d'écriture,
- les lettres minuscules a,b,c et d servent pour désigner les éléments
de I ;
- les lettres majuscules A,B,C,D et S désigneront des éléments de N ;
- les lettres U,V,ff,X,Y,Z désignent indifféremment des éléments de Z et
de N ;
- les lettres grecques désignent des chaînes constituées de symboles
terminaux et de symboles non terminaux Î
- les lettres u v,w,x,y,z sont réservées pour désigner des chaînes ne
f

comportant que des symboles terminaux.

1.21 h. Production. Dérivation. Dérivation composée.


Une PRODUCTION est un couple de chaînes (f, y») ou plus pré-
cisément un élément de l'ensemble V* >ï(V*) x V . Le premier élément
est une chaîne contenant au moins un symbole non terminal et le second
étant une chaîne.
Plutôt que (if, «y ) nous utilisons la notation (2.1)

*f — • V (2.1)

L'opération notée (2,1) s'appelle aussi DERIVATION. Elle se


lit "^ se réécrit q>"..
L'opération dérivation est une opération transitive, c'est-
à-dire :

a-»-(3 et (3-*7 donne a -*- 7

Définissons sur V* une relation de dérivacion particulière


appelée DERIVATION DIRECTE (notée => ) :

Soit CÇ37 & V*


et soit j3 -> S une production, alors

Of3? => a$tf (2.2)


- 32 -

Nous notons par => la fermeture transitive de la relation


*
derivation directe et par ^ > sa fermeture reflexive et transitive.
Une DERIVATION COMPOSEE est un enchaînement de dérivations :
n
<X = > |3 (2.3)

s'il existe une séquence (TQ, ce.. , . . , , Œ de (n+1 ) chaînes, non nécessai-
rement distinctes, et telle que les chaînes vérifient :

v
1-1 i x ' ^
•t *„ = p

La dérivation composée (2.3) admet n pour longueur.

I.215• Grammaire,

Désignons par P un ensemble de productions, sous-ensemble de

+
V* N(V*) x V

et par S un élément syntaxique privilégié appelé AXIOME.


Une GRAMMAIRE G est définie par le quadruplet (s, £, P, S)

G = (N,I,P,S) (2.4)

Remarque
Lorsqu'il n'y a pas de confusion possible nous utilisons
G(S) pour parler de la grammaire admettant 5 pour axiome.
r •*
I.215•1• Classification des grammaires proposée par Chomsky .C30j ,
(C3lj .
Soit •& un élément séparateur appartenant à V.
Une grammaire G = (N,I,P,S) est dite de Chomsky, si la rela-
tion (2.1) satisfait aux quatre conditions suivantes :
1 ) Ct -r* &• : la relation n est pas reflexive
r

2) A <= S ssi
3 « j3 et TS 6 V
t I OA7 —> û£7
3) 3 a,3 et r e v I a -*• f3#tf
- 33 -

+
It) I _>_, , 0 , ) ... ( 0 C , 3 ) . avec a
n n ± £ V e t p e V* V i ,
± H i f a

I V >f i V Y : if —>• Y

ssi

Remarque s
"• • ^ et H> peuvent être vides.
2. Les oc. ou les p. peuvent être égaux.

Exemple 0
Soit V = I U N U | # | = | a,b,c | U | S,A,B,c| U | 3 |
Considérons l'ensemble suivant des couples de mots :

l(S,AbB), (C,a), (A,bBC), (bBAb,bCB), (bB,bac), ( # A b , # c b ) , (A,SA) j

Soit la chaîne if = SAbB

1. Si nous prenons t? = S, <? = bB, K = A et le couple (A, bBC), il


2

vient :

SAbB —* SbBCbB

2. Si nous prenons (f- = e, £f„ = AbB, ££ = S et le couple (S,AbB), il


vient :
SAbB —*- AbBAbB

N'ous remarquons sur cet exemple que, selon les valeurs de y> et de tf> ,
nous avons eu à choisir une règle ou une autre. Par ailleurs, dans le
cas 2, pour <X.~S, nous avons pris le seul couple possible.

Grammaire de type 0
C'est une grammaire qui satisfait aux quatre conditions énon-
cées ci-dessus.
- 34 -

Grammaire de type 1.

C'est une grammaire à DEPENDANCE CONTEXTUELLE (CONTEXT-SENSITI\


Elle satisfait aux quatre conditions de Chomsky et est décrite
par des règles de production du type (2.1) avec :

<f = OA0
m = awp
où (a,(3) i.v* x v* A s s et <u e v*

Exemple 1
Considérons S —*• aSBC \ abC
CB —>• BC
bB — * bb
bC —>-bc
CC —>• ce

Nous avons la dérivation suivante :


S => aSBC
=> aabCBC
=> aabBCC
=> aabbCC
=>aabbcC
=>aabbcc

La grammaire ainsi décrite engendre l'ensemble des chaînes


an,D nc n avec n. £ 1 .

Grammaire de type 2.
C'est une grammaire à INDEPENDANCE CONTEXTUELLE (CONTEXT-FREE).
Elle satisfait aux quatre conditions de Chomslcy et est décrite
par des règles de production du type de la relation (2.1) avec :

f = A A € N
V = <" ai 6 V*
Une grammaire de type 2 est souvent appelée C-grammaire.
- 35 -

Exemple 2
S o i t l a grammaire G(E) J

G(B) = ( | E , T , p | , | a , + , * , ( , ) | ,P,E)

P est l'ensemble des productions suivantes :

1 . E — E+T 2. E -» T
3. T -* T*F 4. T -• F
5. F -• (E) 6. F — a
Un exemple de d é r i v a t i o n dans G(E) e s t donné p a r :
E=i> E+T
=>T+T
=>F+T
=>a+T
=> a+T*F
=>a+F*F
=> a+a*F
=> a+a*a

Grammaire de t y p e 3 .
C ' e s t une grammaire REGULIERE.
E l l e s a t i s f a i t aux q u a t r e c o n d i t i o n s de Chomsky e t l e s règles
de p r o d u c t i o n q u i l a d é c r i v e n t s o n t de l a forme ( 2 . 1 ) avec :

tf = A A € N
r*
V=x ou <f = xB x e i et BfeN

Une grammaire de type 3 est souvent appelée K-grammaire ou


grammaire de Kleene.

Exemple 3
Soit la grammaire G(E) Î

G(E) = (|E|, I 0,1 , .... 9 | , P,E)

P est l'ensemble des productions suivantes :

E •» 0|1 | ...|9
- 36 -

Cette grammaire sert à définir l'ensemble fini des dix pre-


miers entiers.

Remarque s
1. Toute K-grammaire est une C-grammaire. Mais la réciproque n'est pas
vraie.
2. Toute C-grammaire ne contenant pas la chaîne vide forme un sous-
ensemble des grammaires à dépendance contextuelle.
3. Lorsqu'une C-grammaire contient la production vide,
A —»• e

si des précautions ne sont pas prises qui imposent des conditions


supplémentaires à la grammaire, alors on peut ne pas obtenir une
grammaire à indépendance contextuelle. En effet, dans certains cas,
la grammaire peut définir un langage qui soit un ensemble récursif
dénombrable quelconque.

h. Dans le cadre de l'étude des langages formalisés et dans le but de


représenter tout ou partie des formes d'écriture ou des sens à
attribuer à ces écritures, d'autres modèles de grammaire ont êzê
récemment introduits. Il s'agit des GRAMMAIRES INDEXEES qui n'appaj
tiennent pas à la classe des grammaires de Chomslcy. Nous les citons
pour mémoire.

1.215-2. Grammaires à precedence d'opérateurs [F2OJ .


Les grammaires définissant les langages formalisés sont du
type 1, 2 ou 3- Lorsque le choix est possible, la préférence va aux
C-grammaires et aux K-grammaires. Cela s'explique, d'une part, par la
facilité d'écriture et de lecture des règles de production à l'aide de
la représentation BNF ou d'un graphe, d'autre part par la rigueur de
construction des analyseurs des langages décrits par ces grammaires.
Nous exposons dans les prochains paragraphes quelques propriétés des
C-grammaires facilitant la mise en oeuvre de l'analyse des langages
définis par ces grammaires. Cependant, avant de commencer notre exposé
précisons la terminologie employée.
- 37 -

Définition 1-10 : soit G(s) une grammaire.


Une forme PHRASEE est définie sur G de la manière suivante :
1) S est une forme phrasée (S est l'axiome de la grammaire)
2) Si CCj3"ff est une forme phrasée
et si 3 p Ê P | (3 — » S
alors ce SIS' est une forme phrasée.
-
3) v = Op's est une forme phrasée si elle obéit à (l) ou (2).

Définition 1-11 : une PHRASE est une forme phrasée ne comportant


que des éléments terminaux.

Définition 1-12 : une PHRASE SIMPLE est une phrase telle que la
dérivation
p — s
soit directe.

Définition 1-13 : une GERBE est la phrase simple la plus à gauche


d'une chaîne terminale.

Nous nous intéressons aux grammaires de Chomsky de type 2 et


plus particulièrement à celles pour lesquelles tout élément syntaxique
est nécessairement séparé d'un autre par un symbole de base. Ce sont
les GRAMMAIRES D'OPERATEURS.
Soient G = (N,I,P,S) une grammaire d'opérateurs ne contenant
pas la production vide et $ un symbole de fin. Considérons l'ensemble
X u | $ et définissons sur cet ensemble trois relations de precedence
appelées RELATIONS DE PRECEDENCE D'OPERATEURS, de la manière suivante

(1) a =b
si A * Oa7b(3 4 P
avec A £ N a,b 6 Z a,,3 Ê N et ï s S u | e|

(2) a <.b
si A > OaBS 6P
et si B ===^ 7b 6
- 38 -

(3) a .> b
si A —*• 0Sbf3 é P
et si B = > S a$

si S ^=> Va.CC

(5) a .> $
si S ==> CCaTT

Si une ou plusieurs de ces trois relations de precedence sont vraies


quel que soit le couple de symboles terminaux, alors G(s) est une
GRAMMAIRE A PRECEDENCE D'OPERATEURS (GPO).
Posons le problème de l'analyse d'une phrase d'un langage en-
gendré par une GPO. L'analyseur syntaxique se trouve placé devant une ,
chaîne de symboles terminaux. Son travail consiste à regrouper ces dif-
férents symboles de manière convenable, c'est-à-dire en suivant les
directives imposées par la syntaxe, afin d'arriver, de fil en aiguille,
à reconnaître l'axiome.
Si deux symboles a et b appartiennent à la chaîne d'entrée,
une des trois configurations suivantes est possible :

1 - l'ensemble ab fait partie d'une sous-chaîne directement réduc-


tible. Dans ces conditions a et b ont même precedence.
2 - ab ne fait pas partie d'une sous-chaîne directement réductible
et a est la queue d'une sous-chaîne réductible. Dans ces condi-
tions, a possède une precedence plus forte que b.
3 - ab ne fait pas partie d'une sous-chaîne directement réductible,
a n'est pas le dernier symbole d'une sous-chaîne réductible et
b est la tate d'une sous-chaîne réductible. Dans ces conditions,
a possède une precedence plus faible que b.

Nous avons là le squelette d'un analyseur efficace.

Exemple de GPO

G Q = (JE.T.F |,|a, + , * ,{,){ ,P,E)

où P est l'ensemble des productions suivantes :


- 39 -

(1) E — E+T (2) E — T (3) T — T*F

W T^-P (5) F - (E) (6) F-*-a

Les relations de precedence sont données Pig. 1-4.

1.215.3. Grammaires à simple precedence fP20j » [V20j , fy3oJ .


Comme nous le verrons au chapitre II, les grammaires qui nous
intéressent sont celles définissant des langages pouvant être analysés
par un algorithme opérant par réduction et décalage (ADR). Dans ce pa-
ragraphe nous rappelons la définition et les propriétés des grammaires
à .simple precedence, grammaires ayant fait l'objet de bon nombre de
travaux et de publications dans ce sens.

ADR ou Algorithme opérant par réduction et décalage.


La mise en oeuvre des transducteurs est réservée au chapi-
tre II. Cependant, définissons un ADR relatif à une C-grammaire
G = (N,X,P,S) de la manière suivante :

1. Associons aux éléments de P un numéro de 1 à p a S


2. Un ADR relatif à G est un couple t= (f,g) où
- f est une fonction de décalage-réduction
f : V* x (Z U | $|)* - * <*
avec S un symbole de fin et Jt un ensemble d'actions.
- g est une fonction de réduction
g : V* x (IU|$|)* - * *
avec g(cc,w)=k si le membre de droite de la production k admet a
pour queue.
Pour implanter un ADR dans le cadre des grammaires à prece-
dence, on définit des relations de precedence entre les symboles appa-
raissant dans des formes phrasées de la manière suivante :
(1) X <. Y

si 3 p é P I A —> CCXBp avec B W ï 7

(2) X = Y

si 3 P è P | A -^ 0CCÏÏ3

(3) X o a

si 3 p € P | A -*> CCEYf3 avec B £=> ÎTX et Y»?aS


( a * + ) $
•> •> •> • >

•> •> •> •>


<• •> •> •> •>
<•

<• <• <• •> •> •>


<• <• <• <• =
<• <• <• <•

FIG 1-4 Relations de precedence pour G ( G.P.O.)

E T F [THES a I ) + * 1

= •II

•> •> = •>

• > •> •> •>


> •> •>

•> > •> •>


•> •y •> •>
•> •y •y •>
<• <• <• <• â <• <• <•
<• < • = <• < •

= <• <•
< • <• <• <• < <• <•

FIG 1-5 Relations de precedence pour G ( G.P.S. )


- 41 -

Remarques
1. .> est définie sur l'ensemble VxX . En effet le symbole le plus à
droite de la forme phrasée est toujours un symbole terminal.
2. L'analyse fondée sur la technique de la precedence simple utilise
les trois relations précédentes afin d'isoler la gerbe dans une
forme phrasée Of3w. Si (3 est la gerbe, alors

a - l'une des deux relations, <• ou =, doit être vraie entre tout
couple quelconque de symboles constituant la chaine CC
b - <. doit être vraie entre le symbole le plus à droite de tt et
le symbole le plus, à gauche de (3
c - = doit être vraie entre tout couple quelconque de symboles
constituant la chaîne (3
d - .> doit être vraie entre le symbole le plus à droite de 6 et
le symbole le plus à gauche de w.

Définition
Une GPO est une GRAMMAIRE A SIMPLE PRECEDENCE (GPS) si quel
que soit le symbole X et quel que soit le symbole y susceptible de le
suivre dans l'une quelconque des règles de production (X et Y £ V ) ,
une et une seule des relations de precedence est vraie. De plus deux
règles de productions ne doivent pas posséder le même membre de droite
et la grammaire ne doit pas être ambiguë.

Compte tenu de tout ce qui précède, nous sommes en mesure de


trouver la gerbe à laquelle se réduit la phrase en cours d'analyse :

(2.5)

Mathématiquement, la recherche de la gerbe peut être effectuée suivant


l'algorithme (2.6).

1 . d = min i (g | X i p > X i + 1 )

2. g = m a X j < d (j | _,<
Xj X.) (2.6)

3. la réduction est X X„ + 1 ... X l


- 42 -

L'application de la première étape loc/ilise le symbole le


plus à droite de la gerbe. La seconde étape cherche le symbole le plus
à gauche. Comme les symboles ont la même precedence, le résultat est
acquis. A partir d'une consultation des règles, de préférence considé-
rées sous forme de réductions, une première réduction est obtenue. Si
nous répétons le processus, nous arrivons au but recherché.
L'ensemble du mécanisme est appelé ANALYSE CANONIQUE. On
démontre que si la grammaire est bien écrite et jouit des propriété^
des grammaires à simple precedence, la convergence est assurée en un
nombre fini de pas.
La condition sur la non-identité des membres gauches de deux
quelconques des réductions est nécessaire, sinon une décision peut im-
poser un choix qui peut être arbitraire et l'analyse canonique peut ne
pas aboutir.

Exemple de GPS

G s = (|E,T,F,[T],CE)] | , | a, + , * ,(,)|,P,E)

avec P 1'ensemble des productions suivantes :

(1) E - M (2) E ~ * CT] (3)


(4) T - F (5) T -T*F (6) F - a
(7) F - (CE)] (8) [T] - T (9) CE)] -E)
Les relations de precedence sont données Fig. 1-5-

1.215.4. Grammaires à Precedence Faible (ilOJ *


Le concept de precedence faible est une généralisation du
concept de precedence simple. Xous avons vu que dans une GPS une et
une seule des trois relations (<., =, .>) relie un couple quelconque
de symboles du vocabulaire V, En fonction de ces trois relations,
l'analyseur lit un nouveau symbole ou effectue une réduction.
Dans une grammaire à precedence faible (GPF), la relation <.
est utilisée à la place des relations de precedence simple (<. et =).
Dans ces conditions, les C-grammaires, qui ne sont pas des GPS à cause
des conflits existant entre<. et =, peuvent rester des GPF,
- *3 -

Définition
Une C-graramaire ne contenant pas de production vide est une
GPF si les trois conditions suivantes sont satisfaites.
1. La relation .> n'est pas vraie entre deux symboles quelconques re-
liés par une des deux relations <. ou =

2. Soient X e V p.. et p € P avec

P l : A -»- «X|3 et p 2 : B -*- [3

Soient enfin r. : X <.. B et r« : x


* B

Si p^ et p- sont vraies alors r 1 et r_ ne le sont pas,

3. Deux quelconques des règles syntaxiques écrites sous forme de ré-


duction n'ont pas le même membre de gauche.

Propriétés
Nous énonçons deux propriétés des GPF démontrées par Ichbiah
et Morse [l3o].
1. Toute GPS est une GPP
2. Une GPF peut engendrer un langage jouissant des propriétés de la
precedence simple.

Exemple de GPF
G p = (|E,T,p| |a, + ,*,(,)(, P,E)
f

avec 1'ensemble des productions suivantes :

(1 ) E -* T (2) E •* + T
(3) E -• E + T {h) T -* F
(5) T -»-T * F (6) F -*• a
(7) F -> (E)

La matrice de precedence est donnée Fig. 1-6.


- 44 -

E T F Q ( ) + * 3
r =
•> •> = • >

•> •>•9 •>


•y •> • > •7

• • > •> • > • >

«1= <• < • <• <• <•


<•>» <• <. <•
= <- < •

<• <• <• <• <• <•

FIG 1-6 Relations de precedence pour G f ( G.P.R)


- 45 -

1.215*5» Conclusions.
Puisque nous nous intéressons à la recherche de la grammaire
du langage NEPTUNIX, nous disposons à présent de plusieurs outils per-
mettant de la définir. Abordons succinctement le problème de l'analyse
d'une phrase d'un langage engendré par une GPF ; il sera traité plus
en détail au chapitre II,
La relation •> nous permet de localiser la queue de la
gerbe. Les membres de droite des productions peuvent être consultés
pour localiser la tête de la gerbe et trouver la production adéquate.
Cette consultation n'est pas plus longue que dans le cas d'une GPS.
En effet, dans une GPS, une fois la gerbe isolée, nous avons toujours
besoin de consulter les productions pour choisir celle effectuant la
réduction convenable. Dans les deux cas, il y a analyse de symboles
et de règles de production.
Pour que la méthode d'analyse soit efficace, nous devons dé-
cider quelle production utiliser dans le cas où le membre de droite
d'une production est la queue d'un membre de droite d'une autre produc-
tion. Prenons par exemple une forme phrasée KJ3ÏW. Supposons que la ger-
be est à localiser entre V et W. Si C •*• ~$ et D -»• pTS" 50111 deux pro-
ductions, il faut décider laquelle des deux productions s'applique.
On démontre qu'il faut appliquer la production la plus longue.

1.215.6. Remarques.
1. Les relations de precedence que nous avons définies entre
symboles peuvent être étendues à des chaînes de m et n symboles. Dans
ces conditions, on construit (m,n) relations de precedence. Les gram-
maires sont alors appelées grammaires à relations de precedence éten-
dues ( G R P B ) . (AIO] , Q>4o]
2. Dans le cas des GFP, nous citons pour mémoire, une s^us-
classe de grammaires (dites à statégie de precedence mixte (G3PM)) dans
lesquelles une consultation d'un seul symbole suffit pour décider de la
production à appliquer quand on est en présence de productions ayant
même membre de droite.

3. Selon la stratégie adoptée lors de la mise en oeuvre du


TRANSDUCTEUR (Cf II.1.2) de la grammaire, on parle de grammaire LR(k)
ou de grammaire LL(k) . fil 2] , [lv1 o] , ftoo]
- 46 -

k. La figure 1-7 représente la hiérarchie associée aux gram-


maires de Chomsky de type 2 que nous avons passées en revue.

G.C. ou Grammaires à indépendance Contextuelle

G-.P.Q. ou Grammaires à Precedence d'Opérateurs

G-.C.X.A. ou Grammaires à indépendance Contextuelle Hon AnbiguBs

I
Grammaires LU

^** Grammaires LL

G.S.P.2i, ou Grammaires à Stratégie de Precedence Mixte

I
G.R.F.2. ou Grammaires à Relations de Precedence 2tendues

G.P.F, ou Grammaires à Precedence Faible

G,P.S. ou Grammaires à Precedence Simple

FIG 1-7 CLASSEMENT EEERAiïCHIQUS DES GRAMMAI2ES

1.216. Langage engendré par une_grammaire.

Définition 1-15 : le LANGAGE engendré par une grammaire G(s)


est le sous-ensemble de X* (ou de VT*) des chaînes a I S ^=*> CC

<£ (G) = j a | s ^> a avec a e I* |

Exemple
Soit V = j œ.p.s|
Selon la définition donnée au paragraphe 1.213. le vocabu-
V est l'ensemble V* :

v* = | e,a,p,ac:,aS,aû£, ... I .
1
La p h r a s e 'ûXCp e s t un élément de X(G) .
- 47 -

Remarques
1. La classification des grammaires proposées par Chomsky est aussi
valable pour les langages engendrés par ces grammaires.
2. Par abus de langage, nous parlons par la suite de langage à précé
dence simple (LPS) pour désigner un langage engendré par une GPS
ou une GPF.

1,22. Représentation des grammaires,

1.221, Représentation^de BACKUS NAUR fp1l] .=

Utilisons les symboles métalinguistiques :

et désignons les éléments syntaxiques constituant le vocabulaire non


terminal par leur nom placé entre chevrons. Prenons pour exemple une
grammaire particulière d'expressions arithmétiques admettant pour
vocabulaire terminal :

V T = X = | A , B , C , * , / . + .- |

Le vocabulaire non terminal est :

VN=N= < vari able >, < op.mult. >, <.op.add.>, <iterme>, <• exp. arithm. > I

Désignons par <.E.A.> l'axiome (abréviation de <, exp. arithm. > ) . La gram-
maire que nous utilisons pour définir des expressions du type 'A/B-C'
admet l'ensemble des productions suivantes :

1 . <• variable > =A


2. =B
3. =C
k. < op.rault.>
5- =/
6. < op.add.>
7-
8 . < terme > = <variable >
9. =< terme > < op.rault.> < variable >
10. <E.A.> =<terme>
11 . =<E.A.> < op.add.> < terme>
- 48 -

L'ensemble des 11 productions écrites sous la forme précé-


dente constituent la représentation BNF de la grammaire G(<E.A.?).

1.222. 5eprésentation_à_l^aide_d^un^graphe.

Nous utilisons une représentation particulière qui s'écarte


légèrement de la représentation classique :
- Le plan de représentation est quadrillé par des lignes fictives.
Verticalement, chaque zone est désignée par une lettre de l'al-
phabet. Horizontalement, chaque zone porte un numéro.
Si c'est nécessaire, nous faisons référence à un élément du
graphe par l'intersection fictive des deux droites horizontale
et verticale. Ainsi, chaque élément est défini par ses coordon-
nées.
- Les symboles concaténés dans le membre de droite d'une produc-
tion sont représentés horizontalement au même niveau. j
- Les alternatives, pour un élément syntaxique, sont représentées
verticalement.
- Lors de leur définition, les éléments syntaxiques sont entourés
par un cercle. Ailleurs, ils sont encadrés par un rectangle.
- Les éléments de base de la grammaire figurent dans un rectangle
Deux critères différencient un élément du vocabulaire de bas
d'un élément syntaxique, tous deux encadrés par des rectangles : d'une
part l'utilisation du nom de l'élément syntaxique placé entre chevrons
d'autre part le rappel des coordonnées où cet élément a été défini.
A titre d'exemple, la figure 1-8 représente le graphe de la
grammaire G(<E.A.>).

1.23- Recherche du langage.

1.231• Exposé_du_groblème.
Le problème qui nous intéresse est de définir un langage
simple engendré par une grammaire à indépendance contextuelle, au sens
de Chomsky, de façon à ce que la mise en oeuvre de l'analyseur qui le
traite soit la moins compliquée et la plus efficace possible.
k9 -

B D

2 f<ter t>\
m I <*•*» s , \Op. adds» < lerme>

< l , r n > < variable»


" Ai A4

A a c # /

FIG 1-8 GRAPHE DE LA GRAMMAIRE G(<E.A>)


- 50 -

Nous abordons le problème sous les deux angles des grammaire;


algébriques et des propriétés que nous pouvons directement tirer de
l'ensemble des productions définissant la grammaire. De plus, nous
essaierons de profiter au maximum des propriétés concernant la somme
de langages, de t'lie sorte que le langage que nous obtiendrons soit
la somme de langages partiels plus faciles à étudier séparément.
Un langage à indépendance contextuelle peut être défini par
un système d'équations dans l'algèbre comportant deux lois de composi-
tion internes opérant sur l'ensemble des parties duraonoïdeX :

1. Une loi notée + (réunion ensembliste de chaînes), commutative,


associative, indempotente, ayant comme élément neutre l'ensemble des
chaînes vides.
2. Une loi sans notation opératoire (concaténation), associative,
distributive par rapport à +, non commutative, ayant comme élément
neutre la chaîne vide. j
Rappelons que dans la théorie des grammaires algébriques,
l'utilisation des systèmes algébriques a pour but de trouver des sys-
tèmes d'équations équivalents et non celui de trouver la solution ex-
plicite de ces systèmes. De plus el.i e permet d'agir sur les grammaires
à indépendance contextuelle, comme s'il s'agissait d'expressions régu-
lières.
Par ailleurs, le système d'équations s'obtient directement,
à partir des règles BNP en associant à chaque élément A de X (ensemble
des non terminaux), "l'expression polynSmiale" :

m + ... + m
H

1 n
et l'équation :
A = m. + ... + m
1 n
où les symboles non terminaux sont considérés comme des "variables"
prenant leur "valeur" dans l'er.semble des parties de X*.

Exemple 1
Considérons la grammaire G admettant les règles de produc-
tions suivantes ;

C :: =Cd | .3C TJ ï
D ::=bC|JblJDb )
- 51 -

Pour chaque «. ^ N, nous définissons l'équation :

A = fc + ... + <X lorsque As Ï=*J | . . . |« .

Relativement à la grammaire G, nous obtenons les deux équations algé-


briques suivantes :

C=Cd+DC+b
D=bC+Cb+CDb-

Nous pouvons les écrire sous la forme matricielle symbolique :

/d b+Db \
(C D) = (C D ) + (b bC)
\ 0 O /

1.232. ÇïSSKiESH.âitlSïïSïSS (Ç3oJ , (c4oJ, [îîaoj .

A - P r o p r i é t é s générales et i n t é r ê t des grammaires algébriques.


Nous avons groupé dans ce paragraphe l e s p r o p r i é t é s fonda-
mentales des grammaires algébriques.
Soit Z un alphabet f i n i .
Désignons par I * l e monoïde l i b r e engendré par £ , par Z
l'ensemble des mots non vides de I * et par 1 l e mot v i d e .
Si x € Z*, | x | désignera sa longueur.
Un langage L sur Z e s t une p a r t i e de Z*.
Définissons sur l'ensemble des langages •£ (Z) l ' o p é r a t i o n b i -
n a i r e ' p r o d u i t ' suivante :

£(Z) J X ( I ) - * i ( Z )
{L , L") — * LL' = | x y I x Ê L et y € L ' J.

(Z) est un monoîde dont l'unité est 11 j.


Désignons par L+L' la réunion de deux langages L et L'.
Soit enfin N= S- S un ensemble de variables repré-
sentant des langages sur Z.

Définition 1-16 : une grammaire ALGEBRIQUE G(.%%!:) est un système


d'équations algébriques de la forme (s^) dans lequel m., sont des monô-
mes à coefficients dans Z définis par des variables non commutatives
de N" s
- 32 -

, <«1>
S =m. + ... + m ,
n in nlcn /

Définition 1-17 : une SOLUTION d'une grammaire algébrique est un


n-uplet de langages sur X vérifiant les équations du système ( s j ,

Définition 1-18 : une grammaire algébrique est dite PROPRE si :

1 , Vii k. » 1

' 1,S. .. . , S I.
J.J 1f ni

Théorème de SchLltzenberger.
Une grammaire algébrique propre, G(>T,I) admet une solution
et une seule. C ' est le n-uplet <.L(G, S. ) , ..«, L(G,S )>.

Exemple 2
Considérons le système d'équations algébriques suivant :

M=M R + N.

M et S sont deux vecteurs ligne et R est une matrice carrée


pxp dont les er trees sont des expressions régulières.
La solution de ce système est :

M=i>: R =N R + N (théorème d'Arden)

t- *
ou R et R sont respectivement la fermeture transitive et reflexive
et la fermeture transitive de R.

Corollaire du théorème de Schtltzenberger.


Soit G(N,Z) un système algébrique propre, c'est-à-dire une
grammaire algébrique propre solution du système (s-). Soit G un systèir
algébrique à coefficients dans «£(G) obtenu en remplaçant dans les mem-
bres de droite de (s ) certaines occurrences des variables par le lan-
1

gage L(G,S.) correspondant.


^LfG,^.)?, pour i compris entre 1 et n est l'unique solutior
du système G ainsi obtenu.
- 53 -

Définition 1-19 : une grammaire algébriq<- -3t REDUITE si :

V S S. N , L(G,S)^0 (0: ensemble vide).

Définition 1-20 : une grammaire algébrique G(N,I) est dite en


POHME NORMALE DE GREIBACH si toute équation de ( s. ) est de la forme :

S +
i = «H-il •" ^"ild
où a. s I et m. .ê N*.

Définition 1-21
—-
: soit M„
S.j_»a
= l
m± j. ê N I a.=a|
j I
.
Une grammaire en forme normale de Greibach est simple si l'en-
semble M- est réduit à un seul élément, c'est-à-dire :

V eZ
a et V S Ê N *B,«-|»s, |- a

Défini tion 1-22 : soit L C l . L est un LANGAGE SIMPLE si et seu-


lement si, il existe une grammaire simple G(N,X) et m S N tels que :

L(G,m) = L.

B - Remarque s

1. Soit G une grammaire et A€.N, Il y a recursivite à gau-


che si :
A = > Au.
La recursivite à gauche est particulièrement nuisible dans la plupart
des algorithmes de compilation. Une solution pour éliminer cette re-
cursivite est la forme normale de Greibach.
2. Reprenons l'exemple 1. Le système sous forme matricielle
+
est : M=MR + N et il admet pour solution M=£R*=XR + N (Cf exemple 2 ) .
Nous disposons d'une équation à p (ici p=2) indéterminées pour R' donc
on peut se servir pour obtenir la solution M cherchée d'une part et
obtenir un algorithme pour la forme normale de Greibach d'autre part.
Nous pouvons écrire :
; a (3 • , d b +Db a (3 , , d b + Db
1 !
«•'• ii J *
\ Jf o ' c 0 Si C 0
- 5^ -

Pour les éléments syntaxiques originaux on obtient la forme normale de


Greibach. Par contre pour les nouveaux éléments syntaxiques une modifi-
cation de leurs règles est nécessaire. Elle peut être facile dans les
cas simples ou poser quelques difficultés lorsqu'il s'agit de systèmes
compliqués. Nous exposerons plus loin une autre technique pour élimine:
la récursivité. Les deux techniques peuvent être complémentaires.

C - Propriétés fondamentales des grammaires et des langages


simples.
1. Soit uv S £ , m €. N et G(N, T.) une grammaire simpli
uv £ L(G,m ) ssi 3 ïm é N I

m —*• um, m —*• v 1

2. Le produit de deux langages simples est un langage simi


3. Le produit de deux langages simples est une loi simpli-
fiable à droite et à gauche, c'est-à-dire :

LL' = LL" =?> L' = L"


L'L = L"L = » L' = L".

Définition 1-23 : soient M un monoîde et a, b t c des éléments de 1


a est un ATOME de M si :
b^1 , c^1 =?> a^bc.

Définition X-Zk : soit«^(£) le monoïde défini par l'ensemble des


langages simples sur l'alphabet Z augmenté du langage réduit au mot vi-
de j 1|. Les atomes de ^(Z) sont des LANGAGES ATOMIQUES.
4. Tout langage simple est le produit d'une manière uniqui
d'une suite finie de langages simples atomiques {théorème de Coureelle

D - Conclusions.
1 . L'utilité de la représentation algébrique des grammairi
est de nous permettre de travailler avec les grammaires à indépendance
contextuelle, de la même manière qu'avec les grammaires régulières. Xoi
savons par ailleurs qu'un langage est régulier si et seulement si il e
reconnu par un automate fini. Nous exposerons plus en détail, au cliapi
tre II, les automates et leurs relations avec les langages.
- 55 -

2. Nous pouvons aussi utiliser la représentation algébri-


que des grammaires afin de trier les variables, d'éliminer si possible,
la récursivité et obtenir la forme normale de Greibach.

1.233. L®s_conditions_d^açcegtabilité_de_P [Â10J.

1
Nous avons résumé sous la rubrique "conditions d acceptabi-
lité" les différentes transformations qu'a subies la grammaire du lan-
gage ÎIEPTUNIX. En effet, pour des raisons d'efficacité, il est nécessai-
re de minimiser le nombre d'éléments syntaxiques de la grammaire, le
but final étant une économie de temps et d'espace pour l'analyseur.

A - Inexistence d'élément syntaxique improductif.

Définition 1-25 : un élément syntaxique est IMPRODUCTIF lorsqu'il


n'aboutit pas à une chaîne terminale.
Désignons par l(N) l'ensemble des éléments syntaxiques im-
productifs, îîous avons :

I(N) = N-|x €. N | î3a 6. Z* avec x—>•* j (2.8)

Le problème qui nous intéresse est d'éliminer I ( N ) de la grammaire.

Définition 1-26 : soit A £ V. Définissons l'ensemble des


PREDECESSEURS de A de la manière suivante :

A = | x e N I x=^a avec a £ A*l. (2.9)


Afin d'obtenir A, nous avons utilisé l'algorithme récursif suivant :
a„ ) A = A
1' o
a„) A. =A.OJyêNly->x
+ 1 avec a 6 A* |

I l e s t a i s é de t r o u v e r :
a„) A„ = A LI l x 6 X I x -»• CC avec a £ A' I
3 1 o i o '
a^) A = A U | y é N I y -> g avec
2 1 (3 fe A* |
Dans c e s c o n d i t i o n s , i l e x i s t e un e n t i e r m (m $ k a v t c k l e nombre
d ' é l é m e n t s s y n t a x i q u e s ) t e l que i
a.) A m = 1.
p' m
- 56 -

Nous avons appliqué cet algorithme à la grammaire d'axiome


<PRÛGRA>, G(<PROGRA>), grammaire définissant l'écriture des équations
du système utilisateur. Une fois 1 ( G ) = N-£ trouvé, un nouvel ensemble
P' est obtenu à partir de P. L'intérêt de cette étude pour la grammaire
G(<PROGRA>) provient uniquement du fait, comme nous le verrons au cha-
pitre II, que nous avons adopté une méthode d'analyse fondée sur les
règles de precedence.
Il résulte des propriétés énoncées précédemment que la nou-
velle grammaire G'=(N',Z',P', <PROGRA>) ainsi obtenue, est une grammaii
équivalente à la grammaire de départ G=(N, I,P ,<PROGRA>) . Par conséquenc
les deux langages engendrés par ces grammaires sont équivalents.

B - Inexistence d'élément syntaxique inaccessible.

Définition 1-27 : x € N est dit SUCCESSEUR de y £ V * si et seule-


ment si : t

3a et M V* I x ^ £Xyj3.
Nous noterons cette propriété : x $ y.
Si nous avons x — C£y(3, x sera dit SUCCESSEUR IMMEDIAT de y ei
nous écrirons x $ Y>
Q

Définition 1-28 : tout élément syntaxique non successeur de la


racine est dit INACCESSIBLE.
Nous procédons de la même manière que dans le cas d'éléments
syntaxiques improductifs. Nous cherchons donc 1'ensemble l(G') des élé-
ments inaccessibles :

I(G' ) = V» - | y e V 1 <PROGRA> $ y L

De l'ensemble P', nous enlevons toutes les productions contenant des


éléments de l(G'). Nous obtenons une grammaire G"=(N" , £" ,P" ,<PROGRA>)
équivalente à la grammaire de départ et engendrant un langage L(G")
équivalent à L(G') et à L ( G ) .

C - Inexistence de production vide.

Définition 1-29 : tout élément syntaxique se réduisant à la chaîne


vide est dit VIDE.
S'il se réduit par ailleurs à une chaîne terminale non vide,
il est SEMI-VIDE et appartient à un ensemble noté ^ ( G " ) . S'il ne se
- 57 -

réduit qu'à la chaîne vide, il est ESSENTIELLEMENT VIDE et appartient


à un ensemble V„(G"),
Il est évident qu'un élément x de N" est non vide si et si
seulement si, il admet au moins un symbole terminal pour successeur.
Nous avons résumé ci-dessous la métbode qui nous a permis de
débarrasser la grammaire G(<PROGRA>) des productions vides :
1. Si une production ne contient qu'un élément syntaxique vide, elle
est vide et doit être éliminée. L'élément syntaxique qu'elle définissait
est éliminé de toutes les autres productions.
2. Si une production contient au moins un symbole terminal, elle ne
peut pas être vide et doit être conservée.

Le résultat de cette étude est un nouveau quadruplet


M m ,lf
(N * , Z iP"" ,<PROGRA>) définissant une grammaire G'" avec N" =N"-ir(G")
et 2"'s I" fï V'."

D - Vérifier que le langage est non vide.


Le langage est dit vide, si par suite d'une mauvaise écriture
des productions, la grammaire ne permet de produire aucune phrase ter-
minale. Nous donnons un exemple simple afin d'illustrer cett^ notion.
Soit le quadruplet (}S , X,Y,Z ,P,S) définissant la grammaire
G(s), avec P :
S::=XS|YS|ZS«
Le langage L ( G ) engendré par G(s) est vide.

E - Vérifier que tout élément syntaxique est défini.


Ceci suppose que tout élément syntaxique apparaissant comme
membre de droite d'une règle doit appara' cre une fois comme membre de
gauche d'une autre règle,

F - Vérifier 1'unicité de 1'axiome.


En effet, s'il existe plus d'un axiome, au plus un axiome esc
accessible. Alors la grammaire peut ne plus avoir sa raison d'être éca

G - Vérifier la "convergence" de la grammaire.


La condition de "convergence" de la grammaire est nécessaire
pour faciliter de programmer l'analyseur du langage. Elle a pour but de
vérifier que l'analyseur ne cycle pas sur lui-même, dans une "boucle
- 58 -

infinie". Dans ce but, il faut s'assurer que chaque élément syntaxique


admet au moins une règle où il n'intervient pas comme premier élément
du membre droit. Toute récursivité à gauche de la grammaire doit être
éliminée.
Nous avions déjà abordé ce problème au paragraphe 1.232. Nou
allons, à présent, exposer une méthode permettant d'atteindre facile-
ment l'objectif fixé fj3o], £F3I1 •
Soit e la chaine vide, tf un symbole désignant l'interdiction
et 5 un symbolisme permettant de représenter les deux éventualités
suivantes :
1. S = e si r=s
rs

2. S r s = <P si ry*s.

Utilisons la notation condensée suivante :


L A L B
i ~~* i ' j j i (2.10)
f
afin de désigner une répétition de règles selon le modèle (2.10 ).

|L B
h - " W n ' V a i ' ••• n m
(2.10'

n 1 1n' 2 2n ' n n

Dénombrons l'ensemble des "L et définissons autant d'élément,


syntaxiques intermédiaires qu'il est nécessaire pour pouvoir écrire
(2.10) sous une forme où. aucun des A. ne commence pas L.. c'est-à-di
interdisons les règles de la forme (2.11).

A ± — Ljtt (2.11)

Si nous utilisons le symbolisme S défini précédemment, nou.


obtenons (2.12).

(2.12)
S |B .X,.
rs rt ts

syntaxiques intermédiaires X . La grammaire ainsi transformée est équ


- 59 -

valente à la grammaire de départ. De plus, nous pourrons éliminer par


la suite les règles où y intervient.
D'un autre côté, la grammaire ne doit pas présenter une récur-
sivité indirecte. Nous allons décrire ce phénomène sur un petit exemple,
soit :
. . . Sn . ,.— s

(2.13)

•* s „

Si aucune réduction à un élément terminal n'est assurée avant S « ,


n-1
(2.13) peut amener l'analyseur à cycler sur lui-même. Rappelons que
cette récursivité indirecte peut se détecter en prenant la fermeture
transitive de la relation S. donne S.. En effet la matrice associée
possède des 1 dans la diagonale principale.
1.234. Remarques.

A*- La plupart des conditions développées paragraphes I.232 et


1.233 sont incompatibles par paires. Leur importance est que certains
algorithmes d'analyse supposent qu'elles sont satisfaites. Par ailleurs,
elles peuvent affecter le processus de compilation, en particulier au
niveau de la sémantique.

B - Lors de l'exposé de la phase d'analyse (chapitre II), nous


verrons que des règles a priori de décision sont utilisées dans la
programmation de l'analyseur. Cette méthode s'avère efficace lorsque
les ensembles de mots commençant les différentes règles de définition
d'un élément syntaxique sont disjoints. Par exemple,soit la grammaire
G (s) admettant pour ensemble de productions :
1

1. S — X 2. X - - AB/AC
1 , .
La grammaire G-(S) suivante est une grammaire équivalente permettant
une analyse plus efficace :

1 . S -*- X 2 . X -r AY 3. Y-*- B/C

C - Compte tenu de tout ce qui précède, nous pouvons dire que la


grammaire, dans chaque cas, est redéfinie par utilisation de ''transfor-
mations distributives". Malheureusement deux difficultés essentielles
peuvent surgir :
- 60 -

a - L'obligation d'utiliser de nouveau la chaîne vide. En effet, soi-


G_ ( S ) avec :

1. S — X 2 . X - A.JAB 3. B - BC
4. C — BlD .

Les transformations distributives peuvent nous donner G„(s) comme nou-


velle grammaire :

1 . S — X 2. X — AZ 3. Z - e|B
4. Y -, XC 5- C — B|D .

G_(s) présente une anomalie à la règle 3.

b - A partir d'une grammaire, nous pouvons aboutir, au bout d'un certa:


nombre de transformations distributives, à la grammaire de départ. Par
exemple soit G_(s) :

1 .S - A 2. A - Xlï 3 . X - B(LX

3. Y ->• C|LY .

Une p r e m i è r e s u i t e de t r a n s f o r m a t i o n s peur d o n n e r G„(5) :

1 . S —A 2. A-B1CILYILX 3 . X—BlLX

4 . Y - C|LY .

Une seconde suite de transformations permet d'obtenir G„(S) :

1. S — A 2. A - BlCILZ 3. Z — X l Y
4. X - BlLX

A ce stade, Z, X ec Y présentent les mêmes inconvénients vis-à-vis de


G„(s) que A, X et Y vis-à-vis de G_(S).
- 61 -

1.3. PRESENTATION DU LANGAGE.

1.31. Introduction,

Un langage formalisé n'est que le support matériel de la pen-


sée du programmeur. Lorsqu'un utilisateur s'en sert pour transmettre
une information, cette dernière devient une forme de ses connaissances.
Toute opération à l'aide d'un programme écrit selon les con-
ventions de définition du langage est considérée, par le traducteur de
ce langage, comme une suite de caractères. Elle doit devenir une suite
de caractères binaires, servant à commander les circuits de la machine.
En fait, un programme est une description d'un schéma de calcul ; nous
l'écrivons en faisant référence à la signification des instructions
que nous utilisons.
Ecrit par référence à sa signification algorithmique, un. pro-
gramme est exécuté d'après son seul aspect syntaxique- Le problème est
de savoir si ce programme a bien la signification que nous avons voulu
lui donner
A tout objet manipulé par l'informatique sont attachés deux
attributs : son NOM et sa VALEUR. Suivant les cas, l'un ou l'autre des
attributs doit être pris en compte. Illustrons cette notion à partir
d'un exemple. Considérons, à cet effet, l'opérateur ' = " et proposons-
nous de coder une équation algébro-différentielle simple :
X=Y (3.1)
Faisons abstraction de la notion de relation (comparaison de X à ï) ;
nous avons toujours deux interprétations possibles :
1) On donne à la variable de nom X la valeur de la variable de
nom Y (instruction d'affectation en FORTRAN ou en PL/1 ) .
2) On donne à la variable de nom Y l-> valeur de la variable de
nom X (opération d'égalité en mathématiques).
r
L'opérateur '= est source d'ambiguïté dans la description des équa-
tions algébro-différentielles.
D'autres ambiguïtés sont possibles. Par exemple, dans le cas
;
des paramètres formels, une ambiguïté existe entre les attributs N OM
et VALEUR, lors des échanges entre programmes. Considérons par exemple
l'instruction PL/1 suivante ;
- 6a -

X = FONCTION(X,Y) ;

où PONCTION est une certaine fonction de deux variables X et Y d'un sys


tème d'équations algébro-différentielles. A gauche du signe '=', la va-
riable X a l'attribut NOM et comme paramètre transmis au programme
PONCTION, elle possède l'attribut VALEUR.
Signalons que pour éviter l'ambiguïté liée à l'opérateur '=',
nous avons exploité le fait que la méthode d'intégration est implicite
[M3OJ. Par conséquent la description d'une équation admise par le sys-
tème NEPTTJNIX peut être de la forme (3-2).

£{x,x,t)=0 (3.2)

Alors, par souci de commodité d'écriture, le langage NEPTTJNIX permet de


n'écrire que le premier membre de 1'équa cion (3 - 2).

1.32. Les éléments du programme.

1.321. Le_jeu_de_caractères.

1) Les 26 lettres de l'alphabet (A à Z),


2) Les 10 chiffres décimaux (0 à 9 ) .
3) Les caractères spéciaux suivants :
- le blanc noté
- le signe d'affectation =
- le signe d'addition +
- le signe de soustraction
- le signe de multiplication ^
- le signe de division
- la parenthèse ouvrante (
- la parenthèse fermante )
- la virgule _
- le point
- le symbole de dérivation par rapport à la variable indépendante <
- le point-virgule ;

- les deux points :


- le point d'exclamation ;
- le symbole de dérivée partielle 5
- 63 -

- le symbole d'exponentiation |
- le symbole spécifiant le facteur de cadrage
d'une constante " (un seul caractère)

1.322. Les identificateurs.

Lors de l'exposé de la programmation du compilateur, nous


donnerons une définition des identificateurs sous forme BNF. Nous rappe-
lons, cependant, qu'un identificateur est formé d'une chaîne de un à
six caractères alphanumériques, le premier étant obligatoirement alpha-
bétique. Un identificateur est pris en compte lorsqu'il n'apparaît pas
dans un commentaire. Il peut être précédé ou suivi par plusieurs blancs.
Il peut définir :
- le nom d'une variable
- le nom d'une fonction incorporée
- le nom d'une fonction-utilisateur (écrite en langage procédural)
- un mot-clé (sa longueur, dans ce cas, peut exéder 6 caractères).

1.323. Le commentaire.

Les commentaires sont permis chaque fois qu'un blanc est au-
torisé dans les données. Leur format général est le suivant :
a - pour le début : le mot 'COMMENTAIRE' ou l'abréviation 'COMMENT',
b - pour le texte : n'importe quel caractère excepté le point-virgule,
c - pour la fin : le point-virgule ';',
Un commentaire peut être codé sui une ou plusieurs cartes.

1.324. Les constante)^.

Nous définirons les constantes en temps utile sous forme BNF.


Elles sont constituées des chiffres décimaux avec la possibilité r • re :

1 - précédées d'un signe.


a - séparées en partie décimale et en partie fractionnaire. Le point
est alors le réparateur autorisé.
3 - postfixées d'un facteur de cadrage. Le caractère unique suivant
" est le symbole utilisé à cet effet.
- 64 -

1.325. Les mots clés.

Ce sont :
- le mot COMMENTAIRE
- les noms des blocs : SYSTEME, DECLARATIONS, LINEAIRE, NONLXMEAI
et PIN.
Les noms de bloc sont pris en compte lorsqu'ils sont précédés du carac
tère spécial ï .

1.326. Les cartes à introduire.

Les cartes sont analysées à partir de la colonne 1 jusqu'à


la colonne 72 incluse.

1.33- Le programme «

Il se présente sous la forme de k+2 blocs.


Le premier bloc est obligatoirement le bloc SYSTEME. Le seco
est le bloc DECLARATIONS. Les k blocs restants sont les blocs d'équa-
tions à analyser. Ces derniers peuvent avoir comme noms, soit LINEAIRE
(pour autoriser le compilateur à optimiser le code produit), soit
NONLINEAIRE (dans le cas contraire).
Tout bloc est désactivé par la rencontre du mot-clé :
JFIM
Le point final termine le programme.

1.331. Le premier bloc {! SYSTEME )_.

La grammaire qui sert à le définir est donnée figure 1-9.


Il permet de spécifier :
1) les caractéristiques de 1"intégration
2) les directives ou les options du compilateur.

A - Les caractéristiques de 1'intégration.


Elles sont groupées sous les rubriques suivantes : PAS,
PRECISION, INTERVALLE. La première contient les trois spécifications
des pas de DEMARRAGE, pas MINIMUM et pas MAXIMUM, prises dans un ordre
quelconque. La seconde est réduite à une constante et la dernière con-
tient la spécification du temps MINIMUM et du temps MAXIMUM.
Vocabulaire terminal: Vocabulaire non terminal: Ensemble des règles de production:

t 1) <SDCLION> :
<SYSTEHE>
( 21 := PAS
INTERVALLE
PAS <SDCL!Otl>
< 3) := PRECISION
FPECISIOtl
TOLERATE
<VALEUR>
t 4i ;= TCLERAIKE
INTERVALLE
<SDCLUN$>
( 5) := OPTIONS
OPTIONS
<SDCLUH>
( 6) «VALEUR> ::= ENTIER
EUT1ER
<S0CL5US>
<SDCLSU>
(
(
7)
SI
:: = = DECIMAL
DECIMAI <SDCIUK> : HOTCLE
<SCCLTE> 1 91 := <S0CLUIÎ>
<5DC10R$>
I 10) <S0CLUN> : := <S0CIU1Î> = <VALEUR>
<5DCL03>
<SDCIBL>
I 111 <SDCLS'JS> J :; == <SDCUIH>
TïOÏCLE ( 12) <SDCLSUS>
:: = , <SDCLUH>
<SDCLGRt>
FOIHTEX ( 13) <sacisu> <SDCLSU»>
DEEBL
<SDCLGR>
( 14) <SDCLTE> ; := <EDCLICfl>
FIliBL ( 15) <£DCIQRÎ> : ;= <S0CLTE> <SOCLSU>
DEBGR ( 16) <SDCICR> ::r:= <SDCL0R»> ;
SUIGR ( 17) <SDCLBL> : DE6EL <SDCLGR>
FIHGH ( IS) <S0CLGRS> : := <SDCLDL>
FIKBL

( 1?) := <S0CLGRS> SUIGR <SDCLBL>


i :ÛI := <S0CtGRS> FItKR
I m <S3CLG9> :: =
= <S0CLGR$>
l 22) <5YSlEi:E> : DE3GS <SDCLGH> FoinrEx
:=

Axiome <SYSTEME>

FIG 1-9 Quadruplet définissant la grammaire du premier bloc


- 66 -

B - Le- '•ions du compilateur.


Elles sont au nombre de neuf, Seule là première est obligate
re. Elles sont séparées par un ou plusieurs blancs ou une virgule. B U
peuvent être écrites sur plusieurs cartes et sont terminées lors de la
rencontre du point virgule. Ce sont :
1. ORDRE pour donner le nombre d'équations et de variables du
du problème à simuler.
2. EDITION pour obtenir sur listage les cartes introduites.
3. CHAINAGE pour obtenir sur listage les références croisées
(renvois) des variables et des constantes.
k, OBJET pour obtenir une sauvegarde sur cartes des fieniers
nécessaires à l'étape suivante.
5. NOMBRE pour dimensionner dynamiquement la cable des constantes
numériques.
6. SORTIES pour obtenir, à l'étape d'intégration, une sortie Tabu-
lée des variables demandées en sortie. '
7 et 8. LIN et NLIN pour dimensionner dynamique me ni; les tables des
codes intermédiaires.
9. COURBES pour obtenir, à l'étape d'intégration, l'allure des
courbes des variables demandées en sortie.

1,332, Leasee ond_bloc_ (^DECLARATIONS ),.

Il obéit aux règles de la grammaire Q(<=DECLAR>) donnée


figure 1-1 0.
Les données qu'il contient servent lors de l'analyse des 1~
blocs suivants. Ce sont des déclarations de deux types ;
a - les déclarations obligatoires
b - des suggestions ou des souhaits de la part de l'utilisateur.
Dans la première catégorie rentrent les noms des variables
utilisées et les noms des fonctions que l'utilisateur désire incorpore
au système NEPTUNIX lors des deux étapes suivantes (Cf fig. 1-3).
Dans la seconde catégorie rentrent les types des variables,
leurs initialisations et éventuellement la liste des variables deman-
dées en sortie.
Un problème est correctement introduit si toutes les variabl
utilisées ainsi que les fonctions externes sont connues. De plus, au
moins une variable doit être demandée en sortie.
Vocabulaire terminal: Vocabulaire non terminal; Ensemble des règles de production:

l 11 <DCLIO> : VARIABLE
<DECIAR» ( 2) t SORTIE
<QCUE> t Si s TEMPS
<DClGRt> t 41 S UOHLIHEAIRE
<DCLGR> 1 51 s IHIÎÏAÎ.E3
-DCtons ( 61 s FONCTION
<ocisu> ( 71 <VALEU«> s NOMBRE
<QCLSUS> 1 SI <VAiEUS> HOMERE
*VÀLEU5> ( 91 <VALEU> : » <VALEUÎ> ,
<ocuim>
<G£UCH*>
( 101
t 111
«3A.UCUO : a = (
1 <G*UCUS> <VALEU> t
FOIHIEX <VALEU> ( 12 1 <CAUCH> l «
s
s
<GAUCHS>
ÏOOlï <OCUÛ> * 13» <0CIUH*> i IQEIIÎ
<DClOL> I 141 i s <0CLUHS> s <GMJCH>
HÏBIEBE
<CCLIRI> ( 151 <DCLUM> : •s <DCIUM5>
«GSUCÏt* <DCLSUS» : s
D£B8l
<DCLDRt>
i n» <DCIUII>
( 171 <0CLSU*> <0CLU)l>
PINBl
OSEGH (
t
H t
191
<0EISU> =
a <octsos> ,
î
<0CLTE> <DCLÏO>
SUIGR
flIiGR ( £01 «OCICRO ' r = <QCUE> <6CLSU> i
VARUBIE t 21) <OCtOR > n~ <DCLDH$>
( 221 <0CtBL> : 0EB9L «0CLOH> fWBL
SORTIE
leurs 1 S3Ï *DCIGR*> J s « -'BClBt>
NU! IL INC AIRE 1 24) S <DCLGR$> SUIGR *DCLBL>
INITIALES < 2S1 .a <BCIG8$> FIHGR
fOiKTIOli
Axiome : <DECLAR> f 24» <DCLGR> : S. <DCtGR*>
I £71 <DECUR> : s DEBGR <DCLG9> POINTEX

FIO 1-10 Quadruplet définissant la grammaire du second bloc


- 68

J.. 333. ^®5 j2i2£5_d^équa^ions •

Ils doivent obéir à la grammaire G(*PROGRA>) donnée figure I-


Ils sont activés lors de la rencontre des symboles ;

! LINEAIRE ou INONLINEAIRE

Le dernier bloc doit obligatoirement se terminer par IFTS.'.


l

Ces blocs contiennent les équations du système à analyser


sous la forme :

n. : expression k ;

n. : expression j ;

(IL ,...,n.) sont des entiers attribuant un numéro aux équations décrit*
(un numéro ne peut, en aucun cas, dépasser l'ordre du système) et
expression décrit le premier membre de l'égalité :

f(x,i,t) = 0

Rappelons, au passage, que 1'égalité est supposée implicite et que seu;


subsiste le membre de gauche.

1.334. Exemple_simplifié.

Proposons-nous d'intégrer le système algébro-différentiel


admettant pour solution :

Y=cost

sur un intervalle de temps allant de 0 à 31.^16.


Compte-tenu de l'écriture mathématique des équations et des
conventions adoptées pour le système NEPTUNIX, nous utilisons, les car
tes de la figure I.-12. Sur oette figure nous avons résumé la manière
d'écrire le programme-utilisateur.
Vocabulaire terminai: Vocabulaire non terminal: Ensemble des règles de production:

<PROGRA> <DERIVEË> 1DEMT


<GAUCIIE> <IOFCMC> IQEMT 1
<XDFGMC> <y*ai*Bi.> ÎBElîT
«DOUBLE»> <DER1VEE>
<TERME*> <GAUCHE>
<8iOEQUt> <FRIH»XR> <VARIABL>
<ÊXPSÏM5> noraRE
<EXF5IK> <GAUCHE> <£XP5IM> ï
«DOUBLE> <IDFOMC> <EXP51H>
<BLOEfJU>
<EXPRES>
t 10) <SEC0tlQ> <FRIMAIR> )
I lit <EXFDHEN> ENTIER
<,iPFCllT> «SECOttt»
FQÎHTEX
<11IEE4U>
1 12) <EXF«IEII> 1
10EUÏ
H1.16PE <E5UAT» *1 1m
4)
<F*CÏEIR»
«TERME*>
<SECQHB>
<FACTEUR>
JACOBI <TEEME> t 151 <TEHMES> X <FAC1EUH>
<FÀCT&JR> < TERME$> <FACTEUR>
ENTIER <VASIABL>
«DERIVEE>
(
(
!*>}
17) <1EHME> <TERtlES> /
I t 10) <EXPSÏM*> <TERME>
OEEïiOH <P«?*tlE> < 19) <TERHE>
SUIIIOH <CCRE<ÏU> <ÏEH11E>

<5EC0UD>
<
1
201
21) -
<EXP5II1*>
«
<T£HHE>
<TERHE>
DEDE1U <EXP5in*>
FIIIECU <EXPCKEH>
<
t
22)
23Ï <EXF5IH> <EXPSIH4> -
IDENT JACOBI
1
<
24)
25)
<PARAME>
<OOUQLE*> «PARAFE> , *PARAtlE>
«DOUBLE*>
t
(
26 >
27) 'DOW)LE> <CCUBLE*> ,
t 291 <*PHSUÏ> <10F0tIC> • <ÛQUBU> 1
1 29) <EXPRES» «expsim
1 SO) <APFOUT>
t SI) <COnE']iJ> «EXPRES>
Axiome : <PROGRA> C 32 1 <EC1UAT> NUMERO ; <CQ9E<W>
t 331 *UH££qU> <£qU*F>
( 3*1 <B10EQU»> <UI!EEQU>
( 3SI <BLOEQU*> SUIIIOtl <W(EEQU>
1 3*) <8L0EGUÎ> FIHHCH
( 371 <BLOEQU> «Btaeou4>
t 38Î <PSQGH*> ÛEEtiQH <StOEQU> FOÏHTEX

FIGM1 Quadruplet définissant [a grammaire des blocs d'équations


; - CARTES DE CONTROLE:

compila tion*ordonnan cernent ^iradu et ion-préçompilation^mtégraU on

/*J0B=t1ICHELH.*^
//TEST JOB TIKE=lO.36>iMS3LÉVcL=U,lJ,EXCP=10a,SYSGUT=200OO
/»FROC DSN=SES.5ERF.NAKHLE.PR
//COHPIl EXEC NPTXlCOI.CARTs'/HC'.OECKSKD
//CDMP.SÏSIN 00 •»

2- LE PROGRAMME-UTILISATEUR EN LANGAGE NEPTUNfX;


le formai est libre entre les colonnes 1 à 72.
tes deux premiers blocs décrits respectivement par les grammaires G(<$YSTEME>)
et Q(<DECLARv) doivent apparaître dans le même ordre que dans l'exemple,
les équations décrites par la grammaire G(< PROGRAM peuvent apparaître dans
différents blocs LINEAIRE (pour optimisation), NONUNEAIRE (pour nonoptimisation).
f

la suite d'apparition des numéros des équations n'est pas nécessairement croissante.
le point final termine le programme.

'SYSTEME
ItfTERVALL£:MINirjK=0,HAXIK'JMs3]..416;
,,
PAS:HINIWM=l••-4,flSWrcJM=5'•-3,0EKt*RAGE=l
PRECISION:l"-3;
OPTIONS :CWCRE=S,tJUH=7S, EDITION CCUPSES;
!FIH
•DECURATICMS
VÀff:X,Y,Z,;fTCeT5,A.fCHTC;
SCSiX.Y.Z.JMWTS.^RTC;
INITlALISiriCN:X=f0,1),ï=(1,0),Z=f1,-11,
AKO3T5=(0,U,AHOBTC=ll,-lJî
!F:H
!HLÏH

2!Y**X;
l:X'-Y;
<*:,SK0<!TS-X>»Z;
5UMO;ITC-Y*Z;

3- FIN DU PAQUET DE CARTES

FIGI-12 Exemple simple de programme et d'utilisation du système


- 71 -

1.4. ORGANISATION DU SYSTEME NEPTUNIX.

1.41. Introduction.

La figure 1-3 constitue un schéma simplifié de l'organisation


générale du système NEPTUNIX. Il apparaît que ce dernier est composé de
cinq étapes communicant entre elles par l'intermédiaire d~ fichiers ca-
talogués ou temporaires. Ces étapes sont :
1 . Une étape de compilation du programme écrit en langage NEPTUNIX.
2. Une étape d'édition de liens en vue de l'étape d'ordonnancement-
traduc tion-préc ompilation.
3- Une étape d* ordonnancement-traduction-précompilation.
4. Une étape d'édition des liens en vue de l'intégration.
5. Une étape d'intégration.
Notons au passage que ces étapes peuvent être autonomes, à
partir du moment où le travail précédent a été sauvegardé sur un support
convenable. Nous donnons en annexe B les procédures que nous avons pro-
e t
grammées en langage de commande (IBM 360/9-1 IBM 370/168) permettant
d'exécuter tout ou partie de l'ensemble de ces étapes.
Comme introduction aux algorithmes utilisés et à leur implan-
tation en machinei nous allons décrire brièvement l'organisation géné-
rpJLe par étape, les moyens de communication entre programmes du compi-
xateur et les fichiers utilisés aux différentes étapes.

1.42. Organisation générale de chacune des étapes.

1.421 .. Etape_de compilation.

Le compilateur est composé de 28 programmes externes que nous


pouvons classer en sept catégories :
1 . Le moniteur MNMONIT
2. Les programmes d'analyse lexicographique :
CONVDEC (conversion d'une suite de chiffres en réel)
LTNSCAN (résolution des symboles)
NOMBRE {cen^ersion de caractères en entier de deux octets)
TRTVARI (traicernent des variables du système présenté par
1'utilisateur).
3. Les analyseurs syntaxiques et sémantiques :
- 72 -

ANASYST (analyse du bloc SYSTEME selon la grammaire G(<SYSTEME>)


ANADECL (analyse du bloc DECLARATIONS selon la grammaire
G(* DECLAR>) )
NONSEMA (analyse des blocs d'équations selon la grammaire
G(<PROGRÀ>))
k. Les programmes de calcul du jacobien :
CALDERI (synthèse des équations et préparation à la dérivation
formelle par le programme LINEDER)
LINEDER (calcul des termes du jacobien associés à des équations
figurant dans des blocs activés par le nom LINEAIRE)
NONDERI (synthèse des équations et calcul des termes du jacobien
associés à des équations figurant dans des blocs activés
par le nom NONLINEAIRE)
5. Les programmes de fin de traitement :
PINTRTT (traitement des quadruplets engendrés et sauvegarde sur
fichiers)
FIPUNCH (lecture et perforation des informations sauvegardées
sur fichiers)
6. Le sous-programme d'appel dynamique de l'assembleur :
LOADASM
7. Les programmes dits utilitaires :
ASMRECD (génération du sous-programme ÎBIBLIO d'extension de la
bibliothèq-'.e des fonctions)
CHAINAG (construction des références croisées constantes-équa-
tions et variables-équations)
EDITCHA (mise en page et édition des références croisées)
EDITERR (mise en page et édition des messages d'erreur)
EDITGEN (mise en page et édition des caractéristiques de la
génération)
EDITION (mise en page et édition des caractéristiques du problem
EDITSOU (mise en page et édition du programme-source)
ENCODER (passage du format symbolique des quadruplets au format
condensé)
ERREUR (écriture sur fichier des messages d'erreur lors de la
phase d'analyse)
- 73 -

ERREUR! (écriture sur fichier des messages d'erreur de la phase


de synthèse)
HASHING (calcul de la fonction d'adresse associée à un identifi-
cateur)
INCREME (incrémentation du pointeur caractère dans une carte lors
de l'analyse)
LECTURE (écriture sur fichier du programme-source et lectur3
d'une carte)
MISETAB (initialisation des tables des genres de l'analyseur
lexicographique).
Par souci de gain de place en mémoire centrale et dans le but
de ne pas pénaliser les systèmes de moins de 150 équations algébro-
différentielles, ces programmes ne sont pas en permanence en mémoire
centrale. En effet, lors de la génération du compilateur, nous avons
opté pour un recouvrement à 11 segments. Nous avons représenté l'arbre
associé à ce recouvrement figure 1-13. Dans ces conditions, le compila-
teur ne nécessite que 300 Koctets.
Par ailleurs, nous avons résumé figure 1-1k les différentes
phases de l'étape de compilation.

I.J+22. Etape_d'édition de liens en vue_de 1'ordonnancement-traduction-


précompilati on.

Un module chargeable est en permanence sur fichier catalogué


et sert de bibliothèque à cette étape. Il s'appelle SES.SERF.NAKHLE.
MODULES(ORDOPREC). Viennent s'ajouter à ce module le sous-programme
'SBIBLIO' créé par le compilateur NEPTUNXX et les fonctions de l'utili-
sateur. Le résultat de cette étape est un nouveau module chargeable
correspondant au pioblème que l'utilisateur désire trairer. Signalons
au passage qu'un recouvrement à six segments est adopté et que la struc-
ture de ce dernier est représentée par l'arbre de la figure 1-15.

I.k23- Etage_d^ordonnancement-traduction-précompilation.

Sur la figure 1-15, nous avons brièvement commenté le rôle


des différents programmes écrits pour cette étape. L'exécution de cette
dernière nécessite moins de 300 Koctets dans les mêmes conditions que
dans le paragraphe 1.1*21. D'un autre côté, nous avons schématisé figu-
re 1-16 son déroulement. Signalons pour finir que le programme créé
(SEXECCT) est passé à l'étape suivante. Il peut en même temps être sau-
vegardé sur cartes.
MNMONIT moniteur

EDITCHA
EDITERR sous-programmes LOADASM
EDITGEN
EDITNON d'édition.
EDITSOU

CONVDEC ERREURI
ERREUR s.p. d'analyse
HASHING CALDERI ENCODER
INCREME lexicographique UNEDER FINTRTT
LECTURE NONDERI FIPUNCH
LINSCAN et utilitaires.
NOMBRE
TRTVARl

MISETAB ASMRECL CHAINAG


ANA5YST ANADECL NONSEMA

Etape d'analyses syntaxique et sémantique- Etape de calcul Etape de fin de Etape d'appel dynamique
du jacoblen. traitementsclas- de l'assembleur traduction
sification et sau- du s.p. d'extension de
vegarde des la bibliothèque des fonctions.
quadruplets.

V
f DEBUT \ - 75 -

Initialisation

Analyses Syntaxique et sémantique-


Codage du programme sous forme
polonaise post-fixée.

fin normale?
< ~£~5ûT~
>
Dérivation formelle et calcul du Jaco-
bien. Génération de code sous forme de
quadruplets ordonnés.

édition du pro-

<
fin normale ?
y gramme-source
et des messages
d'erreur.
Traitement et classification des
quadruplets engendrés.

sauvegarde demandéeTs
<
jr~-—
Sauvegarde de tous les résultats de
la compilation sur cartes.

extension bibliothèque
<
i oui
P
Appel dynamique de l'Assembleur : tra-
duction du s.p. SSIBUO d'extension de
la bibliothèque des fonctions

y- *fr s°"'' r-r-


/sorties sur imprimantefS-* édition du pro
\ / gramme-source
gramme-sourci
( et des référen-_.y
ces croisées)

FIGiy Organisation générale du compilateur:le" moniteur


.C™D
MNMONIT
MNYMAIN création de l'environnement PL/1
ASMXEQ3 point d'entrée de sauvegarde de l'env. et d'appel- fonctions
MOTTNCN procédure principale
LES FONCTIONS-UTILISATEUR

SLECTUR lecture des fichiers communs LOADPLI appel dynamique ij


DECODER décodeur des quadruplets compilateur PL/1

IBISLIO engendré parle comp.NEPTUNIX pour résoudre tes CENTRAD centralisateur delà traduction des quadruplets en un
adresses des fonctions utilisées programme PLff équivalent
SDESfNT centralise les diagnostics et les traitements en cas PLITRAD traducteur en langage PL/1
d'interruption ou de fin anormale
IEXN ensemble des fondions math, incorporées
ITRADUC prog, d'aide au diagnostic d'erreur
A5MXEQ2 e.écution des quadruplets
ASCEND classement des tables par Inde» pour l'ordonnancement
CALFONC centralise l'exécution des quadruplets
CHAINER outil pour l'ordonnancement
FILCOPY perforation des fichiers nécessaires pour l'étape d'intégration
LIBER libération des zones de travail
LINK prétraitement pour l'ordonnancement
MIZVAL interface entre l'ordonnancement et l'exécution des quadruplets
MIZAD outil pour l'ordonnancement
MNYORDN centralise l'étape d'ordonnance <•; -
ORDROPT prog. d'ordonnancement de h .r-alrlc'e jacobienne
PIVGOSS choix des pivots
PREGOS choix des pivots

FI6M5 Structure du recouvrement adopté pour t'ORDONNANCEMENT-TRADUCTION-

PRECOMPILATION
Récupérer les paramètres du passage tians-
mis par langage de commande(JCL).

MNYORN:ordcnnanœment de lajaxbienne par execution


des quadruplets engendrés par le compilateurNEPPJXÏA.

I
Matrice singulière ?
Messages
d'erreur
<. >

traduction-précompilation ? ^ N -

oul

CENTRAD:traduction des quadruplets en un programme


PL/! équialent,S£XECUT, écrit sur le fichier
SORTIES.

LOADPU ; appel dynamique du compilateur PL/1; Ira'


duction du pragrarrmSEXECUT et sauvegarde du
binaire produit sur le fichier BINAIRPG.

T
FIN
MOTTNCN

FIG I-16 Organisation générale de l'étape d'ordonnan-


cement-traduction-précompilation • le moniteur
MOTTNCN
- 78 -

X.kZk* Etape d'édition de_liens en vue de l'intégration.

Un module chargeable, SES. SERF. NAKHLE. MODULES (OTEGRÀT) , ser


de bibliothèque à cette étape. Le programme SEXECUT créé à l'étape 3 e
les fonctions de l'utilisateur viennent s'y greffer. Le résultat de
cette étape est un nouveau module chargeable correspondant au problème
dont on cherche la solution.

: t e^a ti
1.425. ?ïâSî--ii S' ® ' 25• I

La description de 1'organisation de cette étape sort du cadr-


de notre étude. Une description en est donnée dans la référence [M3oJ
citée en bibliographie, Notons, cependant, qu'un programme, CALFONC,
sert d'interface entre le système d'intégration et les résultats acqui
à l'étape 3-

I
1.43. Moyens de communication entre programmes du compilateur.

Afin de faciliter la . impréhension des chapitres suivants, j


nous avons groupé, dans ces quelques lignes, les variables externes •.
permettant aux programmes du compilateur de communiquer entre eux. |
Principalement, nous avons :
1. PASSE2 (entier de 2 octets), un indicateur inhibant la dériva-
tion formelle quand il est égal à 0 et l'autorisant dan,
le cas contraire.
2. PASSE3 (entier de 2 octets), un indicateur inhibant la fin du
traitement quand il est égal à 0 et l'autorisant dans
le cas contraire,
3- LIGNE (chaîne de 132 caractères maximum), la carte-source à
analyser telle qu'elle se présente dans le format d'im-
pression.
k. SYM-CÛU (chaîne de 25 caractères maximum), le symbole courant,
5. SYM-SUI (chaîne de 25 caractères maximum), le symbole suivant.
6. SEPARAT (chaîne de 4 caractères), le prochain séparateur chercha
en cas d'erreur.
7. ARRET (étiquette) étiquette terminale en cas d'erreur à l'une
quelconque des phases de _, compilation,
;

8. TC0MP1 (une table de 50 valeurs entières de longueur unitaire


2 octets). L'attribution de chacune des positions est
décrite en annexe D.
- 79 -

Il convient de noter ...*in que certains fichiers décrits


paragraphe 1.441. servent aussi au transfert d'informations entre les
différentes phases de la compilation.

I.44. Les fichiers utilisés.

Les figures 1-17» 1-18 et 1-19 schématisent et groupent les


fichiers utilisés respectivement à l'étape de compilation, à l'étape
d'ordonnancement-traduction-précompilation et à l'étape d'intégration.

1.441. Fichiers_utilisés à l'étape decompilation.

Ils sont de quatre types :


1. Les fichiers propres au compilateur et servant de sauvegarde tem-
poraire des résultats intermédiaires du compilateur. Dans cette caté-
gorie, nous dénombrons les trois fichiers suivants :

- DONNEES
- ERREUR
- TEMPREC : fichier à accès direct permettant un déroulement effi-
cace de la phase de synthèse et de dérivation formelle.
2. Les fichiers propres au compilateur at passés à l'étape d'ordon-
nancement-traduction-précompilation. Sont groupés dans cette catégorie
les fichiers suivants :
- CINITIA : fichier des conditions initiales.
- CODOBJT : un fichier pe;mettant les liaisons entre les diffé-
rents fichiers.
- FONCTION : description des fonctions de l'utilisateur.
- GENERAT : quadruplets d'exécution.
- MATRICE : description de la matrice jacobienne sous forme
"creuse", selon le modèle exposé paragraphe I.45.
- PERPO : fichier de recopie sur cartes lorsque l'option OBJET
du compilateur est utilisée.
- SYSPRINT : fichier de sortie sur imprimante.
3. Les fichiers correspondant à l'appel dynamique de l'assembleur.
Ce sont les fichiers suivants :
Fichiers passés au» Fichiers temporaires
étapes suivantes

^INITIA

ANALYSE
et
^~~^kk£gfi£y£j^
DERIVATION FORMELLE
TEMPREC

-^k£«çwn?0
APPEL DYNAMIQUE de
^ASSEMBLEUR

F1QI-17 Les fichiers utilisés à l'étape de compilation


Fichiers /assis à Fichiers temporaires
l'ttipt d'intégration

APPEL DYNAMIQUE du
COMPILATEUR PL/1

FIG 1-18 Les fichiers utilises a l'étape d'ordonnancement-

traduction-précompilation
sa -

F IG 1-19 Les fichiers utilisés à ['étape d'intégration


- 83 -

- ASSEMBL : fichier correspondant à la génération par le compila-


teur du sous-programme SBIBLIO d'extension de la bi-
bliothèque des fonctions. Il constitue le fichier
d'entrée de l'assembleur.
- MICFICEX : fichier passé à l'étape d'édition de liens en vue de
1
1'ordonnancement-traduction-précompilation. L assem-
bleur y écrit le sous-programme SBIBLIO en langage-
objet.
- SORTIE : liste imprimée des résultats et des messages de l'as-
semblage .
- SYSFUNCH : fichier de sauvegarde sur cartes du programme-objet.
- MICISTR1, MIC22TTR2, MICINTR3 : fichiers temporaires de travail.
h. Les fichiers propres au système d'exploitation. Mous avons réper-
torié sous cette rubrique, les fichiers suivants :
- PLIDUMP : liste imprimée des statistiques du PL/1.
- 3YLSLIB : bibliothèque des macros pour l'assembleur.
- SYSUDUMP : image-mémoire en cas d'erreur d'exécution détectée
par le système d'exploitation.
Rappelons enfin que le programme en langage NEPTONIX est
fourni par l'intermédiaire du fichier SYSIN".

a
1.442. Fichiers utilisés à l^étape_d2_ordonnancemen^2tî; duction-préconi-
pilation.

Comme précédemment, ces fichiers sont classés en différentes


catégories.
1. Les fichiers provenant de l'étape de compilation :
- CINITIA
- CODOBJT
- FONCTIO
- GENERAT
- MATRICE
Les deux premiers fichiers sont passés à l'étape d'intégration. Les
trois derniers ne servent plus au—delà de cette éxape.
2. Les fichiers créés à cette étape et fournis comme données à l'éta-
pe d'intégration. Ce sont les fichiers ; ri
- 84 -

- FXLENB2 (appelé PICH2 à l'étape d'intégration)


- FILENB3 (appelé PICH3 à l'étape d'intégration)
- FILENMS (appelé SYSDT à l'étape d'intégration)
- PERFO (même rôle qu'au paragraphe 1.441)
- SYSPRINT (même role qu'au paragraphe 1.441)
H
3. Les fichiers correspondant à l'appel dynamique du compilateur PL/'
Les fichiers rentrant dans < -stte catégorie sont :
?
- SORTIES : fichier d'écriture du système d équations fourni par.
^utilisateur en langage PL/1 . Ce système d'équatiom
est enrichi du calcul du jacobien associé. Le pro-
gramme ainsi engendré s'appelle ÎEXECUT. Il sera fom
ni comme programme-source, au compilateur PL/1, pour
traduction. Ce programme possède trois points d'en-
trée. Le premier point d'entrée correspond aux inva-
riants du système. Le second point d'entrée groupe
les expressions calculant les termes du jacobien qui
dépendent de la variable indépendante. Quant au troi-
sième point d'entrée, il comporte les expressions de
calcul des termes non linéaires du jacobien ainsi que
les normes associées aux équations.
- BISAIRPG : fichier passé à l'étape d'édition de liens en vue de
1'intégration, après que le compilateur PL/1 ait char
gé le programme $EXECUT en langage-objet.
- SORTIE ; liste imprimée des résultats.
et des messages de la compilation PL/l.
- ÔYSPUNCH : fichier de sauvegarde sur cartes du programme-objet.
- SYSUT1 et SYSUT3 : fichiers temporaires de travail.
4, Les fichiers propres au système d'exploitation. Ce sont :
- FT06FO01 : liste imprimée de l'exécution d'un programme écrit
en FORTRAN.
- PLIDUMP : liste imprimée des statistiques du PL/1 .
- SYSUDUMP i image-mémoire en cas d'erreur d'exécution.
- 85 -

1.2*5. Description de la matrice .jacobienne sous forme d'un tableau


çroux fcoj •

A la sortie du compilateur, la matrice jacobienne est décrite


par des vecteurs pointeur-ligne, pointeur-colonne, type de l'élément
et son adresse. Nous désignons cette représentation par TABLEAU CREUX.
Nous allons illustrer cette description sur un exemple.
Considérons la matrice jacobienne de la figure I.20a. Elle
correspond à la matrice descriptive de l'exemple emprunté à la cinéti-
que des réacteurs et exposé au chapitre V. Nous avons donné, figure
I.20b, sa représentation sous forme de tableau creux.
Notons que RP est le vecteur pointeur ligne, de dimension
(0:0RDRE+1) où ORDRE est le nombre d'équations du système (ici 0RDRE=3) ;
CI est le vecteur pointeur-colonne ; VT est le vecteur des types et
SP est le vecteur adresse des éléments dans une table de sauvegarde
appelée S.
Le nombre d'éléments n. d'une ligne I est donné par la rela-
tion :
n. =RP(l+1 ) - RP(l)

Les indices de colonnes sont donnés par Cl(K) pour K variant de RP(l) à
Rp(l+1). La valeur V T ( K ) est 3 ai l'élément est invariant, 5 si cet élé-
ment est fonction de la variable indépendante ou 6 si ce dernier est non
linéaire.
Par souci de réduction de l'encombrement des vecteurs SP et
S, les conventions suivantes sont adoptées :

S(1) =1
s(a) = - i
S(3) = a avec <X=-COEFALF/HPAS (coefficient de d i s c r é t i s a t i o n de
l a méthode d ' i n t é g r a t i o n à pas et ordre variables r>I30j ) .
s{k) = -a.
- 86

x x x x x x x x
X X

X X

X X

X X

X X
X X

FIG I-20a Exemple de matrice jacobienne

RP a VT SP

0 0 0
1 6 5
2 S 6
3 e 7
4 6 a
5 6 9
S 6 10
7 6 11
8 e 12
1 3 13
2 5 14
1 3 15
3 5 16
1 3 17
4 i It
I 3 19
5 i 20
; 3 21
6 5 22
} 3 23
7 5 24
0 s 2ii

FIGI-20b Description sous forme de matrice creuse

engendrée par le compilateur NEPTUNIX


- 87 -

Cnapitre II î ETAPE DE COMPILATION, PARTIE ANALYSE

II. 1 . LE PROBLEME DE LA CONSTRUCTION D'EN ANALYSEUR DE LANGAGE.


11.11 . Introduction.
11.12. Exemple.
11.13. Analyse syntaxique et transducteurs.
11.131. Le transducteur.
II. 132. Machine de Turing
U.133. Transducteur non déterministe linéairement borné.
H.134. Ensembles réguliers.
H.135» Automate fini non déterministe (APN) .
H.136. Automate fini déterministe (ÀFD).
11.137. Automate à pile à entrée et sortie par le sommet (APES5).
H.138. Les grammaires et leurs transducteurs.

II.2. L'ANALYSE LEXICOGRAPHIQUE.


11.21. Généralités.
11.22. La résolution des symboles : sous-programme LINSCAN.
11.23. Le traitement des constantes.
11.24. Le traitement des identificateurs.

II. 3. L'ANALYSE SYNTAXIQUE.


11.31. Organisation générale.
11.32. Analyse du bloc SYSTEME : sous-programme ANASYST.
11.33. Analyse du bloc DECLARATIONS : sous-programme ANADECL.
11.34. Analyse des blocs d'équations : sous-programme NONSEMA.
11.341. Le métalangage de Floyd-Evans.
11.342. Organisation de l'analyseur NONSEMA.
11.343. La programmation de l'APESS.
11.35. Traitement en cas d'erreur.
- 8B -

II. 4. FORME INTERNE DU PROGRAMME-SOURCE ET ANALYSE SEMANTIQUE.


H . 41. Généralités.
II.42. Transformation, d'une expression en notation polonaise.
11.421. Exemples simplifiés.
11.422. Les règles élémentaires de transformation.
11.423. Le vocabulaire de la pile polonaise.
H.424. Les sous-programmes d'analyse sémantique dans l'analyseur
NONSEMA.
H.43. Structure du programme-source en forme interne.

i
I
- 89 -

II.-1 . PROBLEME DE LA CONSTRUCTION D'UN ANALYSEUR DE LANGAGE.

11.11. Introduction.

Nous avons insisté dans le premier chapitre sur la manière


de définir la grammaire du langage.
Il est certain que si les règles de production définissant
la grammaire sont bien écrites, l'utilisateur peut écrire des program-
mes corrects. De plus la tâche de l'analyseur est plus facile.
Cependant, le problème de 1*analyse reate posé t
Etant donné un PROGRAMME (ou une suite d'instructions) constitué par
la concaténation d'un certain nombre d'éléments de base du vocabulaire
à l'entrée de l'analyseur d'une part, et étant donné le quadruplât
définissant la grammaire d'autre part, l'analyseur doit Ôtre capable
de reconnaître si le programme est grammaticalement correct et d'effec-
tuer le traitement demandé par l'utilisateur*

La partie de l'analyse qui vérifie la validité de la chaîne


d'entrée s'appelle ANALYSE SYNTAXIQUE.
La partie qui donne un sens aux instructions en vue de la
génération du code s'appelle ANALYSE SEMANTIQUE.

11.12. Exemple.

Soit la grammaire :

1. 1 = | A, .... Z, 0 9, + , - , * , /, *', . , ( , ), I , -|
2. N - I «.opérateur d ' a d d i t i o n > , < expression arithmétique >,
^ i n s t r u c t i o n d ' a f f e c t a t i o n > , -cpartie fractionnaire;»,
inombre décimal>, <chiffre>, < p a r t i e exposant>, ^facteur>,
<:identificateur > < e n t i e r > , ^ l e t t r e ; » , < p a r t i e gauche;»,
r

* l i s t e > , 4opérateur de m u l t i p l i c a t i o n s , <; primaires , <: termes,


<• expression simples, r e n t i e r sans signe> , <. nombre sans signe >
- 90 -

3. P
<lettre s := A

:= Z

< chiffres := 0

f
<opérateur d addition s

^opérateur de m u l t i p l i c a t i o n s
/
< p a r t i e exposant s " * entier >
<partie fractionnaire > - . i. e n t i e r sans s i g n e >
< primaire s = ( < e x p r e s s i o n arithmétiques)
= «nombre sans s i g n e s
= 4 identificateurs
< expression simple > = <opérateur d ' a d d i t i o n s <• termes
1
<entiers = •£ opérateur d a d d i t i o n s < e n t i e r sans
signe>
= < en tier sans signes
4 expression arithmétiques = <expression simples
= •£ expression arithmétiques
<expression simples
= •£ terme s
<nombre décimal s = ^partie fractionnaires
= rentiers
= < entier s « partie fractionnaires
<entier sans signe s = «i entier sans signe>< chiffre >
= « chiffre s

< p a r t i e gauche s = <identificateur s =


<facteurs = < primaire s
= < facteur s I < primaire >
- 91 -

!= <facteur>
:= * t e r m e x opérateur de multiplieation>
<facteur>

< nombre sans signe> := ^nombre décimal?*


:= * partie exposant>
:-<nombre décimal >< partie exposant>

< identificateur i-< lettre>


:= < identificateur ><• lettre >

<liste> :=<partie gauche >


:= « l i s t e x p a r t i e gauche>
<instruction d affectation >
T
:= « l i s t e x expression arithmétique>

k. et l'axiome < instruction d'affectation >


Soit enfin l a chaîne d ' e n t r é e
F = A/(B-C) (11.11).

Les différentes phases de l'analyse syntaxique de la chaîne (ll.1l)


sont schématisées figures II-1 à XI.8.

II.13- Analyse syntaxique et transducteurs [kl {] ,(Â12),(GAI] , [H^O}(N2O].

L'hypothèse de départ de la théorie des systèmes est que le


comportement externe de toute réalisation physique peut être décrit
par un modèle mathématique approprié.
De nombreuses réalisations, paraissant sans relation entre
elles, peuvent être représentées par le même modèle ; ainsi la théorie
des systèmes fournit un traitement unifié des techniques mathématiques.
Le comportement de toute réalisation peut Ôtre représenté par
des relations mathématiques entre trois ensembles de variables :

- L'ensemble des entrées ;


- L'ensemble des sorties ;
- L'ensemble des états, ou variables internes, chaque état étant
le "résumé" de tout le passé du système.

En théorie des automates, on s'intéresse à une classe de systèmes ca-


ractérisés par le fait que toutes les variables prennent leurs valeurs
dans un ensemble de paramètres discrets. Le modèle mathématique est
composé de fonctions prenant leurs valeurs dans un ensemble discret.
- 92 -

< WIIVT. j,'»[f<(>nHii >

< b ^ * * f tUn^.>

« Utnfc. >

<Utfcrt >

t
F d / r B c )
mnu-zizi

C )
ElSILSS.IZzî

»'
93 -

< intt. «I'«f[ntk*k\ M >

« Itrnt >

t t t
F A / ( B c ;
ZIS£L&K-LZ-ï
«inttc 4'*f[«tt«ti«n9

lI.avRE.ll-±
- 94 -

< iutr. J'»(f<ct«t'm >

£Ifi23£-£I=S

< Imtr. al'^f^Utin»

I •
«p«fbtig«Mfc«> «frll^ln»

:Utu

ricBSS-i^ii

I.
- 95

< infer. <L '*ffufcUiM>

ZL2U.U-LLz.l
< ttifttr. *A'*ffMfc*U««n t

C )
Lisass-i
- 96 -

11.131. Le_transducteur.
Un transducteur est un système composé de trois parties essen-
tielles :
1. une "bande d'entrée"
2. une fonction de contrôle
3. une mémoire auxiliaire.
La façon dont opère un transducteur est schématisée fig. H . 9 .

•h "bande d'entrée"

pointeur d'entrée

Ponction de
transition

PIG II«-9 SCHEMA SXMPLZFXE D'UN TRANSDUCTEUR

1,1. La "bande d'entrée".


Elle est supposée découpée en "carrés élémentaires", chaque
carré contenant un symbole de l'ensemble fini de l'alphabet autorisé.
Un pointeur d'entrée permet à tout instant, d'accéder au
prochain symbole à lire. L'opération "mouvement" d'un transducteur se
traduit par un déplacement vers la gauche ou vers la droite ou encore
par un basculement à un autre état aans changement du pointeur d'entrée.
Si le déplacement vers la gauche du pointeur d'entrée n'est pas autori-
sé, le transducteur est dit opérer dans une seule direction.
La bande d'entrée est supposée être utilisée en lecture seu-
lement. Mais on peut concevoir des transducteurs à bande d'entrée uti-
lisée en mode lecture-écriture. Nous ne nous intéressons pas ici à ces
transducteurs.
- 97

1.2. La fonction de transition.


La partie principale du transducteur est sa fonction, de tran-
sition. Dans le cas qui nous intéresse, c'est une procédure ou un pro-
gramme qui dicte au transducteur, son comportement.
Nous pouvons imaginer que l'action à entreprendre est fonction
du symbole d'entrée et de l'information prélevée en mémoire. Cette ac-
tion se traduit alors par un mouvement du pointeur d'entrée et une sau-
vegarde d'une information en mémoire.
Le MOUVEMENT du pointeur d'entrée consiste en :
a. un déplacement vers la droite ;
b. un déplacement vers la gauche ;
c. une stabilité du pointeur, ce dernier pointant sur un
même symbole.
Une configuration est une image décrivant le comportement du
transducteur. Elle consiste en un triplet comportant les informations
suivantes :

1. L'état actuel.
2. Le contenu de la bande d'entrée et la position du pointeur
d'entrée.
3. Le contenu de la mémoire.
La transition peut être effectuée compte tenu des deux critè-
res suivants :
1. A partir d'une configuration, le transducteur n'opère qu'un
mouvement et un seul. Le transducteur est alors dit
DETERMINISTE.
2. A partir d'une configuration, le transducteur opère un mou-
vement choisi dans un ensemble autorisé de mouvements. Le
transducteur est alors dit NON DETERMINISTE.
La CONFIGURATION INITIALE est définie par un état initial,
une position du pointeur d'entrée en début de la bande d'entrée et un
contenu initial de la mémoire.
La CONFIGURATION FINALE est définie par un état appartenant à
un enser -'T d'états terminaux, le pointeur d'entrée étant arrivé en fin
de la t i d'entrée et la mémoire devant contenir des informations
consta que l'analyse est terminée.
- 98 -

1.3- La mémoire.
Nous supposons que l'alphabet est un ensemble fini et que la
mémoire contient un certain nombre de symboles de cet alphabet organi-
sés selon un certain mode. De plus, bien que cette mémoire puisse évo-
luer au cours de l'analyse, nous supposons que le contenu de la mémoi-
re peut être décrit de façon finie.
On dé.rit cette mémoire, par deux fonctions :
1. Une FONCTION de RECHERCHE qui est une correspondance entre
les différentes configurations de la mémoire et un ensemble
fini de symboles pouvant être l'alphabet de la grammaire,
2. Une FONCTION de SORTES qui est une correspondance entre les
différentes configurations de la mémoire et une chaîne
d'états-mémoire. Cette fonction a pour but de modifier le
contenu de la mémoire.
En général le nom du transducteur est défini par la connais-
sance du mode d'organisation de la mémoire. Far exemple un transducteur
dont la mémoire est une pile à entrée et sortie par le sommet est cou-
ramment appelé transducteur- à pile à entrée et sortie par le sommet.

II.132. Machine_de_Turing.
Une machine de Turing est un quintuplet

M - ( Q , Z , t , q , F)
Q


- Q est un-ensemble fini d'états
- Z est l'ensemble des entrées, appelé couramment "bande d'entrée"
- Z est une fonction de transition produisant des transferts d'informa-
tion dans l'unité opératoire Z : Q x X —** 0. x I x D,G | . I D,G j
constitue une notation condensée de l'éventualité D pour droite ou
G- pour gauche
- q îst 1•état- initial
Q

- F est l'ensemble des états finaux.


On définit T un sous-ensemble de X. La chaîne vide appartient
ài-r.
- 99 -

La machine de Turing opère sur la bande d'entrée découpée en


carrés, chacun des carrés représentant un symbole d'entrée. A un montent
du processus, un nombre fini de carrés peut contenir des "blancs". Un
pointeur indique le dernier symbole d'entrée à prendre en compte.
Une configuration d'une macnine de Turing est donnée par le
couple (q,a[*|3) où q € Q, CEJ3 est la position non vide de la "bande d'entrtk
et r est un symbole matérialisant le pointeur et indiquant que le pro-
chain symbole d'entrée à prendre en compte se trouve à sa droite.
Supposons que A soit le symbole se trouvant en début d'entrée
la configuration qui suit (q,£îf3) est obtenue en cherchant *£(q,A) :
l
C(q,A)=(p,A ,S) avec p un état. A' un symbole d'entrée et
S=D ou G.
Nous avons alors (p,CtMP') pour configuration, où a»f3* est obtenu à
partir de Of3 en remplaçant A à droite de t par* A' et en opérant un mou-
vement du symbole dans le sens S (droite ou gauche).
Une machine de Turing s'arrête lorsqu'elle rencontre une con-
figuration pour laquelle aucun mouvement n'est défini, (il est à remar-
quer que la fonction de transition peut ne pas ê*tre définie pour tous
les éléments de Q x l ) .
1
Ii ensemble de sortie de la machine de Turing est obtenu à
partir de la "bande d'entrée" dans laquelle tous les "blancs" ont été
éliminés.

Tr s e u m
II. 133 - 22 ^ïï£* . £-2S2_lé!ËSE2iSiSÈ--ii22âi£î £2-_È2ESi*
C'est un transducteur dont la mémoire est une bande de machi-
ne de Turing initialement mise à blanc et se suffisant de l'espace ini-
tial à tout moment.

II.134. Ensembles_réguliers.
Soit I un alphabet fini et soit £ e X la chaîne vide.
Un ensemble régulier sur I est défini de la façon recursive
suivante :
1. 0, 1'ensemole vide, est un ensemble régulier sur^-
2. J£t est un ensemble régulier sur £•
x x e s t L U 1 e n s e r a D l e
3. V 6 ^'| | régulier sur I.
4. Si A et B sont deux ensembles réguliers sur £, il en est de
même de A U B , AB et A*.
5. Aucun autre ensemble régulier ne peut âtre défini sur Z.
- 100 -

en
11.135* ^ïï*22â*â_£iSi_S2ïï-ËÉÈSESi2iSÎS ( abrégé AFN).
Un automate fini non déterministe est un quintuplet

M - (Q, Z,t , q , P)
Q


-" Q est un ensemble fini, d'états
- Z est un ensemble fini de symboles d'entrée autorisés
- Z est une fonction de transition
- q est un état initial
- F S Q est l'ensemble des états de sortie.
Remarques :
La fonction de transition d'un AFN est une application qui,
au couple : (état actuel, symbole d'entrée actuel), associe l'ensemble
des états accessibles à l'état actuel.
Le comportement de cet automate est à cnaque instant défini
par un couple (q,W) où q est l'état actuel et V est la chaîne consti-
tuée par le symbole sur lequel pointe le pointeur d'entrée et les sym-
boles à droite de ce pointeur dans la bande d'entrée.

II.136. i"£2_°*£_fl"l_l£î_rrl-l--- (en abrégé AFD).


Soit M = (Q, Z , Z , q , P) un AFN.
Q

Un automate fini déterministe (APD) est un cas particulier


d'un AFN.
En effet un APD possède la propriété suivante :

Vq 6 <J, Vafe Z i 3! f(î(q,a)) .

H.137• Automate_à_gile_à_entrée_et_sortie_gar_le_sommet
( en abrégé AFESS ).
Un automate à pile à entrée et sortie par le sommet (APESS)
est un AFN à une seule direction.
La mémoire illimitée dont il dispose est une pile à entrée
et sortie par le sommet.
Un scbéma représentatif en est donné figure H.10.
- 101 -

Par définition un APESS est un septuplet

M = («, I , f ,-C-, q_. Z , F)

- Q est un ensemble d'états


- I est un alphabet fini
- T est un alphabet fini de symboles de pile
- t est une fonction de transition, application telle que

:Qx(XUJ£ j )xT — • Q x r
- q € û est un état initial
^o
- Z 6 T est le symbole de début de pile
- F ç Q est un ensemble d'états terminaux.

bande d'entrée
(mode lecture)

pointeur d'entrée

fonction
de
transition

z
i Mémoire :
Z
2 pile à entrée et sortie
par le sommet
Z
3

Z
P

PIG II-10 SCHEMA REPRESENTATIF D'UN APESS


Une configuration d'un APESS est donnée par le triplet (q,V,c)

- q est l'état actuel,
- V est la portion de la chaîne d'entrée non encore utilisée,
- a est le contenu de la pile,
La fonction de transition admet pour image ^(q?a Z„)=(q','ff) où
F

1
q est le nouvel état,
? est le nouveau contenu de la pile.
Remarques :
Soit : a e 2 u I£ I •
1. Si a r £ le symbole courant d'entrée est a* le symbole en som-
met de pile est Z. L'automate évolue alors vers l'état suivant
q', le pointeur d'entrée est incrémenté d'un symbole et TS de-
vient le nouveau contenu de la pile.
Si V = t, 1'opération sur la pile s'appelle VIDAGE de la pile.
2. Si a = Ê. la pile est supposée vide.
De plus le nouveau symbole d'entrée est éliminé. Le pointeur
d'entrée ne bouge pas.

e
H . 138. ^25 SEI55âi£î2--ï-^ .iiS5-Σâ25-lî£ÎSSiES *
-

Le rfile d'un transducteur est de reconnaître si une chaîne


d'entrée V appartient à la grammaire pour laquelle il a été conçu.
La chaîne V est reconnue si* partant d'une configuration ini-
tiale, avec V sur la bande d'entrée, le transducteur arrive par une
suite de mouvements de symboles constituant V 'à construire une chaîne
de sortie. De plus la configuration dans laquelle le transducteur doit
se trouver lorsque la chaîne d'entrée est épuisée, est une configura-
tion appartenant à un ensemble de configurations terminales admissibles.
Dans ces conditions, on dit que la chaîne V EST BIEN FORMEE.
Il est à remarquer que pour un AFN, à ohaque instant une con-
figuration peut admettre plusieurs images par application de la fonc-
tion de transition ; par contre un APESS n'admet qu'une seule image,
à un instant donné.
Les grammaires et les langages de Chomsky admettent selon
leur classe un seul type optimal de réalisation de leur transducteur.
- 103 -

Grammaires et langages de type 0.


L'analyse d'une chaîne d'entrée V pour cette classe s'effec-
tue à l'aide d'une machine de Turing.
Grammaires et langages de type 1 .
Leur réalisation est effectuée par un automate non déterminis.
te linéairement borné opérant dans deux directions.
Grammaires et langages de type 2.
Leur réalisation est un AFESS opérant dans une seule direction.
Grammaires et langages de type 3.
Leur réalisation est un AFD.

II.2. L'ANALYSE LEXICOGRAPHIQUE.

U . 21. Généralités (A.1 Z\ , (G4I] , (j1 o] .

L'analyseur lexicographique (que nous désignons par AL par


apposition à AS que nous utilisons pour désigner l'analyseur syntaxique)
est la partie du compilateur qui, à partir des caractères du programme-
source, construit les mots ou les symboles tels que les identificateurs
utilisés, les mots réservés employés, les constantes entières ou réel-
les, les délimiteurs (+, *, -, /, etc . ) .
Une grande partie du temps consacré à la compilation est sou-
vent prise par l'A.L. Il est donc important que cette analyse soit à la
fois rapide et efficace. Il découle de cette remarque, qu'un compila-
teur réalise souvent les objectifs proposés tant que l'AL ne fait pas
partie de l'AS. En effet, vue sous cet angle, la conception d'un com-
pilateur donne plus de souplesse et plus d'efficacité.
1. La syntaxe des symboles peut être décrite par des règles sim-
ples. De plus, des méthodes automatiques utilisant des techni-
ques efficaces peuvent être utilisées.
- 104 -

2. L'AL renvoie, dans ces conditions, un symbole plutôt qu'un ca-


ractère. Dans certains cas, quand le contexte doit être pris en
considération afin de décider de l'action à entreprendre, cette
technique autorise des actions plus efficaces,
3. En plus de la souplesse de mise en oeuvre, chacune des phases,
analyse lexicographique ou analyse syntaxique, peut être explo-
rée plus systématiquement. Afin de répondre à cet objectif,
nous avons utilisé des grammaires à deux niveaux :
- le niveau haut qui exploite directement des unités syntaxiques appar-
tenant à un vocabulaire terminal haut, I .
- le niveau bas travaillant avec des éléments syntaxiques de base appar-
tenant à un vocabulaire terminal bas, I .
Certains éléments de Z sont alors définis par utilisation de
règles de production admettant X pour vocabulaire de base.

H.22. La résolution des symboles : sous-programme LINSCAN.

Afin d'illustrer le principe de travail abordé au paragraphe


XX.21., commençons par en donner deux exemples qui peuvent aider à dé-
crire l'organisation générale de la résolution des symboles.
__ H
1 . Au niveau de l'A.S. le symbole XDENT est un élément de I . Par
contre, au niveau de l'A.L., le même symbole est l'axiome d'une gram-
maire dont les règles de production sont représentées sous forme B.N.F.
en (11.21).
' IDENT : :* Lettre
::• IDENT Lettre (il.21)
::« IDENT Chiffre

La partie de l'AL, programmée lors de la résolution des symboles et


opérant sur les identificateurs, est une grammaire de Chomsky de type 3*
2. Au niveau de l'A.S. le symbole nombre en virgule flottante est
un élément de I .Le môme symbole au niveau de l'AL est l'axiome d'une
grammaire dont les règles de production sont représentées sous forme
BNF en (H.22).
- 105 -

l< NOMBRE SANS SIGNE ? = i NOMBRE DECIMAL >


= < PARTIE EXPOSANT»
= < NOMBRE DECIMAL? < PARTIE EXPOSANT?
tNOMBRE DECIMAL? = <ENTIER SANS SIGNE >
=.< FRACTION DECIMALE ?
= i ENTIER SANS SIGNE > < FRACTION DECIMALE ?
•«ENTIER SANS SIGNE> = < CHIFFRE?
(TZ.2V)
= * ENTIER SANS SIGME ? < CHIFFRE >
< FRACTION DECIMALE > = . < ENTIER SANS SIGNE?
< PARTIE EXPOSANT; = " 4 ENTIER ?
< ENTIER > = < ENTIER SANS SIGNE >
= + i ENTIER SANS SIGNE ?
= - <• ENTIER SANS SIGNE r

Sous la forme 11.22, le type 3 de Chomslcy ne se reconnaît pas immédiate-


ment. Effectuons alors les transformations suivantes :

i. NOMBRE SANS SIGNE > = Chiffre< RESTE DU NOMBRE SANS SIGNE >
= . < FRACTION IECIMALE ?
= " < PARTIE EXPOSANT?

PRESTE DU NOMBRE SANS SIGNE? = Chiffre <• RESTE DU NOMBRE SANS SIGNE ?
= . « FRACTION DECIMALE?
= " i PARTIE EXPOSANT?
= -A.

t FRACTION DECIMALE ? = Chiffre £ RESTE DE LA FRACTION


" DECIMALE >
< RESTE DE LA FRACTION DECIMALE ? = JL
= » < PARTIE EXPOSANT ?
= Chiffre i- RESTE DE LA FRACTION
DECIMALE >
< PARTIE EXPOSANT? = S i g n e <• ENTIER EXPOSANT?
= C h i f f r e *• RESTE DE L'ENTIER EXPOSANT?

t ENTIER EXPOSANT? = C h i f f r e * RESTE DE L'ENTIER EXPOSANT?

4 RESTE DE L'ENTIER EXPOSANT> = C h i f f r e * RESTE DE L'ENTIER EXPOSANT


= JU

(11.23)
- 106 -

Le caractère A indique un caractère nul. Nous pouvons constater que


l'ensemble des productions 11.23 sont conformes à la définition du
type 3 de Chomsky. Donc la partie-de l'AL opérant sur les nombres en
virgule flottante est une grammaire régulière.
Quant à la validité des entités Lettre et Chiffre. elle est vérifiée
lors de la résolution des symboles.
Dans chacun des deux cas, le langage étant de type 3 au sens.
de Chomsky, il peut être analysé par un algorithme d'états finis. Ce
plus, lors de l'analyse de la chaîne se présentant à son entrée, nous
imposons à l'AL de ne produire une sortie que lorsqu'un élément du lan-
gage engendré par la grammaire correspondante est reconnu. L'état par-
tiel final dans lequel l'automate se trouve est une indication pour les
analyseurs syntaxiques. Aucune action directe n'est prise à ce stade.
Deux chaînes de caractères sont systématiquement mises à
jour :
1. SYM-COU elle contient le symbole courant
2. SYM-SUI elle contient le symbole suivant.
Deux attributs sont associés à chacun de ces symboles. Ce sont son gen-
re et sa longueur :
1. GENC et GENS pour les genres des symboles courant et.suivant,
2. LNGC et LNGS pour les longueurs.
Ces attributs sont placés dans la table unique TC0MP1 qui sert de moyen
de communication entre les différents sous-programmes.
L'avantage de cette façon d'aborder l'analyse, réaide essen-
tiellement dans le fait que si une erreur se produit lors de l'analyse
syntaxique, les analyseurs possèdent tous les éléments nécessaires pour
décider de l'action à entreprendre. Dans tous les cas la mise à jour
des tables est bien centralisée à leur niveau. Far exemple, si l'AL
affecte le genre "\k (calui d'un identificateur) au symbole se trouvant
dans SYM-COU et si l'AS ne s'attend pas à trouver un identificateur en
place et lieu du symbole en cours d'analyse, le symbole n'est pas pris
en compte et l'opération de mise à jour de la table des codes internes
n'est pas effectuée par insertion de ce symbole.
L'organigramme du sous-programme LINSCAN est donné figures
H - 1 1 , 11-12 et XX-13.
- 107 -

( fitbutius.^. " \
UN3CAN J

INITIALISATIONS

LKCTuac

I
PllSETKB

tllttÀfaiix «Utqmwifc «iaUnauuai

BLOC.A

-/ ft i t n n ? \

•L0C.6 I AlaulLLMiE i

_/«OM» 7~\_ J
Fin 4 u
LINSCAN
AN J
(

FIGIH1 ANALYSEUR LEXICQGRAPHIQUE

Résolution des symboles ; S .P. LINSCAN


108 -

BLOC-A

MlCsaUBSTR(LI5HE,7C0«W(H),4)

INV, F1X66(UNJMC(.
MIC»
Isa.REFÇlNX)

3 a 4S ? « .

bUnc?

G«m swMutb s I INCREMS

XNCREME
INCBSME

- - « ^ /-..••

aLoc.a f RETOUK J

FIG 11-12 S.P. LINSCAN Partie BL0C_A


8LÛC.B - tos -

Mic=su8smcu6Ne,Tconn(b)^ )
INVs FIXB0(.UNSP6CCMIC^)
I = * _ REFtlNV)

{ RETOUR J ConcoUim It camiitro <wtc S « .SUI

INCRÊME

I
'connetmii»' ?

won, \ *j.«»ol?
tiUb

RETOUR
)

FIQH13 S.P. LINSCAN Partie BLOC-B


Précisons que pour représenter une boucle, nous avons adopté
la convention suivante :

ENTREE de la boucle

TEST de fin ΠSORTIE de la boucle

INSTRUCTIONS du CORPS
de la boucle

Le sous-programme LEfSCAN, de résolution des symboles, appelle


trois spus-programme s :
1. INCREMB, sous-programme effectuant la mise à jour du pointeur
colonne dans une carte.
2. LECTURE, sous-programme de mise à jour dans la chaîne de
caractères LIGNE de la nouvelle carte à analyser.
3. MTSETAB, sous-programme d'initialisation des tables servanx
de référence lors de la résolution des symboles.

H.23. Le traitement des constantes.

Ceux types d& traitement sont admis :


1. L'À5 s'attend à trouver un entier codé sur deux octets comme numéro
d'une équation. C'est le sous-programme NOMBRE qui s'en charge. Son
organigramme est donné figure II.14.
2. L'AS s'attend à trouver un nombre en virgule flottante dont la
grammaire a été écrite sous forme BNF en (II.22) et (il.23).
C'est le soun-programme CONVUEC qui se charge de le construire.
L'automate de construction d'un nombre en virgule flottante :
S.P. CONVDEC.
Comme rous 1'avons spécifié auparavant, le langage exprimé
sous la forme (il.23) peut être analysé par un automate fini. Le nombre
d'états nécessaires coïncide avec le nombre de classes syntaxiques dé-
finissant le langage. Le tableau 11-15 montre une table d'états pour
la reconnaissance des nombres.
Dibut du.s.)t.
NOM ARE

INITIALISATIONS

ne-ru =. i

_/ RMftsl ? \

a L
^> ^<
/ Emit* >ntit\__
CMl iSMBSTfl(SYM.eoM,0

r& Js4.iO -Cfc


ej»»-n»uaaTn,(cHirr«isj.o
RETR:i

Z3
' ^—^-»—-^^*^
/iwrnsUV
EMTieflï£NTIEPl»W+3.1

vrnaoissvn.cou
«MTien : o

EitReunut.sfnBOL)

( Fin. du. 4.).. "N


NOMME J

FIG 3H4 ANALYSEUR LEXICOGRAPHIQUE

Conversion de caractères en entier: S.P. NOMBRE


- 112 -

Elément syntaxique Chiffre ti £

1 ' NOMBRE SANS SH2Π> 2 3 5


2 < RESTE DU NOMBRE SANS SIGNE > 2 3 5 SORTIE

3 •TRACTION DECIMALE» 4
4 «RESTE DE LA FRACTION DECIMALE > 4 5 SORTIE

5 «PARTIE EXPOSANT» 7 6
6 «ENTIER EXPOSANT» 7
7 <RESTE DE L'ENTIER EXPOSANT» 7 SORTIE

TABLEAU H-15

Le processus est amorcé à l'état 1 et le caractère apparais-


sant à l'entrée définit l'état dans lequel le reconnaisseur doit se
déplacer. Nous supposons que le symbole nul remplace tous les autres
caractères qui pourraient apparaître après le nombre. Un nombre est re-
connu si l'une des positions de sortie est atteinte. La non-reconnaissan-
ce se produit lorsqu'un caractère d*entrée 'espace' est rencontré.
A titre d'exemple le tableau H-16 représente comment s'effec-
tue la reconnaissance du nombre 7.42 A .

ETAT D'ENTREE CARACTERE NOUVEL ETAT

1 7 2
2 • 3
3 4 4
4 2 4
4 X SORTIE

TABLEAU II-16
- 113 -

Nous supposons de plus que chaque entrée de la table contient


aussi un pointeur dirigé vers une micro-routine à exécuter. Le calcul
de la valeur numérique de la constante se fait alors parallèlement à
la reconnaissance. Le tableau n - 1 7 donne la forme de la table d'états
incrémentée où les micro-routines se présentent, en pseudo-PL/1, comme
suit :
V : PROC ; A = 10 * A + c ï END V
W : PROC ; n=n+1 ; A = 1 0 * A + c ; END W
X : PROC ; E = 10 * E + c ; END X
Y : PROC ; A=1 î END Y
Z : PROC ; e = signe ; END Z

Dans ces routines, « c » représente le cniffre rencontré.


Les paramètres sont Initialises comme suit :
A = Valeur 0 de la mantisse ignorant le point décimal,
n = Nombre 0 de positions décimales,
E = Exposant 0,
e = Signe exposant +.
La procédure sortira avec une valeur de la constante donnée
par :

Elément syntaxique c II +

1 < NOMBRE SANS SIGNE > 2,V 3 5,Y


2 <• RESTE DU NOMBRE SANS SIGNE > 2,V 3 5 SORTIE
3 < FRACTION DECIMALE > k,V
I» ' RESTE DE LA FRACTION DECIMALE > 4,w 5 SORTIE
5 < PABTIE EXPOSANT > 7,X S,Z
6 « ENTIER EXPOSANT > 7,X
7 <RESTE DE L'ENTIER EXP0SANT> 7,X SORTIE

TABLEAU II-17
- 114 -

Compte tenu de tout ce qui précède, nous pouvons à présent


donner la structure définitive de l'automate de reconnaissance des
nombres. Nous utilisons à cet effet la notation de mécanisme de syntaxe
donnée par Glennie. La figure XX-18 montre le reconnaisseur équivalent
écrit suivant ce mécanisme. Le contrôle s'effectue de gauche à droite
et de haut en bas, à moins que les flèches ne précisent le contraire.
Les comparateurs sont encercles. La sortie VRAI est horizontale et dé-
place l'entrée sur un caractère. La sortie FAUX est verticale et ne
modifie pas l'entrée. Les sorties fausses non marquées sont des sorties
d'erreurs. Le mécanisme commence à l'état 1 et» selon qu'il 7 a ou non
reconnaissance du caractère défini à un certain état, on sortira VRAI
ou FAUX à cet état. Avant que l'état suivant ne soit examiné l'action
applicable est prise.

II.2k, Le traitement des identificateurs.

Un identificateur peut :
1. débuter un commentaire. S'il en est ainsi, lors de la résolu-
tion des symboles, le texte compris entre le mot-clé
COMMENTAIRE et le ';' est ignoré.
2. constituer le nom d'un bloc. Dans ces conditions, c'est le
moniteur qui le reconnaît et appelle l'analyseur concerné.
3. être un mot-clé. Ce sont les analyseurs syntaxiques qui. le
reconnaissent. Le traitement adéquat est alors effectué.
4. représenter le nom d'un paramètre, celui d'une fonction ou
celui d'une variable.
Le traitement des variables est centralisé au niveau du sous-
programme TRTVARI. Toutes les variables sont sauvegardées dans la table
NOMUJENT. Lors de la phase de construction ou de consultation de cette
dernière, deux indicateurs (TC0KPl(49) et TC0MP1(50)) sont utilisés
comme moyen de transfert de l'information entre l'AS et l'AL.
Avant toute introduction ou toute consultation, une fonction
d'adresse associée à l'identificateur est calculée. La méthode d'accès
à la table NOMEDENÎ se fait à l'aide d'une table mêlée par la technique
de dispersion avec règlement des débordements par chaînage.
i

-<£> C: chiffre

Sortie

Fig 1-18 MECANISME DE SYNTAXE POUR LA RECONNAISSANCE

DES NOMBRES
- 116 -

Etant donné une clé k, l'algorithme pour entrer ou accéder


à la clé dans une table de longueur H est le suivant :
1) Calculer i=l(k).
2) Si la position i dans la table est vide ou si .elle contient la
clé le dans la zone rang de l'élément, alors sortir.
3) Sinon, poser i = zone chaînage et retourner au point 2.
Dans cette méthode, comme dans toutes les méthodes du type
mêlé, la clé pour l'entrée est donnée par la fonction de calcul
d'adresse. La recherche d'une entrée aboutit toujours tant que la table
n'est pas complètement remplie, à cause de la circularité forcée du
point 3-
La table mêlée servant pour l'accès est de longueur M. La
fonction d'adresse retourne une valeur I(k) allant de 1 à M. Si N est
le nombre d'entrées insérées, la longueur moyenne de recherche est
donnée par :

A(N,M) = 1 + —• .

L'organisation de la table mêlée HASHTAB ainsi que la méthode


d'accès à une variable sont schématisées figure H - 1 ° .

II.3. L'ANALYSE SYNTAXIQUE.

11.31 • Organisation générale.

Nous avons présenté jusqu'à maintenant certains aspects de


la théorie des langages formalisés qui facilitent la conception et la
réalisation des compilateurs de ces langages.
Nous disposons à présent du langage qui va nous permettre
d'écrire des programmes et de les présenter à l'entrée du compilateur
prévu pour les analyser. Nous avons donné figures H-1 a XI-S les pha-
ses de l'analyse syntaxique de la chaîne (11.11).
117 -

Valeur résultat
du calcul de la
fonction
1
d adresse

Table "NOMIDENT."

1
2 var. 2
3

28
30 far. 30
31
32

Zone "Z" de chaînage


des conflits.

Partie accès au rang de Partie chaînage entre noms produisant


la variable dans la table la même valeur de la fonction d'adresse
"NOMIDENT" =0 : nas de conflit
*0 : renvoi â la zone "Z"

FIGIE19 ORGANISATION DE LA TABLE HELEE et

MÉTHODE D'ACCÈS A UNE VARIABLE


- 118 -

Nous n'allons pas entrer dans des considérations philosophique:,


du genre "pourquoi avoir adopté cette technique et pas une autre". Le
langage s'y prêtant d'une part, et d'autre part pour des raisons de fa-
cilité de mise en oeuvre, le problème de l'analyse peut être abordé sous
l'angle de l'association de deux applications (au sens mathématique). La
1
première de ces applications concerne l analyse syntaxique ; elle asso-
cie à chaque entrée, un programme-source, une certaine structure qui
est du domaine de la seconde application, l'analyse sémantique. Il est •
évident qu'il y a de multiples façons d'aborder la mise en oeuvre de
chacune de ces fonctions. Mais sans aucun doute, le fait de construire
un arbre d'analyse syntaxique, ne serait-ce que partiel peut être
t

d'une grande utilité.


D'un autre côté, le programme-source possède une certaine
structure de blocs qui peut être répercutée sur la programmation de son
analyseur. Nous avons par ailleurs (cf. paragraphe 1.32) dit que chacun
des blocs était régi par une grammaire. Dans ces conditions, un analy-
seur syntaxique par grammaire a été prévu. Nous avons schématisé figu-
re H - 2 0 l'organisation générale de la phase d'analyse syntaxique. Lej
trois analyseurs ANASYST, ANADECL et NONSEMA disposent pour travailler
des sous-programmes de l'analyseur lexicographique et des moyens de
communication décrits aux paragraphes 1.42 et 1.43.

11.32. Analyse du bloc système : sous-programme ANASYST.

Le programme décrivant le système d'équations à analyser


est écrit à l'aide de mots-clés uniquement.
Cinq mots-clés sont principaux et définissent chacun une ru-
brique . Ce sont :

1 . PAS
2. INTERVALLE
3 . PRECISION
4. TOLERANCE
5. OPTIONS
A l'intérieur de certaines rubriques, d'autres mots-clés sont
possibles ; on peut reconnaître les mots-clés MAXIMUM, MINIMUM et
DEMARIiAGE pour la rubrique PAS, MAXIMUM et MINIMUM pour la rubrique
INTERVALLE et neuf mots-clés pour la rubrique OPTIONS. La liste de ces
derniers et le rôle de chacun d'eux ont été donnés lors de la descrip-
tion du langage.
119

\VMwmi nmituaaty

INITIALISATIONS

JM COMMONS «t

«U L'ANALYSÉ SYNTAXIQUE

ANASYST

I
PRist £H c o n f i e d u
OPTIONS.
f M M I S R Ï S ALLOCATIONS
* t 2 0 N I 3 cLt TRAVAIL

AiNADECL

PRISE EN COMPTE a u
DONNEES A u P R O B L i M Ê .
AUTRES ALLOCATIONS

H2 I r a n A'ANAIY.
H 4 N eaUATIOMl

NONSEMA

ÏOINT F I N A L »
Ntn X >

/fntUUPHMI " \
( OTMMITM tTNTAXlQOiJ

FIGTJ20 MONITEUR MNMONIT Phase d ANALYSE SYNTAXIQUE


- 120 -

En ce qui concerne l'analyse du programme figurant dans le


bloc système, le traitement est centralisé dans une boucle principale
détectant le nom de chacune des' rubriques. Nous disposons de plus de
deux sous-programmes internes au sous-programme ANASY5T. Ce sont les
programmes VALEUR et DIMENSION. Cas derniers sont paramétrables lors
de leur appel. Par exemple pour analyser la rubrique INTERVALLE, le
sous-programme VALEUR reçoit :
1. le nombre de mots-clés (deux), ]
2. le nom de la rubrique,
3. les mots-clés autorisés,
4. autant de pointeurs associés aux valeurs numériques à déter-
miner.
Nous avons donné figure U-21 l'organisation générale de la boacle prix
cipale du sous-programme ANASYST. Enfin l'organigramme du sous-programn
VALEUR est donné figure 11-22.

U.33. Analyse du bloc déclarations : sous-programme ANADECL.

Le programme de 1»utilisateur écrit dans le bloc DECLARATIONS


est un ensemble de directives au compilateur spécifiant la liste des
noms des variables, une liste des fonctions externes que l'utilisateur
désire incorporer lors de l'exécution et éventuellement une description
du type de certaines variables ainsi que des valeurs initiales des va-
riables et des dérivés associées.
Four ce faire, six mots-clés sont disponibles ;
1. VARIABLES
2. TEMPS
3. NONLINEAIRES
k. SORTIES
5. INITIALISATIONS
6. FONCTIONS.
Comme pour 1*analyseur ANASYST, une programmation modulaire
et structurée, par rubrique, a été adoptée pour écrire le sous-program-
me ANADECL.
L'organisation générale de l'analyseur est donnée figure II-2
Nous avons donné figure 11-24 l'organigramme du sous-programme TRI. En
plus d'une description détaillés, cet organigramme présente l'intérêt
ANASYST y

GCNC-i-IS
^
Tut» wlinyWiM d w w d f n
<,6tHC.»«miH.I? > -
1 outu«nit>>tiimim

ZZ3Z Aimmtiên dkkftlt JNIMAAI

iSm«timJ.UUUi<U
11 UIWICMT

^ J-J..U» >»* ? ^—ri


Aimiur jHMJtt'ÀU-jia ilk.

ftnUwwt tk ffc4 i,k.


<C «M>. itiiim»mur'
l

b i i h n M {«War UtMIT /

<E

< WM*.4t a TKIHMM! * ifAUM frfMr-tOLUMHe r*

. -4

AlUlUiH «IS ^MH WV


"jl CRMUfl

( Fi* - U . . | . . N
ANAVtVT j

FIG 11-21 ORGANISATION de lanalyseur syntaxique du bloc

SYSTÈME = S.P. ANASYST


/VALtU*(T»f,v»L, TA»A
I ACOA.AM) J

< fit>~
^»wt
~*~>Ml
^VQMHOIOtHtlH —

X
isoeNS
I
| | tlNSCAN

T»IL«HlV>L
^
J **
r»m : * m . M i ( K )

- ^ rowiNULL? ;> / & ENC.il \

I I EWBCUH I |
Hi
AOaK.»«W»H»UL

pan » »M«B»ciw>Li pmn»cowptc |

| ticiw i - » m n |

| | BKWtUW. I

I I UNICAW I

( Fin Au ».(,.
VAUUR.
\
)

F1GH22 Analyseur syntaxique ^/WSKSr: S.P. VALEUR


- 123

I ANAMCL J

INITIALISATIONS CT AFPECTATIOHJ
D U VMIkM.ES D« TRAVAIL

| j MUCLE PRINCIPALS cU I'Analutt cU%


j | bfaUwolim
U_

TMITIMNT it PIN 1'AHALME

E c t l K v t t Àuk 3iMutnmcj
SIXICUT •I'EikuniMjaU./

tur UJlcWr AW*n*L

TRI t U T A k L H > U I f P U
I PAU 0 R 1 M CKsiUAHT

S « u m « » « l i d u ûiultat» i U /
I'aitttniL iur U <[iihln, /
CSMilT /

<i
initUu J.X1I trnWAuf /
bJi<W CINITIA

LIICKATION t i t l M H M TRAVAIL,

ANP.S6CL )

F1GIE3 ORGANISATION d e l'analyseur syntaxique du bloc

DECLARATIONS •. S.P. ANADECL


- 12fc

/Debut elu. a.)* \


TR1
V J
INITIALISATION :
BOUCLE x Otmtniion (.TABLE)

BOUCLE i » 0
G
CTAT = 0

s.iri&ictst. aoucLi-l

/TJk»Ll(lHt>ICt)

<î" . T*eU(INOICt«t)

SAUVEGAHtlE * T A » L £ ( X N « I C l )
T»*Lt(ZN»lttt*TA>liUNMCt+< )
TfcBLClXNHUtl) : SMJVÏ6MMS
ETKTiINilCi

BOUCLt i «TAT 4

FIGH24 S.P. TRI (algorithme ' BUBBLE -SORT' )


- 125 -

de décrire l'algorithme général de tri appelé "BUBBLB-SORT" qui est icJ


employé pour ordonner les tables des types des variables. Le tuême algo-
rithme est utilisé lors de la dérivation formelle pour ordonner les élé-
T
ments d une cellule élémentaire servant au calcul du Jacobien.
La boucle principale du sous-programme ANADECL est enfin
représentée figure 11-25•

H.34. Analyse des blocs d'équations : sous-programme NONSEMA.

Contrairement aux deux précédents analyseurs, l'analyseur


NONSEMA. est un automate disposant, pour travailler, d'une pile à entrée
et sortie par le sommet (APESS, Cf paragraphe II.137).
1
La fonction de transition de l APESS a été construite, à par-
tir des règles de production de la grammaire G(< PROGRA>), à l'aide du
métalangage de Ployd-Evans.
Nous allons présenter succinctement le métalangage de Floyd-
Evans puis la manière dont les productions de Floyd-Evans ont été obte-
nues et enfin consigner la description de la fonction de transition à
l'aide de ces productions en annexe C.

H.341. Le_métalangage_de_Plovd-Evans [F22J , (_I20J .


Le métalangage de Floyd-Evans est un métalangage servant à
décrire les algorithmes déterministes d'analyse. Il consiste en un en-
semble ordonné de règles visant à réduire le flot d'entrée. Dans un
premier temps, considérons deux symboles spéciaux pour définir un poin-
teur dans le flot d'entrée (û) et indiquer tout symbole autorisé (<r).
Les règles définissent les opérations de réécriture sur le
flot d'entrée. Dans une utilisation réelle, les symboles se trouvant à
gauche du pointeur seront mémorisés dans une pile et les caractères se
trouvant à droite seront encore dans le flot d'entrée.
Considérons la structure simplifiée des expressions arithmé-
tiques dont les productions sous forme BNF sont les suivantes :
1 P ::= < E )
2 ::= <Xdent±ficat?-ir >
3 E ::= T
4 ::= E + T
5 T ::= P
6 ::= T * P
/^ENTREE )

oui / . c M . , x l \
r

Ç SORTIE J MON

0 U I
, /serie.^lViiiVGENe^oy UNSCM»

POINT, TAUXi'o'B

S SUT
LINSCAN -
—r
LINSCKN EMUuH

< ' vow


VMIA6LMÎN» ANALYSE-VMtlAS fMJXs i S

•^SORTliSÎ^î ANM.ME.SDKTIt («OKTItt)

. / N O U U K I M M S K ^ WM.<ae.soKTit(«nNUMMM —4 '

/ T S M P S ? \ * AMM.1St.SOKTlï(T«nfS>>

^KUIMIMNIM»* AHALftt-XKnifc

/ ftNCTUNMS* AHKLMM.F0HCI3 •41

/ FAUX ?
CRUUN. _ • FMMi'l'S .

FIGÏÏ-25 BOUCLE PRINCIPALE du S.P.ANADECL


- 127 -

Le tableau H-26 définit un reconnaisseur de ce langage. La lettre I


sert à indiquer l'apparition d'un membre de la classe des identifica-
teurs.

Numéro d e l a production Production de Ployd-Evans

1 (&cr ^ («*
2 lie- => PS*

3 T*Po-A =? T r i

4 Po-A =^ TS-Û

5 T*Ao- => I j r i

6 E+To-A "S> Efi

7 To-A =s> Eeo.

8 E+Ao" »> E+ffû

9 (E)Ao- -> Pr&

10 Aa- => wû

11 i-E-<a ^> Sortie

TABLEAU II-26

La réduction de l'expression a+b*(c+d)+e s'effectue selon le schéma du


tableau 11-27.
Le processus est direct. Nous avons supposé que les pointeurs
d'identificateurs sont transformés en symbole I lors du chargement dans
la pile ; c'est ce qui, au sens figuré, pourrait se produire. Nous di-
rons, pour plus de vraisemblance, que l'apparition de X dans une règle
équivaudra à effectuer un contrôle du pointeur d'identificateur sur
l'élément de la pile. Dans le tableau 11-26, la chaîne de caractères
à gauche du signe ^ définit la configuration devant être assortie et
la chaîne se trouvant à droite de ce signe définit les symboles qui
remplaceront la chaîne des caractères de gauche si un assortiment est
trouvé.
- 128 -

Production Pile après application


appliquée de la production Entrée

Aa+b*(c+d)+e H
10 I- I A +b*(c+d)+e -|
2 I- P+ A b*(c+d)+e -i
4 t- T+ A b»(c+d)+e H
7 I- E+ A b*(c+d)+e H
S h E+I A *(o+d)+e -1
2 I- E+P* & (c+d)+e -|
4 h E+T* A (c+d)+e -t

5 I- E+T#( A c+d)+e H
1 h-E+T»(l A +d)+o —t
2 h E+T*(P+ A d)+e -1
4 I- E+T*(T+ A d)+e -1

7 h E+T*(E+ A d)+e-i

8 H- E+T*(E+I A .)+e -1
2 I- E+T#(E+P) A +e -1
4 |- E+T*(E+T) A +e-f
6 l-E+T*(E) A +e H

9 h-E+T*P+ A e -H

3 I-E+T+ A e—i

6 hE+ A e-<
8 l-E+I H

2 l-E+PH
4 I-E+T-*
6 l-E -1
11 Sortie

TABLEAU 1 1 - 2 7
- 129 -

L'algorithme direct consiste à rechercher, dans l'ensemble


ordonné des règles et à partir du sommet, chaque application d'une
règle jusqu'à ce que l'on atteigne la première règle applicable. Après
exécution de cette règle, la recherche recommence à partir du sommet.
Cette méthode n'est pas toujours très efficace.
Afin d'améliorer le processus, nous commençons par ajouter
une colonne supplémentaire au tableau II-26. Lorsqu'une règle satis-
faisante est appliquée, cette colonne supplémentaire donne la règle
suivante à essayer. Nous obtenons alors le tableau H - 2 8 .

Numéro Production de Ployd-Evans Prochaine production

1 (Ao- =* (o-A 1

2 lia- => Per A 3


3 T * P o - i => To-A 5
4 P-TA =? To-A 5
5 T*ûo- =» T»<rA 1

& E+T<rA =» E<rA S

7 To-A ^ Eo-A 8

8 E+ic •> E+«-A 1

9 (B)A(T => PcrA 3


10 A<r ^> o-A 1

11 l-E-tû -> Sortie

TABLEAU 11-28

Lea règles sont essayées de façon séquentielle à partir du


point spécifié afin d'obtenir la prochaine règle applicable. Après
exécution de celle-ci, la règle suivante constitue le point de départ
de la recherche séquentielle pour trouver la règle applicable suivante.
Dans l'exemple précédent, schématisé Tableau 11-27i le nombre de règles
examinées était de 125 ! ce nombre descend à 45 lorsque la règle suivan-
te est spécifiée et que l'entrée initiale se fait à la règle 10.
- 130 -

Cette première amélioration du métalangage de Floyd-Evans


permet non seulement au processus d'être plus efficace, mais elle rend
aussi les réductions plus faciles à écrire.
Généralisation du métalangage.
Un programme écrit sous forme de productions Floyd-Evans est
une description, détaillée de la fonction de transition de l'AFESS per-
mettant à chaque instant de décider de l'action à entreprendre en fonc-
tion de l'ensemble fini des états.
Une PRODUCTION de Floyd-Evans est une suite d'instructions.
Cnaque instruction porte une étiquette. Les étiquettes peuvent être
considérées comme les états de l'automate. Nous nous plaçons dans le
cas où deux instructions ne portent pas la même étiquette.
Les instructions agissent sur une chaîne d'entrée et une
pile à entrée et sortie par le sommet.
Une configuration instantanée du transducteur est donnée
par (11.31).

(q, # C m ... X,, a, ... a $ , n)


n (IX.31)

avec q : étiquette de l'instruction en cours d'analyse,


X ... X, : le contenu de la pile,
a.... a : le restant de la chaîne d'entrée,
n : la sortie du transducteur conformément à la grammaire à indé-
pendance contextuelle servant à engendrer le langage,
$ : un indicateur de début de pile et de fin de la chaîne d'entrée.
Une instruction du métalangage se présente sous la forme
(11.32).

* Etiquette> : a t a -*• {3 1 < action > # < étiquette suivante > (H.32)

où CC est la chaîne se trouvant au sommet de la pile,


a est le symbole courant,
(3 est une chaîne devant remplacer a dans la pile,
-«•est un métasymbole facultatif. S'il est omis, le contenu de la
pile n'est pas modifié.
- 131 -

Précisons, pour être clair, que <: action> signifie action à


entreprendre et ne peut être que :
1. sortir une chaîne TT (EMIT TS) ,
2. accepter (ACCEPT),
3. erreur (ERROR),
k. vide (BLANK), se traduisant en fait par une consultation du
contexte et éventuellement une réduction,
5. arrêt (HALT).
Quant à < étiquette suivante> , si elle eat omise, le reconnaisseur
continue en séquence.

La configuration initiale du transducteur est donnée par


(rc-33).
(L, $f V0, e) (n.33)

avec L : étiquette de la première instruction,


Tf : chaîne d'entrée à analyser,
e : un formalisme désignant la mise à blanc de la chaîne de
sortie du transducteur.

Le reconnaisseur écrit en production de Floyd-Evans exécute


les instructions en séquence, en quôte d'actions à entreprendre. La
séquence de ces instructions peut être rompue par utilisation des
branchements.

Exemple

W V

Comparer S. au symbole courant. S, au premier symbole conte-


nu dans la pile et S. au second symbole contenu dans la pile.
1. Au cas ou tous ces symboles se correspondent, enlever les deux
symboles se trouvant dans la pilé, introduire U dans cette
pile en mettant à Jour le pointeur d'entrée et se brancher à
l'instruction d'é'ciquette L- .
Q

2. Dans le cas contraire, aucune action n'est à entreprendre ;


l'instruction suivante d'étiquette L„ est à exécuter.
- 132 -

Remarques.
a. Deux métasymboles particuliers sont utilisés dans l'ensemble des
productions définissant la description de la fonction de transition
du transducteur de la grammaire G( < PROGRA > ) :
1 . *»S>0' : Il a pour effet de faire ignorer une position. Par exem-
ple l'instruction (il.3*0 a pour effet d'effectuer un branche-
ment à l'instruction d'étiquette L_ si le second symbole de la
pile est 5

L 3 :Ss>oa|a«a I L ? (H.34)

2. '#$&' : Il agit sur une position de la pile. Il a pour effet de


remplacer le contenu de cette position par la dernière valeur du
même symbole dans une instruction. Par exemple, si le premier
symbole de la pile est X, l'instruction (il.35) équivaut à un
branchement à l'instruction d'étiquette ZX.

L : #6*|*=>ï> | z W (11.35)

b. Trois groupes différents de productions sont associés à chaque sym-


bole. Ce sont les groupes Z, R et S. Le groupe Z définit des "pro-
ductions de lecture" (read productions)» le groupe R définit des
"productions de réduction" (reduce productions) et le groupe S dé-
finit des tests de successeurs possibles. Enfin un groupe de pro-
duction appelé L permet d'avoir des branchements paramétrés.

c. Quand le métasymbole '*' est présent, un symbole d'entrée est lu,


et le pointeur de lecture est incrémenté d'un symbole.

Utilisation du langage de production de Floyd-Bvans pour analyseur


de precedence faible.
Supposons disposer d'une matrice de precedence faible. Nous
considérons, à titre d'exemple, la grammaire à precedence faible dé-
finie paragraphe 1.215.4. et la matrice associée donnée figure 1-6.
Proposons-nous d'implanter un analyseur travaillant par comparaison
(pattern-matching) pour les réductions. Il est donc seulement nécessai-
re da considérer les colonnes de la matrice relatives aux symboles ter-
minaux de la grammaire. A tout instant, nous ne considérons que la re-
lation entre le symbole de sommet de pile et le symbole d'entrée. Les
actions de lecture sont prises pour ><.* et les actions de réduction le
sont pour '>•.
- 133 -

1. Construction_des_groductions_de_leetur^ .
Les actions de lecture sont :

z:+ |( — (I. * z(
Ia — a| * Za

Z(: l( — (| * Z(
| a —<• a| * Za
I [ erreur

Nous pouvons réaliser le mélange de ces productions comme


suit

Z+,Z( : l( — ( | * Z(
| a -* a| * Za
| I erreur

De la mâme façon, nous obtenons :

ZE : | ( -«- ( | * Z(
| + —*• +1 * Z+
SaSO |$ I accepter
| | erreur

Xci le symbole >as3> ' indique n'importe quel caractère. XI est intro*
duit en sommet de pile au lieu de 'E' qui est le vrai sommet dans l'es-
poir de pouvoir le mélanger avec d'autres productions.

2. Construction des_productions de_réduction (étiquetées R ) .


Considérons :

E : î= E + T
::= T

Nous pouvons procéder comme suit : quand T ou E+T est au som-


met de la pile nous pouvons regarder le symbole qui suit, vérifier que
la relation existe entre eux. et alors faire la réduction la plus lon-
gue. Donc pour T au sommet de la pile, nous avons :
134

ZT I * • »
* z*
RT ! B + T I aasi ssss ST
+ T | sas Eaa2 ST
T I ass Baas ST
ST LT
LT
LT
erreur

LT [aaa Z#5
(
3. Optimisât!on_de_la "taiii©_de_l analyseur.
L'algorithme est le suivant :
Un graphe est associé à la matrice de precedence pour les conditions
de vérification correspondant à la relation '>'. A ce stade toutes
les lignes ne présentant pas la relation <>< sont ignorées. Sont
enfin considérées comma une seule et même ligne celles ayant des
entrées identiques.
Un noeud dans le graphe est associé à chacune des rangées qui restent
dans la matrice et un noeud zéro est en outre introduit.
Soient alors deux noeuds distincts A et B. L'arc allant de A vers B
est tracé si toutes les entrées dans la rangée B sont incluses dans
celles de A. De plus un coût est affecté à cet arc ; il correspond
au nombre d'entrées de A qui ne sont pas dans 5.
Une minimisation du coût est alors obtenue en engendrant seulement
les A-productions qui ne sont pas dans B et les B-productions, au
lieu de toutes les productions pour A et B. Cela revient donc à
obtenir :
coût (A,B) + coût (B,0)
au lieu de :
coût (A,0) + coût (B,0)
Pour chaque noeud nous ne conservons qu'un arc de coût minimum quit-
tant ce noeud. Il faut partir d'un n.oeud sans arc rentrant et passer
à travers tous les noeuds. Le graphe ainsi obtenu est un arbre ayant
0 pour racine. C'est l'arbre de coût minimum associé au graphe.
- 135 -

b. Ce que nous venons de faire pour les entrées 'vérification' peut aussi
être fait pour les entrées 'lecture'.
c. Des rangées fictives sont introduites au besoin afin de permettre de
nouvelles diminutions du nombre de productions.

Exemple :
Considérons la -matrice de precedence de la figure XX-Z9 où
seules les colonnes relatives aux symboles terminaux et les entrées de
lecture sont représentées. Le graphe associé à cette matrice est donné
figure H - 3 0 et l'arbre de coût minimum obtenu à partir de ce graphe
est représenté figure II-31.

S
1 H S
3
s
6 S
7 S
8 S
9
S
2 <
S
3
i. 4. A. £. <. 4.

s
k ^ £ 4. <
s
6
< i <.
S
8 < i. i •C

S • < A.
9

FIG II-29

*** Çxploitation^des^productions ainsi obtenues.


Dans l'analyseur NONSEMA, écrit à partir des productions de
Ployd-Evans, des facilités de sous-programmes ont été ajoutées. Il s'a-
gissait de rendre plus commode la reconnaissance des symboles non ter-
minaux largement utilisés.
- 136 -

FIG 1-30 GRAPHE ASSOCIE A LA MATRICE n-29

FIG I-31 ARBRE DE COUT MINIMUM


- 137

Nous verrons plus loin ^-f paragraphe II.k) qu'à chaque règle
reconnue est associé un programme définissant l'action devant être pri-
se lors de la reconnaissance. Par exemple si nous considérons la struc-
ture simplifiée des expressions arithmétiques du paragraphe 11.3^1•»
une chaîne suffixe peut ôtre produite en sortie si la règle 2 enchaîne
la sortie de l'identificateur adéquat et les règles 3 et 6 les sorties
respectives * et + . L'expression arithmétique a+b*(c+d)+e produit
dans ces conditions :
abcd+*+e+.
Outre les optimisations décrites précédemment, le sous-pro-
gramme NONSEMA a bénéficié d'une minimisation du nombre de tests en ce
qui concerne l'apparition d'un non-terminal donné comme membre droit
dans un certain nombre de productions. Ce résultat a été atteint par
un arrangement préalable des productions de Ployd-Evans relatives à la
grammaire G(<PROGRA>).

H . jhZ. Orga^sation^de^l^ana^yseur^ONSEMA.

Une boucle principale et 2k sous-programmes internes au pro-


gramme NONSEMA constituent l'analyseur. L'organisation générale est
schématisée figure 11-32. La liste des sous-programmes internes est la
suivante :

1. ÇCDOSTES 13. •EXPONENTIATION


2. SCEXPDOU 14. «EXPRES
3. ÇHÎCREME 15. «EXPSIM
k. S RECHERCHE 16. «EXPSIMS
5. $SAUT 17. «FACTEUR
6. $S0EVAL 18. 'GAUCHE
7. «APFOUT 19- *PAHAMB
8. «BLOEQU 20. «PRIHAIR
9. *BL0EQU$ 21 . «SECONDAIRE
10. tCOREQU 22. «TERME
11. «DOUBLES 23. «TERMES
12. «EQUAT Zk. «UNEEQU.

Signalons au passage que le sous-programme *GAUCHE possède


1
un second point d entrée appelé *GAUCHE1.
133

( DiWul «U. ». |>.


N0WEP1A
A
J

IniUalûaksns '
. Vart«UuT«âlu
. AlnitucL* wpinflNt

G M M M «•••mbvU ammMmk Aluwank

Zn«U««huf ttbur «LA X * * " $ JUtTiiUjiKfatW


I U C J U U H in t m u <U tuMNûL ï

PTKf>ILio f 3IOU&0
P1LI»)xVTtltSH0N

JkBLOtQUf

BOUCLE PRINCIPAL!

H i t , APFIL, Tt»TUTS, TMTUaS

( Fin «U ».|,. \

FIGH-32 ORGANISATION de Ianalyseur syntaxique ef sémantique

des blocs d'équations ; S . P . NONSEMA


139
/ D i i u f c e U U . BOUCL t \
( P R I N C I P A L ! cUs.}. )
V- Nor««inn ^ /

'KnJUUIOUCLtN
-i H»MO«l

2
C MtlNCIPAtt <Ux.y j
NowstnA y
| pmM»pititPtwpif>
I •»»«" I > ;l

X
PP.truvN6.MJ
^GMJCHt
PMPUVKW?

< mruwoo»? > - -H |»Bou»ig"l—» , ;

< PP.1PUVHTW? > - -H tfTWI«» [ »


3Ï -H fraiotau» | — »
Ï naiv i^ OU*
PKemVNix»? > — — -*) j»w»in«
^ nwi>
PRtnxVNUP
£EXFSIM
P R I M > V N ODD !

< wtWxVN»La; > - -H |» auiau |• < ,

< . PKimVNtXK! > - -H|»lXPKi*

, 4 . f PKIK1NR£ JS/wuïTvNpâxK
< PMn.^wMP? > - - q fruprou-T

' » . f SEUNSMU WBI>VNSKFS


<. PBinïvwiiHiT > - - I |»UWM«U

< pmn»ym««i > - -H I» ta«»t | 1 1

^ ^_ f txMmirruatM j^pptnsvNEiuX 3J
•< nun » SJ> -p||»T«*W* | ^

SSfcUT < pmw»vH>Kt; > - _>J |*r»icituR

•<" pmn»vwpMH > - -»| |«I»MM>W«~1 »,,

- » | | «00111810
I nan.

FIGÏÏ-33 BOUCLE PRINCIPALE du S.P. NONSEMA


140

\J SRtCHcncHS y

i
l0m»U'SUR»&
< !>

LINKMtli

__/ BunvMy.-itnr»!^^_
< VAIUMU s r m n t ! \ -

fiMCTYVS
TKVMiTYDta D
PAIWMSTRe t

SyntMtaWCMIH! FONCTIIN*'* A
< UTNUfUr

LINÎCAN Nttau.'C»
urnun *o
POtNTiVfi

eswtvt's

UNSCAN

-*'+• Z3~~

0
ÀM, him&umink
I i w ii

FIGH34 Organisation de [INTERFACE entre lanalyseur NONSEMA

et [analyseur lexicoqraphique •. S.R JRECHERCHE


- ni -

La boucle principale de l'analyseur egt chargée d'appeler ces


sous-programmes en fonction du contenu du sommet de la pile. L'organi-
gramme de cette boucle est donné figure 11-33.
Les sous-programmes externes appelés sont les sous-programmes
composant l'analyseur lexicographique , le sous-programme ERREUR donnant
le message d'erreur lorsqu'une erreur de syntaxe est détectée, ainsi qup
le sous-programme CHAŒAG construisant les références croisées variable',
et constantes d'une part et les numéros d'équations d'autre part.
Nous avons décrit figure 11-34 l'organisation générale du
sous-programme SRECRERCHE effectuant l'interface entre l'analyseur syn-
taxique NONSEMA. et l'analyseur lexicographique pour ce qui concerne le
traitement des identificateurs.
En plus de la description de la fonction de transition en
métalangage de Floyd-Evans donnée en annexe C, nous avons groupé para-
graphe 11.343, en pseudo-langage PL/1, les opérations que réalisent
certains des sous-programmes internes précédents sur la pile de
l'APESS.

II. 3^3. tâ_Eï2S255âïï22_âS_iIèS5ËË •


APESS : PROCEDURE(PILE);
/* VOCABULAIRE DE GESTION DE LA PILE DE L'AUTOMATE:
1- UNE PARTIE DE L'ENSEMBLE DES GENEES DES SÏMBOLES TERMINAUX */
DCL genre_deux_points BIN FIXED INIT(1), /* r */
genre_multiplxeation BIN FIXED INIT(4), /* ••» */
genre_division BIN FIXED INIT(5). /* / */
genre_addition BIN FIXED INIT(â), /* + */
genre_soustraction BIN FIXED INTX(7), /* - */
genre_parenth_fermante BIN FIXED INIT(8) /* ) */
genre_virgule BIN FIXED INTr(o), /* , */
genre_point_virgule BIN FIXED INIT(lO), /* ; */
VTNUMERO BIN FIXED INIT(17),
VTENTIER BIN FIXED INIT(18),
VTOPREXP BIN FIXED INIT(lo), /* | */
VTDEBNON BIN FIXED INIT(20),
VTSUDJON BIN FIXED INIT(21);
/*
- 142 -

2- LES VALEURS SUIVANTES ASSOCIEES A CERTAINS ELEMENTS DE "N" */


VNNON BIN FIXED INIT(25 /* PROGRA */
VNGAU BIN FIXED INIT(26 /* GAUCHE */
VNIDF BIN FIXED INIT(27 /* IDFONC */
VNDOÎ BIN FIXED INIT(28 /* DOUBLES */
VNTES BIN FIXED INIT(29 /* TERMES */
VNBLS BIN FIXED INITIO /* BLOEOJJS */
VNEXS BIN FIXED E U T (31 /* EXPSIMS */
VNEXP BIN FIXED INIT(32 /* E X P S M */
VNDOU BIN FIXED INIT(33 /* DOUBLE */
VNBLO BIN FIX:;D INIT(34; /* BLOEQU */
VNEXR BIN FIXED TNIT(35 /* EXPRES */
VNAPF BIN FIXED INIT(3^ /* APFOUT */
VNUNE BIN FIXED INIT(37 /* UNEEQ.U */
VNEQU BET FIXED INIT(38 /* EQUAT */
VNTER BIN FIXED TNIT(39 /* TERME */
VNFAC BIN FIXED INITIO /* FACTEUR */
VNPAR BIN FIXED INIT(43 /* PARAME */
VNCOR BIN FIXED INIT(44 /* COREQU */
VNPRI BIN FIXED M I T (45 /» PRIMAIRE */
VNSEC BIN FIXED INir(46 /* SECONDAIRE */
VNEXN BIN FIXED INIT(47 /* EXPONENTIATION */
/* DECLARATION DE LA PILE ET DE SON POINTEUR */
DCL (PILE(*),PTRPIL) BIN FIXED;
/* DECLARATIONS DES ELEMENTS DE LA PILE */
#DCL PREMIER CHAR(l2) INIT('PILE(PTRPIL) ' ) i
«6DCL SECOND CHAR(14) INIT( ' PILE (PTRPIL-1 ) ' ) ;
#DCL TROISIEME CBAR(1 4) INIT( 'PILE(PTRPIL-2) ' ) ;
/* PROCEDURE INSERANT UN NOUVEAU SÏMBOLE DANS LA PILE */
INSERER: PROCEDURE (VALEUR);
DCL VALEUR BIN FIXED;
PTRPXL=PTRPIL+1 ;
PILE ( PTRPIL ) «VALEUR !
END INSERER;
/* PROCEDURE CENTRALISANT LES REDUCTIONS */
- Tt3 -

REMPLACER: PROCEDURE (COMBIEN, VALEUR) ;


DCL(COMBIEN,VALEUR) BIN FIXED;
PTRPIL=PTRPIL-COMBIEN ;
PILE ( PTRPIL ) = VALEUR ;
END REMPLACER;
/* POUR LA BOUCLE PRINCIPALE VOIR FIG. II-33 «/
/* DEBUT DES SOUS-PROGRAMMES INTERNES */
«GAUCHE :PROC;
IF addition_unaire THEN CALL INSERER (genre_addition) ;
ELSE IF soustraction_unaire THEN CALL INSERER(genre_sous traction) ;
*GAUCHE1 :ENTRY;
IF parentnèse_ouvrante THEN CALL INSERER(VNGAU) ;
END «GAUCHE;
•DOUBLES;PROC;
IF virgule THEN CALL INSERER( genre_virgule ) ;
ELSE IF (!&>REMIER=VNDOS) THEN »6PREMIER= VNDOU;
END «DOUBLES;
*GDOSTES;PROC;
IF (fonction_utilisateur I fonction^incorporée) THEN CALL INSERER(
VNIDF);
ELSE IF variable THEN CALL INSERER( VNPRI ) ;
ELSE IF paramètre THEN CALL INSERER(VNPAR) ;
END SCDOSTES;
«TERMES;PROC;
IF multiplication THEN CALL INSERER(genre_multiplication) ;
ELSE IF division THEN CALL INSERER(gejire_division) ;
ELSE IF #PREMIER=VNTES THEN #PREMIER=VNTER ;
END «TERMES;
*BLOEQUS;PROC;
IF n o u v e l l e _ é q u a t i o n THEN DO;
CALL INSERER(VTSUINON);
CALL INSERER(VTNUMERO);
CALL INSERER(genre_deux_points);
END;
ELSE IF f i n _ é q u a t i o n THEN #PREMIER=VNBLO ;
ELSE IF (5êPREMIEH=VNBLS) THEN ?8PREMIER=VNBLO ;
END «BLOEQUS;
- 144 -

*EXPSIMS:PROC;
IP a d d i t i o n _ b i n a i r e THEN DO;
CALL INSERER(genre_addition) ;
CALL «GAUCHE! ;
END;
ELSE IP s o u s t r a c t i o n _ b i n a i r e THEN EO;
CALL INSERER(genre_sou5tract±on) ;
CALL *GAUCHE1 ;
END;
ELSE IP (#PHEMIER=VNEXS) THEN #PREMXER=VNEXP ;
ELSE CALL #GAUCHE;
END #EXPSIM3;
*BLOEQ:PROC;
IP (^SECONDiVTDBBNON) THEN CALL REMPLACER(2, VNNON) ;
END «BLOEQU;
#EXPSIM;PROC;
— IP parentaèse^fermante THEN CALL EfSERER( genre_parenth_fermante ) ;
ELSE IF (?ÎFHEMIER*VNEXP) THEN Î&REMXER-VNEXR;
END SSEXPSIM;
SCEXPCOU ; PROC ;
IP (5feECOND=VNDOt7)&(#TROISIEME=VNIDF) THEN CALL
REMPLACER^,VNAPF) ;
ELSE IP (#SECOND«VKEXP) THEN
IF (ffeTROXSIEME=VNIDF) I (#TROISIEME=VINGAU) THEN
CALL REMPLACER(a,VNPRl);
END SCEXFDOtJ;
•EXPRESS: PROC;
IF p o i n t _ v i r g u l e THEN #PREMIER=VNCOR;
ELSE IP (!fe>REMIER«genre_parenth_feniiante) THEN
CALL ÏCEXPDOC;
END «EXPRES;
#TJNEEC}U:PROC;
IF (5feECOND