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-VTSCDJON) THEN
IP (#TROISIEME=TOBLS) THEN
PTRPIL=PTRPIL-2 ;
ELSE ^PREMIER»VNBLS;
ELSR ^PREMIER«VNBLS;
- 145 -

END MMEEQTJ;
•TERME: PROC;
IF ({feECOND=genre_addition) I
(«6sEC0ND=genre_soustraction) THEN
IP (#TROISIEMB=VNEXS) THEN PTRPIL=FTRPIL-a ;
ELSE PTRPIL=PTRPIL-1 ;
ELSE «ÉPREMIER=VNEXS;
END 4TERME;
KFACTBURiPROC;
IF (^6sEC0NDssgenre_tmlltipl±cation] I
(*6SBC0NIl=genre_divi3ion) THEN
IF (#TROISIEMB=VNTES) THEN PTRPH,=PTRPIL-2 ;
ELSE ^PHEMIER=VNTES ;
END tFACTEUR;

#COREC1U:PROC;
IF (^SECOND=genre_deux_points) THEN
IF (f#TROISIEME=VTN0HERO) THEN CALL REMPLACER (a.VNEQCT);
END «COREQU;
#PARAME:PROC;
IF (5feECOND=genre_virgule ) THEN
IF (^TROISIEME=VINDOS) THEN PTRPIL=PTRPIL-2;
ELSE «£PH£MIER=VND0S
ELSE #PREMI£R=VNDOS
END #PARAWE;

*EQUAT:PROC;
^PREMIER=VNDNE ;
END #EQUAT;
•PRIMAIRE : PROC ;
#PREMIER=VNSEC;
END ^PRIMAIRE';
# SECONDAIRE : PROC ;
IF e x p o n e n t i a t i o n THEN CALL INSERER (VNEXN);
ELSE ««PREMIERS VNPAC;
END «SECONDAIRE;
- 146 -

#EXP0NENTIATION : PROC ;
IF opération.^ orrecte THEN CALL REMPLACER (l.VNSEC);
END ^EXPONENTIATION;

END APESS;

H.35. Traitement en cas d'erreur»

Jusqu'à présent, nous n'avons que très brièvement abordé le •


cas où une erreur se produirait. Il est en effet illusoire de se placer
dans le cas où le programme source est sans erreur.
En pratique, la programmation dans un langage est un art. Plu-
sieurs facteurs font que le programme fourni à l'entrée d'un compilateur
présente des erreurs. Même si nous avons le sentiment d'avoir bien com-
pris le problème et d'avoir choisi le bon algorithme, il n'est pas cer-
tain que le programme soit correct.
Lors de la compilation, des erreurs sont détectables, ne se-
rait-ce qu'aux trois phases d'analyse lexicographique, d'analyses syn-
taxique et sémantique et enfin de synthèse.
Dans le cas qui nous intéresse, il est superflu de doter le
compilateur d'une "intelligence artificielle" capable d'en faire un
compilateur-correcteur d'erreurs. Nous nous sommes bornés à donner un
message d'erreur compréhensible et à ignorer l'équation ayant provoqué
l'erreur.
Nous avons répertorié en annexe A les messages d'erreur four-
nis lo.rs de la phase d'analyse.
Une fois la phase d'analyse terminée, un indicateur (PASSEZ)
est testé. Si cet indicateur, initialement positionné à 1, se trouve à 0
basculement provoqué par la rencontre d'au moins une erreur, la phase
de synthèse, faisant l'objet du chapitre I H , n'a pas lieu. De plus
toutes les étapes qui suivent la compilation sont aussi inhibées par
retour d'un code-système testé au niveau du langage de commande (JCL),
- 147 -

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

H.41 . Généralités [ A 1 2 ] , [ B 2 I ] , ( c i o ] , [D11] , ( p i o j , [ G 4 I ] , (R1CT),


(v2o] .
Lors de la phase d'analyse, il est souvent préférable de con-
vertir le programme-source en une forme interne, ceci pour des raisons
d'encombrement mémoire et de simplification de l'analyse. En effet, dans
la plupart des cas, en représentation interne, les opérations apparais-
sent dans l'ordre où elles doivent être exécutées, ce qui facilite la
compilation. De plus, une représentation interne peut être exploitée
pour une interprétation.

Avant d'aborder notre exposé, quelques remarques s'imposent Ï


1} Lorsque nous parlons d'opérateurs (+, -, *, / etc.) il est sous-
entendu que c'est de leur forme interne qu'il s'agit. Considérons, à
titre d'exemple, la grammaire G(<PROGRA>) donnée figure 1-10, le voca-
bulaire étant ordonné, les symboles terminaux en tôte. Lorsque nous par-
lons de l'opérateur *, nous sous-entendons le symbole du vocabulaire
affecté de la valeur 4.
Z) Opérandes et cpérateurs sont amenés à cohabiter dans une même
table, dans des ordres non connus à l'avance. Il faut par conséquent
les distinguer. Pour lever l'ambiguïté, nous avons adopté la solution
de deux tables gérées par le môme indice PTRPOL» Une table groupe ce
que nous convenons da désigner par types, c'est la table POLT et une
deuxième table groupe ce que nous convenons d'appeler les rangs, c'est
la table POLO. Notons, au passage, qu'en ce qui concerne les opérateurs
ces notions ont besoin d'etre précisées. Nous le ferons un peu plus
loin.

3) Nous ne considérons que la notation polonaise post-fixée, c'est


à-dire celle dans laquelle les opérateurs suivent les opérandes sur
lesquels ils portent.

11.42. Transformation d'une expression en notation polonaise.

La natation polonaise est très facile à mettre en oeuvre en


ce qui concerne les expressions arithmétiques (ce qui est notre cas)
ou logiques.
- 148 -

n.421. Exemples_simplifles.
Expression arithmétique Expression sous forme polonaise
A*B A B *
A*(B+C/D)-E A BCD/ + * E -

XX.422. Les ^ègles_élémentaires_de_transformation.


Les trois règles élémentaires suivantes nous permettent d'as-
socier à chaque expression la chaîne polonaise qui lui correspond :
1) Les variables, les paramètres et les constantes apparaissent
dans une chaîne polonaise dans l'ordre même où ils se présentent.
2) Les opérateurs apparaissent dans l'ordre où ils doivent âtre
évalués (de gauche à droite).
3) Les opérateurs suivent immédiatement les opérandes sur lesquels
ils portent.
Remarque :
Les opérateurs tmaires peuvent être traités de deux façons
différentes :

1) Les opérateurs unalres peuvent être considéréa comme des opérateurs


binaires avec un opérande nul.
Par exerapl< pour transformer l'expression A/(-B+C*D) on écrit
Expression arithmétique Expression sous forme polonaise
A/(-B+C*D) A 0 B- CD*+/
2) Un symbole différent est utilisé pour lea opérateurs unalres. Con-
venons que # représente l'addition unalre et S la soustraction unal-
re. Nous obtenons pour la même expression la chaîne polonaise sui-
vante :

AB-aCD*+/-
- 149 -

Algorithme de transformation.
Supposons disposer d'une pile. Les expressions arithmétiques
peuvent être converties en notation polonaise à partir d'une seule ana-
lyse de gauche à droite, à l'aide de l'algorithme suivant :
A-. Si le symbole courant est une variable, une constante ou un pa-
ramètre, il est introduit dans la pile et le symbole suivant est
analysé. La règle utilisée est :
opérande ::= variable ou constante ou paramètre.
A.. Si le symbole courant est un opérateur binaire, il opère sur les
deux opérandes se trouvant au sommet de la pile. La règle utilisée
est :
opérande ::= opérande opérande opérateur.
A-. Si le symbole courant est un opérateur unaire, il opère sur l'opé-
rande se trouvant au sommet de la pile. L'opérateur est introduit
dans la pile. La règle utilisée est :
opérande ::= opérande opérateur.
Le programme est*analysé Jusqu'à la rencontre du point final. Pour cha-
que symbole en cours d'analyse on effectue A. » A„ ou A.. Lorsque le
point final est rencontré, la pile contient la chaîne polonaise asso-
ciée au programme en cours d'analyse.

a e
II. 423 « t£_Y2£â5ïïiâi£---2_i _2ii2-P.2i£S5i5 . •
Nous avons désigné, paragraphe 11.41, par POLT la pile polo-
naise 'champ types' et par POLO la pile polonaise 'champ rangs'.
Les conventions adoptées pour les types sont groupées tableau
11-35 on colonne 1 . Nous avons enfin groupé en colonne 2 du môme tableau
les valeurs que peut contenir la pile POLO compte tenu du champ type.

H . 424. ^e s _ so us-programme s d ' an^^se_sémançig.ue_dans_l • anal^S^ur


NONSEMA

Hypothèses de départ.
1. L'analyseur travaille d'une manière telle que lorsqu'il
rencontre la branche x d'une forme phrasée, celle-ci devant être réduite
à U £ N, le sous-programme associé a la régla suivante est appelé :
TYPE RANG

Valeur numérique \ Description


i

1 { Constante Position où la constante est sauvegardée


1
2 { Operateur d'addition = 1 pour addition unairo

j = 2
— 6
pour soustraction unairo
pour addition binairo
| - 7 pour soustraction binaire
i
3 ( Variable non dérivée Rang de l a variable

h | Opérateur de multiplication = k pour multiplication


i
i = 5 pour division
i
5 ! Variable dérivée nu Rang de la variable
I sens mathématique

6 j Opérateur d'exponentiation =* 6

7 ! Début d'une fonction Rang de la fonction incorporée


1 incorporée

8 Evaluation d'une fonction Rang de la fonction incorporée


incorporée

9 Début d'une fonction Rang de la fonction externe


externe

10 Evaluation d'une fonction Rang de la fonction externe


externe

TABLEAU I I - 3 5
151 -

2. La branche de l'arbre syntaxique est réduite à chaque ré-


duction.
3. Si un élément non terminal V apparaît dans la branche
d'analyse, la portioi: de chaîne écrite sous forme polonaise, associée
à la sous-chaîne qui se réduit à V est déjà trouvée.
f

Conventions.
Désignons par PTBPOL le pointeur de la pile polonaise et pu,-:-
DIMPOL la dimension maximale de cette pile.
La gestion de la pile polonaise n'est effectuée que par un
seul sous-programme de l'analyseur NONSEMA ; c'est le sou3-programme
SINCHEME. Avant toute insertion de symbole, un test de débordement est
prévu.
Liste et r8le des sous-programmes.

ïï2£_5S_§22Ë_£32SSè?8îE
SSORVAL (rang constante, type constante)
SCEXPDOU (rang fonction incorporée, type évaluation)
#APEOET (rang fonction externe, type évaluation)
' (rang fone tion externe, type début)
(rang fonction incorporée, type début)
*CDOSTES (rang variable, type variable non dérivée)
, (rang variable, type dérivée)
•EXPONENTIATION (exponentiation, opérateur d'exponentiation)

•FACTEUR
((multiplication, opérateur de multiplication)
(division, opérateur de multiplication)
J
(addition una re, opérateur d'addition)
(addition binaire, opérateur d'addition)
«TERME (soustraction unaire, opérateur d'addition)
(soustraction binaire, opérateur d'addition)

A titre d'application, nous donnons figure 11-36 l'organi-


gramme du sous-programme #TERME.
152 -
•TERME J

TROIS nitimtMk.i)

_/sïcoTï?\_
TROIsVNU*? _ / s e c o ï ï ? \ - » MWIWIIÎSVHU»
S<
PTRFiurmni.i
? X
——SE—.
»l«umlt,l) PTRftiiPTftm-i

rrnmwfTRni-i »lHCRfMH,TIKOO)
nutrmn) :v*w* *iMc«nt(i,™ro)

tlNCiimu.'nMi)

<ED^ NBtOUiV»

•TERMS )

FIGEB6 ANALYSEUR syntaxique et sémantique NONSEMA:

S. P. #TERME
- 153 -

11.^3. Structure du. programme-source en forme interne.

A la fin de la phase .d'analyse, la pile polonaise contient


le programme-aource transformé en forme interne, dans l'ordre d'appa-
rition des équations et selon le modèle précédemment décrit.
Afin de pouvoir restituer l'ordre croissant des numéros
d'équations, condition fondamentale lors de la construction de la ma-
trice jacobienne associée au système d'équations décrites, deux table:.
EQUATl et EQUAT2 servent respectivement d'index de départ et d'arrivée.
Biles sont mises à jour au début et à la fin de l'analyse de chacune
des équations.
De plus le type du bloc auquel appartient chaque équation est
sauvegardé dans une table désignée par TÏPEQU. Cette indication servira
d'information lors de la phase de synthèse et de dérivation formelle,
faisant l'objet du prochain chapitre.
Nous avons donné figure H - 3 7 la structure du programme-
source tel qu'il se présente à la fin de l'analyse syntaxique et séman-
tique. Cependant, nous n'avons pas représenté les tables des symboles
(table mêlée et table de sauvegarde des variables, table des constantes,
table des fonctions, etc .) et ce, par souci de clarté.
- 15* -

7X 3 3
5 3
3 2 6
/ A
5 2
3 1
/ / 6
/
2 6 I
5 1
3 2
1 / 1/ 9* 2 7

1 / / / fr 3
3
4
1
3 3
4 4
' / / /// 14 j 2 7
//Il tfr 3 5
3 2
3 3
1 1 // / 4 4

HA\ 1 '^ 2 7
1 0
2 0
\
y S
lyi ^H ?
\ 6
/
POLT

type
POLO

rang
3 0
4 1
/*
C10
1

^/14
"7* pile polonaise

5 1 ^15 ( 19
TYPEQU EQUATt EQUAT2

FIQ H-37 FORME INTERNE DU PROGRAMME-SOURCE


<
i
- 155 -

Chapitre m : ETAPE DE COMPILATION, PARTIE SÏHTHESE.

XXX. 1. ALGORITHME DE DERIVATION FORMELLE.


HX.11. Introduction.
H I . 12. Rappels et notations.
H I . 13. Lignage d'L'ne ramification.
XXX.14. Applications à la dérivation formelle.
H I . 141. Schéma général de 1 ' algorithme,
XXX. 142. Une méthode de construction des ensembles K..

XXX.2. IMPLANTATION DES ARBORESCENCES EN MACHINE.


XXX.21. Introduction.
HI.22. Représentation d'un arbre.
ni.23. Application aux tableaux.
ni.24. Les structures concrètes de mémorisation interne.
m.2^1. Les vecteurs.
ni.242. Les chaînages.
ni.243. Les listes.
ni.244. Les plexea.
HI.25. Quelques méthodes d'organisation en mémoire des données
concrètes.
m.251. Généralité s.
111.252. L'organisation mi-séquentielle avec tables d'adresses.
111.253. Remarques.
ni.26. Pile associée au graphe.
III.27. Exemple simplifié.
- 156 -

III.3- EXPLOITATION DES CARACTERISTIQUES DU SYSTEME : VARIATION


TYPOLOGIQUE.
H I . 31. Introduction.
I H . 32. Caractéristiques structurelles et fonctionnelles.
IH.33- Principe de la métkode adoptée.

III.4. ORGANISATION DES PROGRAMMES.


TTT.41. Le programme NONDERÎ.
HI.42. Génération de code sous forme de quadruplets ordonnés.
m.421 „ Classification des codes engendrés.
in.422. Subdivision des codes en sous-classes.
III.423. Programmes FINTRTT et ENCODER - Liste des différents types
des codes d'exécution.
in.43. Nécessité de résoudre les adresses des fonctions externes
pour l'étape d'ordonnancement-traduction-précompilation :
appel dynamique de l'assembleur.
- 157 -

IIX.1. -ALGORITHME DE DERIVATION FORMELLE.

IH.11. Introduction.

L'algorithme que nous allons exposer permet de traiter de la


dérivation formelle d'une expression arithmétique aussi complexe soit-
elle. L'objectif que nous nous fixons est de construire les dérivées par-
tielles de cette expression par rapport aux variables qui interviennent.
Nous présenterons l'algorithme dans le cadre de la théorie
des ramifications [pli] (Vli) .
Rappelons brièvement que cette théorie précise et étudie al-
gébriquement la notion intuitive de graphe arborescent, avec éventuel-
lement plusieurs racines, orienté de gauche à droite et étiqueté par
les éléments d'un alphabet.
Il s'agit, pour des couples (x,y) de points du graphe, d'as-
socier un ensemble d'informations. Bien entendu, c'est un véritable
gaspillage de construire l'ensemble des chemins pour en déduire ces
informations. L'algorithme, que nous allons développer, permet d'obte-
nir à chaque étape un ensemble partiel, auquel nous associons des in-
formations partielles, conduisant à l'information contenue dans l'en-
semble final.
Nous procédons, dans ces conditions, par construction de sui-
tes obtenues par juxtaposition de nouveaux chemins à chaque étape. Nous
considérons des transformations qui sont des homomorphismes d'un ensem-
ble muni de deux lois de composition et contenant les suites de chemins,
dans un autre ensemble que nous allons préciser. Le but est d'obtenir
une transformation des suites de chemins en une information associée.

III.12. Rappels et notations.

Désignons par :
- V un ensemble fini
- V* le monoïde libre engendré par V
- V l'ensemble des ramifications sur V.
158 -

1. RamificVtion
a. L'ensemble V des ramifications est muni :
1. d'une loi de composition interne, notée + et appelée CONCATENATION.
Cette loi est associative et possède un élément neutre ; la
RAMIFICATION VIDE notée A . Elle juxtapose deux ramifications à m et
n racines en une ramification à m+n. L'opération concaténation est
représentée figure HI-1 .

2. d'une loi de composition externe à opérateurs dans V, notée * et


appelée ENRACINEMENT. Cette loi associe à un élément x de l'alpha-
bet et à une ramification r, la ramification x *r obtenue en adjoi-
1

gnant à une ramification r une racine étiquetée. Elle est représen-


tée figure H Ï - 2 . 2Tous identifierons x £ V et x * A € V de sorte
que :

V c V.

b. r € Y, r^rt ^ 3 x e V, 3 !(r., , r ) I
a

r = x*v^+r 2 .

c. Avant d'aborder la notion de langage régulier standard,


noua définirons quelques applications admettant V comme ensemble de
départ. Ces applications nous permettent d'exposer les notions sur
lesquelles repose l'algorithme. De plus, lors de l'étude des proprié-
tés de V, nous utiliserons le raisonnement par récurrence dont le
schéma est le suivant ;
Considérons un élément quelconque x. de V, et deux ramifica-
tions r_ et r.. Soit aussi P un prédicat sur V, 51 la ramification vide
vérifie ce précidat (i.e. si P ( A ) est vrai) et si les lois de cotapor
tion définies précédemment restent vraies, c'est-à-dire :

1. I P(r ) vrai
1 et P(r ) vrai J ^
2 | P(r,j-rr ) vrai \
2

2. | P(r ) vrai | = > \ V x , £V, p( t * r ) vrai |


1 3 | 1

alors P(r) est vrai pour tout r £ V.


- 159

ramification r

ramification r+ s

ramification s

I FIG 1-1 CONCATENATION de 2 ramifications r a s

x,£V

FIG m-2 ENRACINEMENT d une ramification (xi * r)


- 160 -

Définition I1I-1 : soit p une application de V dans V appelée


MOT DES RACINES et définie par :

A
p(*) =

p(r +r ) = p(r )f>(r )


1 2 1 2

f>(x * r) = 3t,
1

Le premier symbole de p(r) est la PBEMIEHE RACINE et le dernier symbole


de p(r) est la DERNIERE RACINE de la ramification r.
Ainsi pour la ramification r de la figure III-1, nous avons p(r) = x.x . ?

» #
Definition m - 2 : soit if une application de V dans V appelée

MOT DES FEUILLES et définie par :

If ( A ) = *

r +r = r r
^^ 1 2^ f( 1 ^ f ^ 2^
' JL a i r= A
cp(x * r )
1

<|(r) si rji*

Ainsi pour la ramification r de la figure III-1 , nous avons ;


>f(r) = x x.x^x.x x .
4 4 6

Définition m - 3 : soit y £ V et f une application de V dans


l'ensemble des parties de V* définie par :

y*) = *
f (r r ) =f (r,) u f (r
y 1 + 2 y y a

f (r) M p(r)
y si x=y
f (x. * r)
f (r)
y si x^y

Les mots de l'ensemble f (r) sont appelés FAMILLES DE PREDECESSEUR y.


Ainsi pour la ramification x- # r de la figure III-2, il existe trois
familles de prédécesseurs x ! X L , X.X_, X.X-. 1
- 161 -

Définition III-4 : soit un ensemble V et une application t de V


dans V . Soit enfin une application t de V dans V appelée TRANSCRIPTION
de V dans V et définie par : .

t(A) = A

t ( r r ) = t(*,)
1+ 2 * t(r ) 2

t ( ^ *r) =-*<3t,) * t(r)

L'application transcription remplace toute étiquette x. £ V d'une rami-


fication r de V par une étiquette t(x. ) £ V . La ramification résultat
est une ramification de V . Ainsi :

V = | Xj .Xg.Xj.x^.Xj.Xg | , V = | tt,0,ï,S, £ , ^ | ei
=?r £ V
t(x,) = ce, t ( x ) = | 3 , t U ) = t f , t ( x ) = S, t ( x ) = £, t(x )=->],
2 3 4 5 6
(cf. Pig. III.1

r = x 1 * (x #x +x *(x +x )) + x
1 lf 3 5 lt 2 * (x.+x^+Xg)

devient par transcription Ç € V :

Ç = a * (tt*S+7*<Ê + 6)) + p * (£+ S+TÏ).

2. Langage régulier standard (LRS) [B50J (G5O).


Considérons une relation binaire V dans V. Le couple (V,|~)
est un graphe fini dont V est l'ensemble des soumets. Un chemin de ce
graphe est ici une suite finie non vide x- , x„, ... x telle que :

x Tx i ± + 1 pour 1 i i à P-1

x 1 est l'origine du chemin et x constitue son extrémité.


Les chemins du graphe sont des mots sur V.
Considérons deux sous-ensembles I et F de V et l'ensemble
des chemins dont l'origine est dans I et l'extr@mité dans F. Les che-
mins ainsi définis forment un langage sur V. Un tel langage est appelé
LANGAGE REGULIER STANDARD. Il admet T pour relation de transition, I
pour ensemble des origines et F pour ensemble des extrémités.
- 162 -

Propriétés (p50j
Tout LRS est régulier.
Inversement, tout langage régulier est image d'un LRS par un
nomomorpnisme de monoïdes libres qui conserve la longueur des mots.
Un LRS sur un alphabet A est entièrement défini par la donnée
d'un quintuplet (V,î",I,F,g) ou :
- V est un ensemble fini, F une relation binaire et le couple (V T) t

un graphe fini
- I et E sont des parties de V
- g est une application de V dans A qui se prolonge en un homor-
phisme de V* dans A*.

Conventions.
Dans la suite, pour un LRS L sur V et deux symboles x et y
de V, nous désignerons par :
L , l'ensemble des mots qui commencent par x,
L , l'ensemble des mots qui se terminent par y,
L*, l'ensemble des mots qui commencent par x et se terminent par y.

2. Grammaire régulière standard (GRS) (_P11J .


Considérons à présent une grammaire G(s),

G(s) = (V, I,%, S)

avec V un ensemble fini,


X un saus-ensemble de V, l'ensemble des symboles terminaux,
<5 une relation binaire entre N = V-X et V* telle que quel que
soit x €. N, l'ensemble des mots vérifiant x ï ) soit un langage
régulier E ,
x

S l'axiome de la grammaire.

Définition IIX-5 : nous dirons qu'une ramification est ENGENDREE


par la grammaire G{s) si :
1. Son mot de racines est l'axiome S,
2. x^X lorsque A est une famille non vide de prédécesseur x (^ pou-
vant ne pas être unique),
3. son mot des feuilles est un mot sur X.
- 163 -

Le langage engendré par G-(s) est l'ensemble des mots des: fa-
milles des ramifications engendrées par G(s).
Considérons E l'ensemble des mots vérifiant x*ff* avec x € N.
Pour chaque x nous pouvons considérer l'ensemble des origines et l'en-
semble des extrémités des mots de E . Cela revient à considérer deux
relations binaires ? et S dans V telles que pour l'ensemble des mots
£ E !
^i • • • y p x

x ïy 1

xSy . p

Définition III-6 : la grammaire G(s) est dite GRAMMAIRE REGULIERE


STANDARD (GRS) si les langages E sont des LRS admettant <€ pour rela-
tion de transition c'est-à-dire : }

Yt t y i + 1 pour 1 « i « p-1.

TU..13. Lignage d'une ramification (_B50J [P12j .

La notion de LXGNAGE concerne les ramifications non vides


sur V.
Nous supposons la grammaire G(s) sans boucle.

Définition III-7 ! le LIGNAGE d'une ramification sur V est une


suite de mots (A, A ) non vides sur V vérifiant les propriétés
suivantes :
1. Soit x S. V. L(x) = (x)
2. Soit i\| e V, r £ V 2 et x € V tels que :

M r , ) = <Aj l ) n et L(r„) = (A* A*)

Nous avons :

L r
< 1«2> = ^ *n' *? *m>

L(x»r,) = (xA} xA^).

Ainsi pour la ramification r de la figure III-1 , nous avons :

x x
L(r) = ( x x x , x x x , x s x , Xj-^. x 4i x,s)-
1 1 4 1 3 5 1 3 l> 2 a
- 164 -

Proposition III-1.
Soit une ramification r de lignage L(r) = (A.. , .,., 1 ) .
que q
ces conditions
a * J\ * c omm
b. X commence par la dernière racine de r,
c. a- ... a est le mot des feuilles de r.

Définition I U - 8 : considérons une grammaire G(s) et les deux r e -


lations binaires ? et S dans V associées aux deux ensembles des origi-
nes et des extrémités. Soit un mot non vide pour G ( s ) . Ce mot est î
1. CALE A GAUCHE, s'il est un chemin du graphe (v,v) . Il appartient à
l'ensemble des mots calés à gauche que nous désignons par G.
2. STRICTEMENT CALE A GAUCHE, s'il est calé à gauche et commence par
l'axiome S. XI appartient à l'ensemble des mots strictement calés
S S
à gauche que nous désignons par G . Il est bien entendu que G c G.
3. CALE A DROITE, s'il est chemin du graphe (V, S ). Il appartient
alors à l'ensemble des mots calés à droite que noua désignons par I).

Définition III-9 : soit deux mots "K et X'. Le mot A est COUPLE
au mot V s'il existe trois mots \* , A , \^ appartenant respective-
g

ment à V , G, D et tels que :

- >= X A 1 2

- A'-V;
- le premier symbole y de 1 et le premier symbole z de X,
vérifient la relation binaire z 1 y.

Proposition TTT-2.
Soit G(s) une GRS et une suite de mots non vide (A. \ ).
Pour que cette suite de mots soit le lignage d'une ramification r en-
gendrée par G ( s ) , il faut et il suffit que :
1.* i + 1 soit couplé à } , . pour 1 é i i n-1 .
2. V finisse par un symbole terminal pour 1 i i s n.
S
3. V, * G .
k. \ S D.
- 165 -

iSn effet soit r une ramification engendrée par G-(s) et soit (A ,..., A )
t

son lignage. Par récurrence sur r nous avons : r

2. *., e a.
3. x « a D.
A partir de ces propriétés et comme conséquence de la proposition III-1,
la ramification r vérifie les conditions (t), (2), (3) et (4) de la
proposition TTT-2.

Réciproquement, soit 1 la longueur de cette ramification.

1. Si 1 = 1, alors r s'identifie à un symbole terminal x et on


a par définition :
V x ÊZ , L(x) = (x)
2. Si 1 > 1, alors il existe r. et r- uniques tels que :

La grammaire G-(s) est sans boucle. Par conséquent x ne peut pas âtre

r A e r A a v e o = x
£é§-l -i = * 2 ^ *1 *
La ramification r„ est la ramification engendrée par G(s) et
admet pour lignage L(r_) = (>-, ...» * „ ) •
Dans ces conditions» la ramification r devient :

avec x un terminal. Ce qui répond à la question.

£è§_£ r
i ^ A
»A 1 j^ x et L(x*r,j) = (\^ t ..., \ ) avec
x
h - *i
a. Si r_ = A , alors r est la ramification engen<irée par G-(s)
1

admettant (A.., ..., A ) pour lignage.


b.. Si r je A en conséquence de la propriété (III-1 ), A - ne
2 t

commence pas par x. r. est alors la ramification engendrée


par G(s) de lignage ( A . .... * ) . p + 1 n

r = x =* r- # r_ répond donc à la question.


- 166 -

Soit un langage L sur V et un symbole terminal a. Nous note-


rons C(L,a) l'ensemble des mot? couplés en un mot de L et froissant
par a :

0(L,a) = U (L/D - | A | ) Cri


Z

(z.y)
t. q. z Ty

Proposition III-3.
Si L est un langage régulier, C(L,a) est un langage régulier.
En effet, <ya et D sont des LRS et le quotient,
z

** » la différence
et le produit de deux langages réguliers sont des langages réguliers
[Hfco] .
III.14. Applications à la dérivation formelle.

TTT.141. §£^£5§_llîi££§i_l£_ilâif£Eiï52£'
Soit G(S) une GRS sans boucla et un mot 0=0. ... a à analy-
ser. En conséquence de la proposition (lH-2), les ramifications cher-
chées seront déterminées par leur lignage.
Lors de la recherche de ces lignages, nous construisons la
suite de langages réguliers définie par :

S
[ K. = G
î a
K ± = C(K _ , a ^
i 1 pour i = 2 , ..., n

Proposition III-4.
\ . ê K. si, et seulement si, 3 X. , ..., X J , tels que :

S
1. X, £ G .
2. ^. se termine par a., pour 1 * j à i.
3. X. +1 est couplé à \ , , pour 1 t j 4. i-1 .

Le mot a appartient au langage engendré par G(s) si, et seu-


lement si, K conti'..-!!. t:n mot calé à droite.
- 167 -

Proposition H I - 5 [B5CT| ( p l i ] .
Le mot et e s t engendré par l a grammaire G-(S) s i , e t seulement

K n D ^ 0.

La proposition III-5 nous indique une méthode de reconnaissar

Les langages E. étant réguliers peuvent être représentés pai


des ensembles de chemins de graphes. Dans ces conditions, partant du
f f r r
quintuplet (E ,r', I , F , g ) définissant le langage L engendré par
la grammaire G(s) et du quintuplet (E-, T-, I-, F_, g_) définissant
l'ensemble G des mots calés à gauche, il s'agit de construire le quin-
tuplet (E, T , I, F, g) définissant C(L,a).
Soit E_ l'ensemble des points de F' qui sont joints à un
1
point de F par un chemin que g transforme en un mot de D. Si nous sup-
posons que les ensembles E' et E„ sont disjoints, nous pouvons prendre

- E=E' U S_
G
1
- r » r U T | (x,y) | x G E ' e t y G I
G G e t ( 3 z € E | x H z e t g' (z)"Cg (y) ) |
D G

- 1= I»

g ' ( x ) pour x « E'


- *(*) g (x) pour xi. a
G

X l'étape i, pour construire le langage X. , nous ajoutons au


graphe déjà construit les points d'un graphe utilisé pour définir Ga..
Ce langage eat l'ensemble des chemins du graphe (V x I i | , TS ) dont ±

les points sont (x,i) pour x appartenant à V et vérifiant :

(x,i) ^(y.i) W x V y.

Supposons D. , l'ensemble des points de B _ qui sont joints


i 1

à (a _ ,i-l) par un chemin dont les arcs ((x,J), (y,k)) vérifient xSy
i 1

L'algorithme de construction du quintuplet (E^r^, I , P., g/), repré-


peut s'écrire :
- 168 -

1) - E 1

2) Pour i=2 n :
- E =B U ± W (V x j i | )
- r ± = r 1+1 u TT u ( ( U , j ) , ( y , j ) ) | j a
± at ([aztvj et[ak<i]l
((z,k)eD _ i 1 et (x,j) ["^(z.k) avec zCy) j

3) Pour 1 é i * n !
- X. est réduit au point (S,1)
- F. est réduit au point (a. i) t

- S^x.j) = g(x.j) = x.

L'ensemble E n
= U E. ainsi que les relations ?. sont con-
x
1=1 ,n
nues dès le depart. L'algorithme revient à .ajouter des arcs à chaque
étape pour parvenir au graphe final (E,T*) = ( E , P_). Ce graphe permet
de déterminer tous les ensembles K.. Il donne donc le résultat de la
dérivation formelle. Plus précisément, il permet de déterminer les ra-
mifications qui forment le résultat cherché. Ces ramifications sont
définies par leurs lignages, les n-uplets (A-, ..., X ) tels que :

2. Pour 1 £ i <. n, \ . ,. est couplé à V


3- X n £ K r 0 D.
Soit q le nombre de symboles .ion terminaux de G(s). Le temps
demandé pour la reconnaissance et l'analyse d'un mot de longueur n est
3 3
proportionnel à q n . Quant à l'encombrement, il est celui d'un graphe
de qn points.
Ces temps et encombrement ne sont que des majorants. Nous
pouvons améliorer le temps et diminuer l'encombrement en utilisant des
techniques convenables pour le stockage du graphe. Une étude de l'im-
plantation des arborescences en machine et des méthodes d'organisation
en machine des données concrètes et un moyen de parcourir le graphe en
empruntant tous ses arcs une fois et une seule s'imposent. Nous abor-
dons ces problèmes dans les prochains paragraphes.
- 169 -

III.2. IMPLANTATION DES ARBORESCENCES EN MACHINE IB30J .

m . 21 . Introduction.

Nous nous intéressons à la représentation en machine d'une


structure abstraite (externe) de données, à l'aide d'une structure con-
crète (interne). Les structures abstraites qui sont possibles sont :
- les chaînes
.- les tableaux
- les piles et les queues
- les tables
- les arbres
- les graphes
D'un autre c8té, nous disposons des structures concrètes suivantes :
- les vecteurs
- les chaînages
- les listes
- les plexes.
Le problème qui nous intéresse est de pouvoir, à partir de
la forme interne du programme-source, construire un graphe en réper-
toriant chacun de ses sommets de façon à pouvoir, à n'importe quel
moment, atteindra ce sommet. Nous souhaitons obtenir un temps d'accès
admissible, pour consulter les informations qui lui ont été associées
ou pour effectuer une mise à jour de ces informations. Nous allons,
dans les lignes qui suivent, exposer brièvement quelques types d'im-
plantations ainsi que les mécanismes d'accès correspondants. Comme
support de structure abstraite, une fois exposée la structure d'arbre
dans sa généralité, nous prendrons un cas particulier, le tableau.

III.22. Représentation d'un arbre.

Considérons l'arbre de la figure 0-7» paragraphe 0.2. Il peut


être représenté
1, sous forme de listes :
a,(b c(d,e,f))
t

2. sous forme de collections d'objets (figure III-3).


- 170 -

F1GHI-3 Représentation d'un ARBRE sous forme de


COLLECTION D'OBJETS

~ *ttaV
t

• 11 J-ii. yLHi /l«

FIGl-4 DESCRIPTION D'UN ARBRE


- 171 -

Les objets élémentaires sont places aux feuilles. L'arbre


introduit une structure sur ces objets.
D'une manière générale, si (N ) eat le demi-degré extérieur
d'un noeud, ou le nombre de branches qui, partant du noeud considéré de
niveau (p-1 )j permettent d'atteindre un noeud d e niveau p r l a donnée de
tous les N suffit pour d
décrire l a forme de l'arborescence, à l'aide
d'une expression d u type

/ 1 B 11 1 N
i\ o N
1 / N-l 1
I

N
1 J2 1
N
2 4 * 2

En effet» considérons la figure TTT-4, nous avons :

Niveau_0

un noeud de degré N..

Niveaul
N
. 1 2 1
S 1 noeuds ayant les degrés K„, N,, . .. , ÎJ avec :

N 2 =| 4
Niveau_2

N-N, noeuds ayant les degrés

11 2 1 *T 2
N^', ..., N 3 * avec N 2 = 2 N.j "

N
1 k
1
N, , . . . , N " avec N, = 2. N, '
A
J
1=1 ^

N, = 1 NÏ
- 172 -

- ïjiveau_3
Tous les noeuds sont de degré 0 (le degré des feuilles est nul).

UI.23. Application aux tableaux.

Un tableau peut ôtre considéré comme un arbre ayant des pro-


priétés particulières. Comme toute structure abstraite de données, il
doit ôtre défini en vue de son utilisation. Ses propriétés intéressent
à la fois :
- sa définition, c'est-à-dire sa représentation à l'aide d'une struc-
ture interne,
- son utilisation, c'est-à-dire le mode d'accès aux différents éléments.

Définition IIX-10 : un TABLEAU est un ensemble d'unités structurées


de manière que la donnée de sa FORME, c'est-à-dire de ses niveaux et
degrés ainsi que de son TYPE, c'est-à-dire des types de valeurs de ses
composantes, puisse définir de façon unique la position de chaque unité
du tableau et donne, par cela, une possibilité d'accéder directement à
chaque unité.

Propriétés sur la forme.


1. Tous les noeuds d'un marne niveau (p-1) possèdent le môme degré N .
2. Toutes les feuilles ont même niveau n. Ce niveau est égal au nombre
de paires de bornes.

Propriétés sur le type.


3* Toutes les composantes d'un tableau T ont même type*G. Ce type est
celui du tableau.

Propriétés liées à l'utilisation d'un tableau.


L'utilisation d'un tableau met en jeu un mécanisme qui, à
partir du nom T et d'une liste d'indices i-, ..- i permet d'atteindre
r

un élément quelconque du tableau. Ainsi, un indice i de la liste des


indices, p € 11 ,n], permet, à partir d'un noeud de niveau (p-1), ce
niveau étant défini par les (p-1) indices, de choisir la branche de
numéro i conduisant à un noeud de niveau p.
- 173 -

La variable indicée T(i- , . ..» i ) satisfait aux dea:c proprié-


tés suivantes :
k. Le nom T est unique et commun à toutes les composantes.
5. La liste des Indices permet d'atteindre une composante de niveau n,
en précisant son rang.

IH.2^. Les structures concrètes de mémorisation interne.

La plupart des ordinateurs ont une mémoire composée d'un en»


semble de mots ordonnés, et ceci est la seule structure possible de la
mémoire que peut avoir le calculateur. En général, par l'utilisation
des programmes et des sous-programmes, les structures de mémorisation
d'un niveau plus élevé sont superposées à la structure de base du cal-
culateur et, pour l'utilisateur des sous-programmes, le calculateur
semble avoir lui-môme cette structure.

m . 2 4 1 . Les vecteurs.
Un .vecteur est un ensemble d'éléments physiquement adjacents
dans la mémoire de l'ordinateur. XI esc entièrement défini par la con-
naissance de son ADRESSE DE BASE, de la TAXLLE DE SON ELEMENT et de sa
LONGUEUR. Un tableau unldimensionnel structure fictive de données, est
implanté en machine par un vecteur.

TTT. 2'.-.". ^ £ .Chaînage s •

L'implantation par chaînage d'un tableau suppose que les


zones réceptrices soient contiguës. Nous supposons le maillon du type :

p V H

dans lequel :

- P - 0, s'il s'agit d'un noeud et P= 1 r s'il s'agit d'une feuille,


- V désigne le lien vertical.
- H désigne le lien horizontal.
A titre d'exemple, nous avons considéré un tableau bidimen-
sionnel
T(1:3, 1:2)
- 17^ -

que nous avons implanté ligne par ligne. L'arbre correspondant, les
liens et l'implantation sont représentés figure III-5.

III.2^3. Les_listes.
Une liste est un ensemble d'éléments dont chaque élément con-
tient un pointeur vers l'élément suivant.
L'implantation par listes n'a d'intérêt que pour des zones
non contiguës.
Nous avons représenté figure III-6 l'implantation d'un tableau
T ( 1 0 , 1:2)
avec un maillon du même type que celui décrit précédemment.
Le mécanisme d'accès doit permettre d'atteindre la position-
uémoire associée à la composante T(i , i ) et, dans le cas général, à
la composante T(i-,i ).. Dans ce cas, l'accès est effectué en considé-
rant la liste des indices à partir de i- , par n boucles de calcul (pour
la figure TET-6 l'implantation a été effectuée ligne par ligne).

1. Pour les (i-1) premières boucles le mécanisme est le suivant :


1-1 à la pi**w boucle relative à l'indice i et, à partir du noeud
considéré, effectuer :
a) une progression sur lien vertical '-', à partir du dernier maillon
atteint.
b) i - progressions sur lien horizontal H (si nous rencontrons
H=0, nous décelons une erreur).
i e m e
1-2 passer à la (p+1 ) boucle correspondant à l'indice i .. .
1 m
2. Pour la n ° boucle, effectuer avec l'indice i, :
n
2-1 i 1 progressions sur lieu horizontal H (si nous rencontrons H-0,
noua décelons une erreur).
2-2 le test du dernier maillon atteint.
Nous n'avons considéré que le cas des listes unidirectionnel-
les. Nous aurions pu, bien entendu, assurer l'implantation du marne ta-
bleau à l'aide de listes bidirectionnelles.
Quoique les listes soient en mesure de représenter des stru-
tures de données des plus complexes, telles que arbres et graphes, elles
sont assez souvent inefficaces et opaques. Une structure de mémorisa-
tion plus efficace et transparente est un PLEXB,
- 175 -

©—©—©

1*1 Ta TM Tu T« T»
TM Tn Tu Tu ÏVt T M

arbre liens

i^âr^
ft «•
\tuvl\l\i\lv\llu
«H ««H « M , «M «Ml CX.U °*4i ""'H '"'"*

implantation

FIG1-5 IMPLANTATION PAR CHAINAGE


TI<XM 0

«C. OU» fi. 0 0

«6» •*»
' <*n 1 ««•. *ftl« 1
£ •«it-
r

NII N» NU Nu Nu Nu
« H ,
«* «il «».

FIG1-6 IMPLANTATION PAR LISTES


- 177 -

III.244. Les_glexes (R3O] fR3l) •


1
Un plexe (derive de 'plexes signifiant toute structure com-
plexe contenant un réseau intriqué de parties rexiées entre elles) est
un ensemble d'éléments appelés GRAINS ou maillons dont chaque élément
flst un vecteur de N mots en mémoire. Ce bloc de N mots est divisé en
un ensemble de zones contenant de l'information ou de pointeurs vers
les autres grains. A chaque type de plexe doit âtre associé un FORMAT
qui définit ce que représentent les zones individuelles.
Nous utiliserons des maillons tous identiques pour un même
tableau. Cependant leur taille sera fonction du nombre d'indices du
tableau à implanter. Les valeurs des indices seront représentées.
Dans ces conditions, nous distinguerons deux types de maillons
- des maillons de tête, pour un niveau donné, pour lesquels la valeur
de l'indice de niveau est égale à -1.
- les autres maillons.
Les ta tea peuvent Stre implantées dans des zones contiguê's
ou par chaînage.
Cette méthode présente de 1'intérêt, vis-à-vis de l'implanta-
tion traditionnelle des tableaux, lorsqu'on désire manipuler :
- des arbres,
- des graphes,
- des tableaux dynamiques rémanents, au sens d'Algol,
- des tableaux volumineux CREUX. En anticipant un peu sur l'étape
d'ordonnancement qui fait l'objet du chapitre XV, c'est ce type
qui a aussi été adopté lors du choix des pivots de la matrice
jacobienne.

Dans les autres cas, il est bien certain que cette implantation peut
faire perdre beaucoup de place.
Nous choisissons un maillon du type :

H V

*1 X
n an
- 178 -

dans lequel :
- H désigne le lien horizontal
- V désigne le lien vertical
- i-, . . . » i désignent les valeurs des indices de T telles que :
1. pour une tôte relative à L , i- = -1

n- pour une tôte relative à i , i = -1


n n
et pour un élément :
1 . i £ [Min 1 , Max {j
1

n- i a 4 [jMin n, Max n

L'implantation d'un tableau peut être réalisée selon l'une


des méthodes suivantes :
1. Implantation par lignes avec têtes dans une zone contiguë
2. Implantation par colonnes avec têtes dans une zone contiguë
3. Implantation simultanée par lignes et par colonnes avec testes
dans une zone contiguë
4. Implantation avec tÔtes implantées par chaînage.

A titre d'exemple, considérons le tableau T suivant :

" 11 12 0 14 "
T = 110 0 130 0

.0 1200 0 1400 -

Nous avons représenté figure I H - 7 son implantation avec têtes implan-


tées par chaînage.

IU.25• Queii^-** méthodes d'organisation en mémoire des données


concrètes.

I U . 251. Généralités.
Mous considérons une mémoire adressable. aonsti-tnêa de cases
de mémoire identiques repérées par des numéros consécutifs que nous dé-
signons par adresses. Ce type de mémoire est celui des mémoires dites
centrales. De plus, nous supposons qu'une case de mémoire peut contenir
ofe PCI^L
u

FIG m-7 IMPLANTATION PAR PLEXES AVEC TETES IMPLANTEES PAR CHAINAGE
180 -

une donnée élémentaire ou une adresse et que la distinction donnée-


adresse peut se faire par un simple test.
Convenons de noter : -
adresse (D) pour l'adresse de la case mémoire contenant la donnée D
contenu (a) pour le contenu de la case mémoire d'adresse a.
Il est alors immédiat que :

D si D est élémentaire
contenu( adrsssed)) ) D(l) si D a la dimension 1 : D(1 :N)
D(l ,1) si D a la dimension 2 : D(l:N1, 1:N2) etc.

Nous ne considérerons que l'organisation nd-séquentielle


avec tables d'adresses et laisserons de côté l'organisation séquentiel-
le et l'organisation pax listes.
XI est bien entendu que l'organisation séquentielle a le mé-
r
rite d 6tre simple. Mais son champ d'application est restreint : elle
est réservée aux tables et ne permet pas la mise à jour. D'autre part,
l'organisation par listes s'applique aux données structurées quelcon-
ques. En ce qui nous concerne, il peut arriver que le nombre de cellu-
les visitées au cours d'une exploration, pour une mise à jour, soit
important. En conséquence, la critique essentielle que nous faisons à
cette méthode porte uniquement sur la lenteur éventuelle des opérations
de consultation qui ne sont plus des opérations élémentaires, mais des
explorations.

III.252. L^O£g£nisation^mi-séquentielle avec tables d^adreases.


Toute donnée structurée indicée D peut dtre logée séquentiel-
lement en machine. En outre, nous pouvons utiliser des tables d'adres-
ses pour le repérage des données définies et disposées comme suit :
A toute donnée D, de dimension supérieure à 1, nous faisons
correspondre une table d'adresses A, dite ATTACHEE à D de dimensionr

1 et de longueur n ;

D - (D 1( D , ..., D , ..., D )
a ± n

A A A
- <V 2 V ••" n>"
- 181 -

Nous définirons l'adresse A.^ par :


1. A . = adresse (D.)> lorsque D. n'est pas de dimension supérieure à 1
2. A = adresse ( A i M où AS ' est la table attachée à D
l
i > lorsque D ±

est de dimension supérieure à 1.

A - Problème de consultation.
Considérons une donnée structurée indicée E de dimension 3
logée en machine selon le mode mi-séquentiel. Désignons par A la table
d'adresses qui lui est attachée. Proposons-nous de trouver l'adresse
d'un terme élémentaire D. . connaissant les indices i, j et k.
fe

Nous avons :
a. adresse (A.) = i-1 + adresse ( A ) , puisque A est logée séquentielle-
x
ment
1 1 1
b. adresse ( A ' ' ) = j-1 + adresse ( A ' ' ) , si A ^ ' est la table d'adres-
ses attachées à D ±

1
c. À } ' » A , par définition.
1

A ce stade, deux cas peuvent se produire :


1*) D. . a une dimension supérieure à 1 et contenu (A; ') est une adres-
se. Si nous supposons que (A *) est la table d'adresses attachée à
D. .. nous avons :
ij; 1 J ;
a - adresse ( A ^ ) = k-1 + adresse ( A J )
1 J ) 1
P - adresse ( A £ ) = A* *
J

i j )
A^ =» adresse ( D i j k )

"i'\ D,, est de dimension 1 et contenu (Ai ') n'est pas une adresse.
' ij -^~~"~~ J
Dans ces conditions :
1
CC - A; ' = adresse (D .) ±

+
p - adresse ( D i 1 k ) = k-1 adresse ( D J J )
En résumé, posons .'
m = k-1 + contenu (j-1 + contenu (i-1 + adresse (A)))
Nous avons :
- 132 -

- adresse (D. .,_) =» contenu (m) , lorsque contenu (m) est une adresse
- adresse (D,.. ) = m, lorsque contenu (m) n'est pas une adresse.

B - Problème de mise à jour.


Considérons une donnée structurée indicée dont tous les ter-
mes non élémentaires apparaissant à chaque décomposition soient de lon-
gueur inférieure ou égale à n. Nous dirons par la suite que la donnée
structurée est limitée à n.
Supposons que la mémoire soit constituée de blocs de n cases
consécutives et que l'organisation mi-séquentielle de D ait été effec-
tuée de telle sorte que chaque table d'adresses et chaque terme de di-
mension 1 se trouvent logés, calés au début d'un bloc.
Supposons, en outre, qu'a été mise séquentiellement en mémoi-
re une table d'adresses B = (B , B , ..., B ) , de longueur £, telle
1 0 4

que chaque terme B. soit l'adresse d'un bloc vide disponible. Nous ap-
pelons B, la table d'adresses des trous. En anticipant un peu, les
sous-programmes NONDERI et CALDERI, assurant la dérivation formelle,
laissent, dans une certaine mesure, au système d'exploitation le soin
de gérer la table d'adresses des trous. En effet, ils prélèvent les
blocs dans une zone-mémoire, appelée ZONE, de type AREA (PL/l). Au
besoin, certaines unités (ON-UNIT) centralisent et hiérarchisent les
traitements nécessaires à cette gestion.
Afin d'exposer le mécanisme de la mise à jour, nous nous con-
tenterons de recourir à un exemple.
Considérons B la donnée structurée indicée limitée à 4,
D = (((a,b,c),b),(d,e,f)).
Cette donnée est représentée figure H I - 8 . Proposons-nous d'effectuer
une mise à jour de cette donnée. Soit alors à placer les quatre données
élémentaires suivantes :
i.n 3 1 =m
2. D 3 2 = n
3. D 4 3 3 1 » m
k. D 4 3 3 2 = n.
La nouvelle donnée structurée eat alors :
D = (((a,b,o),b),(d,e,f),(ra n),( (,(m,n))).
> l

Bile est représentée figure III-9.


- 183 -

e x i l <BU4»uo EH

H3H

^Soa

t*J tmm wtikin«Mt U. ÀénnU »Um*nfc*a« b

• ^ \ CAM tMfenlhnfc * • « *4lMM b

FIG 1-8 DONNEE STRUCTUREE INDICÉE


AVANT MISE A JOUR
184 -

En EEED sun
sum
l?M I I SffX* E2
KX>fQ
Êx^gg
. A« >vA»vvAi >vA i
2

FIGffl-9 DONNEE STRUCTUREE INDICEE


APRES MISE A JOUR
- 185 -

1
1. Nous constatons que la mise en place initiale en mémoire d une-
donnée structurée indicée limitée à n, selon le mode d'organisation
mi-séquentielle, peut se réaliser très simplement par une succession
de mises en places de termes élémentaires repérés par leurs indices.
Chacun de ces termes peut se présenter dans un ordre quelconque.
2. La suppression d'un terme élémentaire s'effectue de manière-
symétrique en détachant un ou plusieurs blocs de D afin de les ratta-
cher à la table d'adresses des trou?.
3. Il peut arriver que la mémoire soit mal utilisée et que les
blocs ne soient remplis que très partiellement. Deux palliatifs s'of-
frent :
3-1 Utiliser des blocs de longueur variable. Nous avons laissé de côté
cet pjptifice car il présente l'inconvénient de faire apparaître
des empiétements entre blocs.
3-2 Modifier artificiellement la donnée structurée D. En effet, il
existe une correspondance biunivoque entre une donnée structurée
indicée limitée à n et des données structurées indicées limitées
à 2> 3, k etc ., par introduction de structurations artificielles
facilement repérables,

4. Utilisée en mémoire centrale pour des problèmes de consulta-


tion, l'organisation mi-séquentielle présente l'avantage sur l'organi-
sation séquentielle simple d'une vitesse plus grande, au prix d'un
léger accroissement d'encombrement causé par le logement des tables
d'adresses (lors du calcul des adresses, les opérations de multiplica-
tion qui sont nécessaires pour l'organisation séquentielle disparais-
sent avec l'organisation mi-séquentielle).
5- Utilisée pour des problèmes de mise à jour, l'organisation
mi-séquentielle permet une bonne utilisation de la mémoire si tous les
termes non élémentaires mis en Jeu par la donnée structurée indicée
considérée ont à peu près la môme longueur.

C'est ce mode d'organisation, étoffé au besoin d'implantation


par listes de certaines informations groupées en tableau qui va nous
permettre de dériver une expression par rapport aux variables qui in-
terviennent, à partir du graphe que nous allons construire par juxtapo-
- 186 -

sition de chemins à chaque étape. Afin de pouvoir utiliser cette straté-


gie mixte d'organisation et d'implantation, nous allons associer une pi-
le au graphe. La manière d'associer cette pile au graphe est exposée
paragraphe III.26.

III.Z6. Pile associée au graphe [P14j .

Il s'agit de déterminer un ordre des points du graphe que


nous construisons par Juxtaposition de chemins à chaque étape. Four ré-
soudre ce problème, nous pouvons parcourir ce graphe en empruntant tous
ses arcs une fois et une seule à la manière d'un labyrinthe.
Considérons i par exemple, le graphe de la figure 111-10.
1 - Partons du sommet 1 en empruntant l'arc 14
- Poursuivons par l'arc 45• D'où le chemin 14,45.
- Nous ne pouvons plus continuer dans cette direction. L'arc 45 peut
être le premier dans l'ordre cherché. Nous revenons donc à 14.
2 - Aucun arc non encore utilisé ne part du point 4. 14 peut être le
second arc dans l'ordre cherché.
- Nous repartons du point 1 par l'arc 16. Cet arc peut être le troi-
sième.
- etc .
Finalement, nous obtenons un ordre répondant à la question :
45, 14, 16, 21, 34, 78, 37. 23.
La suite de chemins construite pour obtenir cet ordre est
telle que pour passer d'un chemin au suivant, il suffit d'ajouter un
arc à la fin du chemin ou d'enlever le dernier arc. Ce processus permet
de transformer l'ordre d'entrée des arcs en un ordre de sortie, suivant
la règle « dernier entré, premier sorti».

Soit U un ensemble et F l'ensemble des suites finies d'élé-


ments de TT, y compris la suite vide notée e. Notons + la loi de compo-
sition interne de F (concaténation). Nous appelons pile sur l'ensemble
U toute suite finie (a , ..., a ) d'éléments de F, telle que :
a) a Q = a n = e
b) pour i=1 , . . . , n 3 «, £ U tel que i est une entrée de a. ,
c'est-à-dire & • aj_- + a. ou bi
±

c'est-à-dire a, , =» a, + ce. .
Les a, constituent les états de la pile.
- 187 -

FIGURE 1-10

DIMENSION DE ADRESSE DANS ETAT D'EVALUATION


LA LA PILE ASSOCIEE DE L'EXPRESSION
CELLULE (n) AU GRAPte

NOM DE LA ADRESSE DE LA ETAT D'EVALUATION DE


VARIABLE OEftVEE PARTIEL­ LA DERIVEE PARTIELLE
-;- LE ASSOCIEE ASSOCIEE

NOM DE LA ADRESSE DE LA ETAT D'EVALUATION DE


VARIABLE DERIVEE PARTIEL­ LA DERIVEE FARTtELLE
- if LE ASSOCIEE ASSOCIEE

description attributs sémantiques associés

FIGIH-11 CELLULE ELEMENTAIRE


- 188 -

Dans ces conditions si V est l'ensemble des arcs d'un graphe


et F est l'ensemble de ses chemins généralisés, e étant le chemin vide,
il est très pratique d'associer au graphe une pile, dont les états
sont des chemins du graphe, qui permet une construction de proche en
proche adaptée à l'algorithme de dérivation formelle présenté paragra-
phe III.1.

III.27. Exemple simple.

Afin d'illustrer les notions développées précédemment, nous


allons recourir à un petit exemple simplifié.
Considérons à cet effet l'expression simple suivante :

E a A t 3 + 6 * C * SIN(A).

Proposons-nous de calculer tr et « par l'algorithme précédent,


en tenant compte de toutes les remarques faites sur l'implantation.
Afin de faciliter la lecture des figures représentant les
différentes phases de l'algorithme, nous avons choisi une cellule élé-
mentaire simple représentée figure IH-11 . Elle correspond à un ensemble
d'informations observées à la fin de chaque étape, et constitue une
représentation schématique des données structurées indicées mises en
jeu sans toutefois rentrer dans les détails d'implantation qui sont
complexes.
Nous avons donné figure IIX-12 l'évolution du calcul des dé-
rivées partielles JTTT et — :
- A la phase 1, nous avons une contribution à la dérivée partielle

î Al P-,
- A la phase 3 , la dérivée partielle par rapport à A devient

H|p " ™ -
3
1
SE
- A la phase 5, une nouvelle variable, C, intervient: 3IT^.
0 p,5
• A l a phase 1 0 , l ' e x p r e s s i o n e s t entièrement a n a l y s é e :
If! = 3*At2+6*C*COS(A)

•3cjp 10 = 6*SIN(A)
- 189 -

/ PU ) A

A JU) 1

PHASE 1

1 PU) A

A J<1) 1

0 P(2) 3

PHASE2

t P(V At3

A )(1) 3*At2

PHASE3

1 PU) At3

A J(l) UAt2

0 Pf2) 6

PHASE 4

FIG 1-12 EXEMPLE SIMPLIFIE


190
1 Pit} A13

A J(1) 3*At2

o \P(2) e

1 P<3) C

c J<2) 1

PHASE 5

1 P(1 ) AT3

A J(l) 3*At2

1 P(2) 6*C

C J (2) S

PHASE 6

1 P(1) At 3

A J(1) 3»At2

P(2) 5*C

J (2)

/ P(3) A

A J (3) 1

PHASE 7
191

7 P(l) At3

A J(1) 3*At2

P(2)
s#c
J(2)

1 PI 3) SIN(A)

A J(3) COS(A)

PHASE 8

PU) Ai 3

j(i) 3*At2

—* 2 P(2) S i C *SINIA)

C J12) 6*S1N(A)

A J (3) 6 *C *COS(A)

PHASE 2

2 P(}) At3*6lC*SINTA)

A J(1) 3»At2*6*C»C0S(A)

C J(2) S*SIN(A)

PHASE 10

FIGIir-12 -EXEMPLE SIMPLIFIE


- 192 -

sn* et crrl constituent bien les dérivées partielles cherchées


9C
*A|P 1 0 IP10
de E par rapport à A et à C.

IH.3. EXPLOITÂT!*-., DES CARACTERISTIQUES DU SYSTEME : VARIATION


TYP0L0GK1*4UE.

III. 31." Introduction.

Une étude approfondie de l'algorithme d'intégration montre la


nécessité de résoudre un système implicite par la méthode de Newton.
Cette résolution, pour un grand système doit Stre effectuée d'une façon
efficace [M3O) .
Dana ces conditions, il est primordial d'aborder une" caracté-
ristique importante des éléments de la matrice jacobienne, qui est celle
de leur variation typologique.

IH.32. Caractéristiques structurelles et fonctionnelles [M30J .

Désignons par "élément" le terme générique J de la matrice


jacobienne J. A tout élément nous pouvons associer non seulement un .
certain code, qui lors de l'exécution se trrduit par une valeur numéri-
que, mais aussi un TYPE FONCTIONNEL (un nombre entier quelconque). Ce
type confère aux données numériques une hiérarchie pour l'exécution.
Le type, ainsi défini, sera désigné par VARIATION TYPOLOGIQUE DE
L'ELEMENT.

Definition. I H - 1 2 : un élément x possède une variation typologique S".


vt<- , si, et seulement si :

.2*- = o V(x*S

ïvt*
3 vfS
^ ^ /0
- 193 -

S= 1, •••»£_ avec S la variation typologique maximale de l'élément.


t

Un élément identiquement nul est de type 0„


Propriétés.
1. Il existe une relation d'ordre total entre les variations typolojl-
ques.
2. Un élément de type 0 est absorbant pour la multiplication sur le
corps des réels.
3. La variation typologique d'une combinaison linéaire d'éléments est
égale au maximum des variations typologiques de ces éléments.
4. La variation typologique d'un produit d'éléments est égale au
iwq-xriimini des variations typologiques de ces éléments.
5. La notion de variation typologique peut être étendue aux opérateurs,

III.33« Principe de la méthode adoptée.

Soit D l'ensemble des sommets du graphe obtenu par utilisation


de l'algorithme de dérivation Tonnelle, R le mSme ensemble muni de la
relation d'ordre variation typologique et $ un ensemble d'applications
de D dans R. Soit A l'ensemble des permutations sur les éléments de D
et B l'ensemble des permutations sur R.
Dans le cas qui nous intéresse R est formé par la réunion
de k sous-ensembles deux à deux disjoints :
R - U R. avec R. n R, = 0 V i?*j=1 , . .. , k.
X J
â»1 k *
f

B peut aussi être mis sous la forme de somme directe de sous-ensembles


de permutations d'éléments de R. :

a - a , + ... B . k

Considérons deux applications f. et f <s y. Nous dirons que


2

f.j et f 2 sont équivalentes si :

V x € D,3 (X £ A, £ € B|

f (x) = p f (ocx)
a t

Associons à chaque R.. une fonction de la variable entière n


(nç.0), y,(n) et à chaque application ffi^ une 'fonction poids* définie
de la façon suivante :
- 194 -

A tout r £ R nous faisons correspondre une cer. "» valeur


y, (n), n étant le nombre d'éléments de D admettant r pour image. La
'fonction poids' associée à l'application f est obtenue à partir d'une
matrice de sélection dépendant de la classe d'équivalence induite.
Nous noterons cette 'fonction poids' :

V(f) = F (V (n)).
x
±
r * R
Cette fonction nous permet de partitionner l'ensemble des chemins du
graphe.
Remarques
1. r est tel qu'il n'appartient qu'à un, et à un seul, des ensembles R^
2. n, le nombre d'éléments admettant r pour image, peut être nul.
Par exemple, si K est le graphe complet admettant n noeuds,
considérons des applications de l'ensemble D de tous les sommets dans
un ensemble R composé de trois sous-ensembles de sommets et, j3, V cor-
respondant respectivement à des sommets associés aux éléments invariants
de la matrice jacobienne, aux éléments qui dépendent de la variable in-
dépendante et à tous les autres éléments. Le graphe initial K peut
alors être transformé en un graphe colorié G de la façon suivante :

1. Si e -^CC, alors l'arc e de K est un arc de G et il est colorié


en rouge.
?. Si e -*-(3, alors l'arc e de S est un arc de G et il est colorié
en vert.
3« Si e — TT, alors l'arc e de K n'est pas un are de G.
Le graphe G, ainsi obtenu, est tel que ses sommets possèdent
des codes d'exécution, assurant le remplissage de la matrice jacobien-
ne, qui peuvent être effectués lors de la phase d'intégration, en de-
hors de la boucle de Newton.
Il suffit donc, lors de la recherche de tous les chemins,
de ne considérer, dans un premier temps, que les chemins non coloriés.
Ils donnent les codes d'exécution à effectuer à l'intérieur de la boucle
de Newton.
Ensuite, et compte tenu de l'attribut sémantique d'un sommet
hérité (attribut, fonction des attributs des ascendants directs du
sommet) ou synthétisé (attribut, fonction des attributs des descendants
directs du sommet), on établit les équations vérifiées en ce noeud
par les divers attributs.
- 195 -

Le système d'équations ainsi obtenu assure une propagation


correcte de la sémantique si on choisit des critères adéquats et si on
considère un ensemble d'attributs cohérents. De plus un tri des attri-
buts est nécessaire car ces derniers dépendent les uns des autres et
il s'agit de déterminer ceux qu'il est possible d'évaluer, en premier.
En résumé, la solution du système d'équations vérifiées par
les divers attributs et le tri effectué sur les définitions sémantiques
permettent d'établir une liste d'implication des attributs. Ces der-
1
niers donnent l'ordre d activation des instructions sémantiques dans
le programme d'exécution engendré automatiquement, à partir des équa-
tions fournies en langage NEPTUNIX, à l'entrée du compilateur.

IIX.4. ORGANISATION DES PROGRAMMES.

Le système de dérivation formelle est composé de trois sous-


programmes, CALDERI, LEJEBER et NONDERI. Les programmes CALDERX et
NONDERX sont réalisés selon un môme principe de construction du graphe
par opérations élémentaires, principe décrit paragraphe I H . 1 . Quant
au programme LXNEOER, il assure l'exploitation des caractéristiques du
système par la méthode exposée paragraphe III.3.
Dans la suite, nous allons donner l'organisation du programme
NONDERX ; nous décrirons la génération de code sous forme de quadruplets
ordonnés et nous traiterons du problème de la résolution des adresses
des fonctions externes que l'utilisateur désire incorporer à la biblio-
thèque .

III.41. Le programme NONDERX.

Le programme NONDERI est composé d'une boucle principale et


de seize sous-programmes internes qui sont :
1. CENTREE, s.p. centralisant le traitement préalable à toute concaté-
nation ou enracinement de ramifications.
- 196 -

2. *SORTIE, 3.p. centralisant le traitement postérieur à toute conca-


ténation ou enracinement de ramifications.
3. *GESHEG, s.p. d'attribution des adresses d'évaluation où sont sau-
vegardées les dérivées partielles élémentaires.
4. *HTCNQN, s.p. de génération des définitions sémantiques.

5. 4C0DS0R, s.p. assurant la prise en compte des éléments strictement


calés à gauche, c'est-à-dire, calés à gauche et commençant par
1'axiome.
6. * TRPRO, s.p. de tri des éléments d'une cellule élémentaire par
ordre croissant du rang des variables, selon l'algorithme du
BUBBLE-SOHT (KIÏ] .
7. SCONSTANTE, s.p. assurant la concaténation d'une ramification décri-
vant une constante à une ramification de n racines.
8. $VARIABLE, s.p. assurant la concaténation d'une ramification décri-
vant une variable simple à une ramification de n racines.
9. SDERXVBE, s.p. assurant la concaténation d'une ramification associée
à une variable, dérivée par rapport à la variable indépendante, à
une ramification de n racines.
10. EADDUN, s.p. assurant l'enracinement d'une ramification dans le
cas des opérations unaires d'addition ou de soustraction.
11. SADDXT, s.p. assurant la concaténation puis l'enracinement de rami-
fications dans le cas des opérations binaires d'addition et de
soustraction.
12. SMULTX, s.p. assurant la concaténation puis l'enracinement de rami-
fications dans le cas de l'opération de multiplication.
13. SDÏVTSION, s.p. assurant la concaténation puis l'enracinement de
ramifications dans le cas de l'opération de division.
14. $EXP0NEN, s.p. assurant le traitement de l'opération d'exponentiation.
15. SINTERNE, s.p. assurant le traitement des fonctions mathématiques
derivables incorporées.
16. EEXTERNE, s.p. centralisant le traitement des fonctions externes
que l'utilisateur désire incorporer lors de l'exécution.
- 197 -

Nous avons donné figure UI-13 l'organisation générale du


programme NONDERI. L'organisation du sous-programme IADDIT est donnée
figure IU-14. Les organigrammes des sous-programme s SEXTEHNE et
£EXPONEN sont donnés figure III-I5.

HI.42. Génération de code sous forme de quadruplets ordonnés.

Le jacobien associé au système physique décrit par les équa--


tions mathémathiques présentées à l'entrée du compilateur NEPTUNIX est
stocké sous forme de "tableau creux", c'est-à-dire que seuls les élé-
ments non nuls de ce jacobien sont pris en compte.
La méthode de calcul du jacobien que nous avons présentée
précédemment exploite la réentrance des opérations arithmétiques ainsi
que celle des fonctions mathématiques usuelles. Elle utilise la tech-
nique d'implantation par plexes et la méthode mi-séquentielle d'organi-
sation des données ; l'ensemble est géré par une pile à entrée et sor-
tie par le sommet.
Ce plus la génération de code n'est effectuée que lorsqu'il
en est besoin. En effet, une classification des codes engendrés est
donnée de telle façon que :
1. les éléments constants du jacobien n'interviennent qu'une fois
lors de la phase d'exécution.
2. les éléments du jacobien qui dépendent de la variable indépen-
dante ne sont calculés qu'à chaque changement du pas d'intégra-
tion.
3. les éléments du jacobien qui sont fonction de certaines varia-
bles du système sont calculés lors de l'itération de Newton.
Nous désignorons ces éléments par termes non linéaires.

IH.421. Çlassifiçation_des_çodes_engendrés.
Les programmes NONDERI et CALDERI éclatent en opérations
élémentaires monadiques, diadiques et appel de fonction toute expres-
sion mathématique quelle qu'en soit la complexité.
L'opération élémentaire est sauvegardée dans un quadruplet
d'exécution qui à son tour est rangé dans une des dix tables de codes :
4 tables pour le calcul de la norme, 3 tables pour le calcul des fonc-
tions d'erreur associées, 3 tables pour le calcul du jacobien.
- 198 -

I NONftCRl I

l«iM«ltnWt«i :
. f M a l w u : N u n * * * ,XfV, fTMJM
.Vniiiiliilmlii : mum/to} x i m r i u f M ' ) ;

—< x.JS ^>


«tXTlKNC limwa |

I - I * » » • * H-

IMNtiHuul
T»f*« Muta»
I MH:HMtPmg|
i
| |»coimiU»«u) | < TT«»I> >— H |«<J««HWTH WftWt)"
XMM
I TWIKU i itau ^ TKfgit.»

WRIT»
FiLtC T i n m c ) < HM.t.11 > - j | I «I» «.»«<•>'» * T - f .
FftOH(Nmiiit)
KiyFMMtTWIttll)

I H | »i»»»<u'vn H ,
Tc*nMiu)iTewma»<i
vrtrwuMioii «VM>lt»U4m>Ht) I ij.

««, < « " » • • « • ' > S H | «WUI.T1

( Fût A » * . } .
NOHDtM
N
)

< " » • " >Trr-*TT»»ï«i»itm>»*)


-»| | W H I U M

I
H

< W»l i»? > - T T * l I » « » » « * « I

• ^ TTftrtt ~>=n-»Tl*lWTtr\Nfi |
T M »

FIG 1-13 CALCUL DU JACOB1EW

Organisation generate du programme NQNDERI


- 199

I Inlt;*ll>*tM« Catling :
11,11,1*.,MAX!,MAU.

<S=>

5>
,
f«n A»V *<f«naJ>

UfKiai.ihalM | » U |

G
I«W«lil«H«i> SIIMH'.
COMCMtHATim 3AMtt, KAN&t
)

ttMWI • * * • • * * *
^ < >5
ltAN4t4*AN«t?
< >

J»nUu<«UUiMlm.wJ>tl; JswUari •UWiwtm.iiiilWr


1 (JauWai <>»t*.) « f i n * » i tad** 4l«-«|»r. a «ptidWin tj*uU«i *"*•)*,
IMWMUM' 11.11 Xnnimwhr I R . X l
l.wfa—hr » , t l , I t

FIG 1-14 CALCUL DU JACOBIEN NONDERI

Organisation générale du sous-programme. SADDIT


( DiWfc4u.».|..^
SEXTWIM»

4
J

/ f i l » AU. I m ^ M f * ™ ^

r<ïEï ^
-<«.wi«wa? .> RE* W.0 t i l )
X3f s » t t l dI>PARrenc(M)

Ruts m a t » )
|»IWUW»<'U>T',0,O,»O
KtwdiiAstif 4
|*THfHO I M W . I U M , nil», •* » Mll.Mil
AILK SftUU
| BIHCMOMCMIW, B « , I t . T U W ra*cct»iti*)>PM»

| frlKCHOWQW',1H,«M,H1) 1

MX'ONIN )

—3__
•<»t«Tie? >-;

I |#incmwt'»mn',».»w,i»w,)
"VRAIJ'0'6"

I JOHiomtUNtt.t) I MfMtWMWi'J' I

—x—
I |»lN»UH(,' |TTa',30«.tOH,Jon|
l

C K n Au. ».(•.
»SX»0MiH
"\
)

PIGE-15 CALCUL DU JACOBIEN NONDERI

Organisation générale des sous-programmes

fEXTERNE et SEXP0NEN
- 201 -

Le quadruplet est défini comme suit

Code opération opérande 1 opérande 2


résultat

• h octets " -^—2 octets- -2 octets—>*-2- octets-

Par la suite, nous noterons ce quadruplet sous la forme sym-


bolique suivante :

(op, o p , o p , o p ) .
1 2 r

Huit classes fondamentales de quadruplets sont répertoriées.


Ce sont :

1. Affectation.

(=, o p , o p , o p ) .
1 2 r

L'opération ainsi codée représente ! o P = o p . avec op


r non
utilisé.

2. Addition.

( + , op , op , o p ) .
1 2 r

L'opération représente : op =op +op,.


L'opération unaire op =+.op- avec o p r 2 non utilisé, est sans
intérêt ; elle est éliminée lors de l'analyse et n'apparaît pas à
1'exécution.

3. Soustraction.

(-, op., , o p , o p ) .
2 r

L'opération représente : op =op.,-op .


r 2

Contrairement au cas de l'addition, l'opération op =-op


p 1

est significative. Elle est réalisée à l'aide d'un pseudo-quadruplet,


("> op ,, op ) , avec o p
1 2 non utilisé.
k. Multiplication.
(*, op,, o p , o P ) .
2 r

L'opération représente : op =op.*op .


r 2
5. Division.
(/. op , op , op )
1 2 r

_ L ' qpé'ration" représente : op =op /op„.


r 1

6. Exponentiation.
Bile porte sur deux opérandes dont le second est un entier,
pour un monâme, ou un nombre réel. Dans le second cas, il est impli­
citement fait appel à la fonction logarithme lors de l'exécution, ce
qui impose, par conséquent, que le premier opérande soit défini po­
sitif.

Nous noterons cette opération (t, op , op_, op ) .


Le quadruplet, ainsi représenté, effectue l'opération :
op =op top .
2 2 r

!
En fait, op- constitue le rang d'une fonction incorporée trai-
tant le cas de l'exponentiation ; op est l'expression arithmétique à
2

élever à la puissance op . De plus op„ contient au retour l'expression


à calculer, alors que op contient la dérivée partielle associée :
r

oPj.'op^oPg t( op -1 ). r

7. Ponctions mathématiques usuelles.


Ce sont les 17 fonctions suivantes qui, une fois l'analyse
terminée, ne sont connues que par leur rang : ._......
ATAN, ATAND, ATANH, •-- ---
COS, COSD, COSH, EHF, EXP, ~
LOG, LOGIO, SIN, SIND, SDtH, „ .- -
SQRT, TAN, TANH, TANH. ...
Le quadruplet est de la forme (op, op ,..op ,op ) avec : 2

- op, le rang du quadruplet. '


- op.. , le rang de la fonction mathématique,., 14 pour SQRT, par exemple.
- op„, l'expression mathématique sur laquelle porte la fonction de ]
rang op . 1 (
- op , l'expression dérivée partielle associée à la fonction.
r
>
Le quadruplet représente donc :

op 2 = fonction^ (op )
2

op_ = dérivée (op,).


- 203 -

8. Fonctions externes.
La syntaxe de l'appel des fonctions incorporables à l'exécu-
tion doit être de la forme :

Valeur=Nom-f onction (var.. , dér,. , ... , var^, dér.^, ..., var , dér )
avec :
- var. . le nom d'une variable-système,
- dér., la dérivée partielle de la fonction par rapport à la variable
var..
Trois types de quadruplets perau ttent une exécution correcte
de ces fonctions. Ce sont :
1. Un quadruplet de reconnaissance de la fonction et de choix de la
liste d'arguments appropriée.
2. Un quadruplet d'allocation des adresses de la variable émettrice
var. et de la variable réceptrice dér.. , pour i=1 à n.
3. Un quadruplet de sauvegarde du contexte de l'exécution, de branche-
ment à la fonction désirée et de rétablissement du contexte.

III.422. Subdivision des codes_en_sou3-classeg.


Dans un but d'efficacité et de rapidité lors de l'exécution,
chaque classe est subdivisée en un certain nombre de sous-classes. Nous
avons appelé l'élément code résultant, type.
Les codes d'exécution opèrent sur les tables suivantes :
- X, table des variables du système décrit par les équations d'entrée.
- D, table des dérivées associées aux variables,par rapport à la varia-
ble indépendante.
- F, table réceptrice des valeurs discrètes des normes associées aux
équations.
- G, table réceptrice des fonctions d'erreur associées aux équations.
- S, table groupant les valeurs ponctuelles du jacobien du système,
décrit sous forme de "tableau creux".
- C, table des constantes du système constituant le jeu de paramètres
numérique s.
De plus, deux tables T et J permettent de sauvegarder tempo-
rairement des opérations élémentaires nécessaires pour qu'à un instant
bien déterminé, on puisse revenir en arrière, sans avoir à tout recom-
mencer.
- 204 -

Le code opération est porteur de toutes les informations d'ap-


partenance à la classe et à la sous-classe, de telle sorte que spécifier
dans op , op« et op les rangs des opérandes» constitue une application
1

biunivoque permettant d'effectuer l'opération adéquate.

des codes d'exécution.


Les types élémentaires des codes que nous pouvons rencontrer
dans la description à l'exécution d'un problème général sont choisis
dans la liste des 61 types répertoriés figure XXJ-16. Le choix ainsi
que le classement sont effectués à partir de l'analyse des enregistre-
ments concernant chacune des équations et se trouvant sur 3 fichier
d'accès direct (TEMPREC). Ce travail est centralisé au niveau du pro-
gramme FBïTRTT.
Pour une simplification d'écriture, nous avons noté l'opéran-
de par le nom de la table numérique où il se trouve (Cf paragraphe
1X1.422). Le rang de l'opérande donne la position où il a été rangé.
Dans ces conditions, dans le "flot" des codes d'exécution relatifs à
un problème spécifique, le quadruplet de numéro 15 dans la table des
types élémentaires de codes groupés figure XH-16 est : j
- - •- i

+GTG.
Il représente l'opération
(+, G , T , G ) .
t 2 r

Cette opération symbolique se lit comme suit ;


l'opérande en position résultat de rang G dans la table G reçoit le
r

résultat de l'addition de l'opérande en position opérande 1 ayant pour


rang G dans la table G avec l'opérande en position opérande 2 ayant
1

pour rang T„ dans la table T.


De plus, dans le but de minimiser l'encombrement de la mé-
moire, on effectue un traitement de "condensation" des quadruplets par
l
appel au sous-programme ENCODER et selon le schéma suivant ;
- 205 -

1 -C T 21 -ses 41 =T F
2 =V T 22 -CCS 42 -- J S
3 -0 T 23 -SSS 43 = C J
4 -C S 24 -STS 44 =J S
5 -S S 25 -CTS 45' -- T T
6 =C G 26 -CCG 46 +GJG
7 + CTT 27 -CGG 47 +JJJ
8 + CTF 28 -DTT 48 -CJJ
9 + TTT 29 - GTG 49 -JTJ
10 + TTF 30 *TTT 50 - C J
11 SSS
+ 31 *TTF 51 - CFG
12 + SCS 32 *SCT 52 -JJJ
13 + STS 33 XSCS 53 XJVJ
14 + CCG 34 *SVT 54 XJTJ
15 + ST6 35 *TCT 55 *JJJ
16 -CTT 36 /TTT 56 /JTJ
17 -CTF 37 /TTF 57 BR EX
18 -TTT 38 /SCT 58 BRFI
— 19 -TTF 39 /ses 59 DATJ
20 -CSS 40 /TCT 60 BRUF
61 LIST

FIG1-16 TYPES ELEMENTAIRES DE CODES


- 206 -

Quadruplet d'origine :

rang rang rang


Code opération opérande 1 opérande 2 opérande
de sortie

« k octets x 2 octets—K—2 octetsH*—2 octets—>

Quadruplet coda Î

rang opérande
Code opération rang opérande 1 rang opérande 2 de sortie

•* 7 bits ** 11 bits X 11 bits M 11 bits >

Nous remarquons donc que le code opération occupe 7 bits alors que
11 positions binaires sont nécessaires pour coder les rangs. De ce
fait, la taille admise pour les différentes tables décrites paragra-
phe 1X1.422 ne doit en aucun cas dépasser 2 -1 • 2047 positions dans
la mémoire.

XH.43. Nécessité de résoudre leô adresses des fonctions externes


pour l'étape d'ordonnancement-traduction-précompilation :
appel dynamique de l'assembleur.

Afin de permettre une exécution correcte des quadruplets en-


gendrés par le compilateur NEPTUNXX, il est nécessaire de connaître les
adresses en mémoire des fonctions mathématiques incorporées d'une part,
celles des fonctions externes que l'utilisateur incorpore au système
NEPTUNXX d'autre part.
A cet effet, le compilateur NEPTONIX crée le sous-programme
SBZBLIO, écrit en assembleur AL360, sur le ficllier ASSEMBL organisé en
mode par flots (FILE STPEAM). Cette génération est centralisée au ni-
veau du programme ASMRBCD. Nous avons donné figure XXX-17 le squelette
du sous-programme 3BZBLI0. Nous reviendrons plus en détail sur son
rûle au chapitre XV.
Il est à remarquer (Cf figure IH-17) que les fonctions pré-
fixées par le symbole 'S' sont des fonctions propres au système NEPTONIX.
Elles correspondent aux fonctions mathématiques usuelles dont la liste
IOC 09JECT CODE «DOM A O M t STUT SOURCE STATtHtNT

•0000» 1 «919110 CSEC?


t MV( 114.41.T.IOtOLId
900000 47F0 FO0C •ooac 14 • liio.m W U K H u o u n io
0000» 07 oc A L U 71 I E W T H OF IDENTIFIED
00900S 5BC2CKID3C90t «•
SI oc CL7-ISI91IO' lOEHIIFIER
ooaooc «of* oooc ooooc JTH 14,4.11(111 SAVE 9ESISTEIU
oooooo «•
7 U1IHO 0UOLIO.1S
000010 « 1 » F04t 00044 U t.SAVE
000014 S000 F 9 4 S C004S *
0 ST 1J.HVE.4
ooooio soco O O M ooco» 19 ST 2.9(111
0DD01C 1902 11 U 11.t
OOOOIE son oooo 00009 12 I J.0(11
ooooit «an oooo 00009 11 III 3.0(11
0000» 0930 COO! 00002 It Sll 3,2
00302A 50» F09C oooec IS I t,F«KI3l
0CO02E SOU 0004 00004 It I 2.4(1)
030032 S042 0000 00009 17 ST 4.0(21
000030 59DD OOCt 90000 M L 11.4(111
M •ETUIH 114.41.T
OCOOSA 94E4 OOOC •oooc 294 Ul 14,4.121131 PESTCOE THE REGISTERS
00003E « F F DOOC 0O0OC 21* HVI 12I11).X'FF* SET I I I W H IIOICATIOH
000042 07FE 2:< OR 14 HE1UIII
000044 23 CHOP 0,4
000044 24 SAVE DS 19F
00O0OC 00000009 2S F H K OC VI9EXHI
OCOOOO 0000000000000000 29 OC VI0ATA!l,tATAND.0ATAtM,ICOS.ICaSD,ICOSHI
O000AO OOOOOOOOOOOOOOCO 27 oc VIIERF.IIXP.IUa.910010.19IH.I3IH1I
00OOCO 0090000000000000 29 OC VltSIIM.IiUr.tTAH.tTAIO.irAIH.FOIKI
000309 00000000 2» DC VI PISTE 1
0O3000 19 CIO •oniia

FIG m-n MODELE DE SOUS-PROGRAMME SBIBUO


- 208 -

a été donnée paragraphe XXX.^21. A l'étape d'ordonnancement-traduction-


précompilation, elles constituent des fonctions incorporées au module
chargeable se trouvant sur le fichier partionné SES.SERF.NAKHLE.MODULES
de nom ORDOPREC. De plus nous avons désigné par fonction-i, pour i
allant de 1 a n , les fonctions externes que l'utilisateur désire incor-
porer à l'étape d'édition de liens préalable à toute recherche des pi-
vota de la matrice jacobienne associée au système décrit.
L'appel dynamique de l'assembleur effectue l'assemblage du
sous-programme ainsi engendré, en utilisant l'option DECK pour obte-
nir le programme-objet sur cartes lorsque l'option OBJET du compila-
teur NEPTUNIX est utilisée. Dans le cas contraire, c'est l'option
NODECK qui est prise par défaut. Le résultat de l'assemblage se trouve
sur le fichier MICPICEX. La création du contexte de l'assembleur et son
appel, par utilisation de la macro LINK, sont centralisés au niveau du
sous-programme LOADASM. La liste du sous-programme LOADÀSM est donnée
figure 111-18.
- 209 -

SOUS-PROGRAMME D'APPEL DYNAMIQUE DE L'ASSEMBLEUR.


SI INODECK*! « DEHANOE DE DECK.
SI IWDECICO « PAS DE DEMANDE DE OECX.
• SAUVEGARDES D'USAGE.
SAVE Cl4»12)tTiL0A0A3H
BALR RBASE.O
USING »,RBAJE
CHAINAGES DES SAVE-AP.EA3.
» IS RSAVEiRSUPE
LA RSUPE.SAVEAREA
ST RSUPE.S(RSAVE)
ST R5AVEi4IR5UPE)
TEST SUR INDICATEUR " I N O D E C K " .
» L RCINQ.xvflNODECK)
LH RCXMQ*OIRCINQ> OEM! -MOT.
LTR RCIHQ,RC1NQ POSITIONNER LE CODE CONDITION
BE SAHSOECK
AVECDECK LINK EP=IEUA3M,MRAH=IU3TAVEC.LI3T0EV>,VL=1
B RETOUR
SAHSOCCX LINK EP'IEUASH.PARAHMLISTSANS.LISTDEVI.VLsl
M RESTAURATIONS 0'USAGE.
RETOUR L R5UPE»4(R3UPE)
RETURN < 1 4 . 1 2 I , T . R C
CHOP 2 . 4
PARANETRES DE L'A33EM6LAGE:3ANS-0ECK.
*
U5T3AN3 DC X'OOOB'
DC CLll'LOAD.HDDECX'
CHOP E i 4
m PARANETRES DE I'ASSEHSUGEiDECK.
LZSTAVEC DC X'0009'
DC CL9'LOA0.0ECK'
CHOP 2 , 4
NOMS DES FICHIERS A UTILISER.
*
USTDEV DC H'W
DC XLB'O'
DC XLS'O'
DC XLS'O'
OC XLS'O'
DC CU'ASSErBl '
FILPRIHT DC CLS'SORTIE '
FZLPUNCH DC XLS'O'
risvsun OC CLS'MICIHTRI'
FI3Y5UT2 DC CL8'H1CINTR2'
FXSYSUTS OC CLS'MICTNTRS'
FZ3YSG0 OC CLS'MICFICEX'
DC XLB'O'
CHOP 0 , 4
m OICTIONMAIRE LKAL DU S.P. "LOADASN".
3AVEAREA OS 1SF
RARO EQU 1
R9AVE EQU 1
RCXW EOU 5
RBA3E ECU 11
R5UPE EQU 13
RAPPL EOU 15
END L0A0A3H

FIGIH-18 Sous-programme LOAD ASM

de l'Assembleur
- 211

ipitre IV : ETAPE D'ORDONNANCEMENT-TRADUCTION-PRECOMPILATION.

1. ORGANISATION GENERALE.

2. CHEATION DE L'ENVIRONNEMENT PL/1 .


21. Exposé du problème.
22. Abréviations utilisées.
23. Affectation des registres par le compilateur FL/1.
24. Les procédures créées par le compilateur PL/1.
25. Environnement du PL/1.
26. Comment établir l'environnement du PL/1 ?

3. ORDONNANCEMENT D E LA MATRICE JACOBIENNE PAR EXECUTION DES


QUADRUPLETS SOUS ENVIRONNEMENT PL/1 .
31. Implantation de la matrice.
32. Exécution des quadruplets produits par le compilateur NEPTUNIX.

4. TRADUCTION DES QUADRUPLETS EN LANGAGE PL/1 .


41. Introduction.
42. Représentation du programme intermédiaire.
.43. Optimisation de code liée à la machine du traitement.
44. Exposé de la méthode adoptée.
45. Programmes réalisant la génération de code en PL/1.

• 5. APPEL DYNAMIQUE DU COMPILATEUR PL/1 .


- 213 -

IV.1. ORGANISATION GENERALE.

Nous nous intéressons à présent au problème du passage en


machine des trois programmes suivants (le schéma simplifié pour un
programme a été donné figure 1-1) : ordonnancement d'une matrice ja-
cobienne, traduction d'un code engendré en langage PL/1 et compila-
tion du programme résultant par le compilateur PL/1. La figure IV-1
illustre le schéma simplifié exposé figure 1-1. On y a représenté
les différentes phases par lesquelles il faut passer entre l'écriture
des fonctions externes, déclarées lors de l'étape de compilation
NEPTUNIX (et au besoin, d'une procédure externe APLUTIL permettant de
communiquer avec le système NEPTUNIX par un langage procédural) et
inexécution proprement dite. Essentiellement ces phases sont au nombre
de quatre :

1. Ecriture et préparation des programmes.

2. Compilation ou traduction de ces programmes en langage machina.


3. Edition de liens : le résultat en est un module chargeable obtenu
en concaténant les programmes de l'utilisateur, traduits en langage
machine, avec éventuellement d'autres programmes et la bibliothèque
résidente du système NEPTUNIX. De plus le module chargeable ainsi
obtenu, contiendra toutes les adresses résolues nécessaires à une
exécution correcte. Remarquons que nous avions déjà décrit cette
phase au paragraphe 1.412.
4. Exécution du modèle chargeable obtenu.

Intéressons-nous au module chargeable. La liste des program-


mes résidents et la structure du recouvrement adopté ont été donnés
figure 1-14. Essentiellement, le processus d'exécution est le suivant :
1. Le sous-programme MNYMAIN reçoit le contrôle du système d'ex-
ploitation et appelle la procédure principale MOTTNCN par le biais du
point d'entrée PLISTART. L'organigramme est donné figure IV-2.
- 214 -

SOURCE APLUTIL

ECRITURE
- J — ^ et/ou fonctions externes

COMPILATEUR
COMPILATION PL/t ou FORTRAN

±
PROGRAMME OBJET

EDITION DE LIENS

S.stim, NEPTUNIX Autres programmes-


+ objet :SBIBUO, etc.
Bibliothèque PL/1

MODULE CHARGEABLE

EXECUTION

MNYMAIN*PLISTAR\ ROUTINES D'MTIALISATfON ZODE DE DEBUT


MNYMAIN reçoit le allouer l'espace Initial et Acquisition de la
contrôle du systè- initialiser le processus de DSApourMOTTNCS
me d'exploitation et traitement en cas d'erreur. Initialisation des
ippelle PLISTART Appel de la procédure prin- blocs de contrô-
pour créer la TCA, cipale MOTTNCN. le.

CODE FONCTIONNEL CODE FINAL ROUTINES DE FIN


Wdonnancemen t de la ma-
trice par exécution des Restauration du Fermeture des fi-
quadruplets. Traduction contexte. chiers encore ouverts.
en langage PUHOEXBOJp Retour au système
Appti dynamique du d'exploitation avec indi.
compilateur PL/1. cateur d'état.

F1GIY-1 Schéma simplifié du passage d'un problème


- 215 -

MOTTNCN -.PROClPARAtlETRES)
. OPTIOtM(MAIN);
o u . PMunrrnu CHAR«4M> vnmiH*;

i "
| fCIHT»UK»A»Mt(PIMt»n»TM») |

iw«H*L.'cf»~|»!<:suatn>wrô,M)i«'c? >
1 ?»
3C
! — ^ f»«l»wi«M,«) »'W T 2>zA eon»»" » '»'»
ï ,
WORW»L » 7â"fe-<yiMT»lw»rô,< »>-i» r !>•
l

1 À *£.

wwwlt'o »1
£ — < ^ »y»«IB(M«M,l)j'l»' T

[*T<*w»tmnnic»,4,4)-«'»'^.
> — | T M I W «'0' »

I i r ,
IM»»*tll»0~~T*lSrC»''t«tB»«>t't.'|4)» W'? > | MORWKUt'Q'»

IGIY-2 Moniteur de l'étape .-programme MOTTNCN


- 216 -

2, Les 'routines' d'initialisation du PL/1 sont appelées à ce sta-


de afin de créer la zone commune à toutes les tâches (task communica-
tions area ou TCA [l12j), d'allouer l'espace initial nécessaire (initial
storage area ou ISA) et d'initialiser le processus de traitement en
cas d'erreur. Ensuite le traitement est donné au moniteur de l'étape
MOTTNCN.
3* Le code du point apparent ou le code de début de la procédure
MOTTWCN est exécuté. Il correspond à l'acquisition de la zone de sauve-
garde (dynamic storage area ou DSA) et à l'initialisation des blocs de
contrôle nécessaires. Nous avons représenté figure IV-3 l'organisation
et le contenu de la zone de sauvegarde.
k. Le code à partir du point d'entrée réel ou le code fonctionnel
r
de la procédure MOTTNCN est exécuté. Il correspond à 1 organigramme
décrit par la figure IV-2. Les paramètres du passage sont analysés et
pris en compte. L'ordonnancement de la matrice jacobienne est alors
effectué sous le contrôle du centralisateur (MNYORDN) de la phase de
recherche des vecteurs permutation satisfaisant l'algorithme de Gauss.
Si ce choix est satisfaisant, c'est-à-dire si la matrice n'est pas
singulière et si l'utilisateur le demande, une traduction des quadru-
plets en langage PL/1 est effectuée. Le centralisateur de la phase de
traduction (CENTRAD) est charge de gérer la tâche de traduction. Une
fois la traduction terminée, le programme engendré est compilé par
appel dynamique du compilateur PL/1, appel effectué par le sous-pro-
gramme LOADPLI écrit en AL360.
5. Le code de fin correspondant à "l'épilogue" de la procédure
MOTTNCN est ensuite exécuté. Il correspond au rétablissement des regis-
tres du programme résident IBMBPIR ayant établi l'environnement du PL/1.
6. Les routlues de fin sont enfin chargées de fermer les fichiers
encore ouverts et d'effectuer tous les traitements de fin de la tâche
avant de donner le contrôle au système d'exploitation.
217 -

Zone de sauvegarde du contenu des


registres généraux •

Entités de longueur < 9 octets


alignées selon (})• Positions-mémoire pour
les variables automatiques
Entitfs de longueur •* 2MB octets déclarées ou activées
aligntes selon (!)• dans le bloc courant,les
blocs de contrôle "ONCB"
Entités de langueur > 2046 octets nécessaires pour les
alignée* selon {!)• traitements des cas d'erreur,
etc.
Adressa des paramètres a passer
aux procédures appelées par
la procédure activée.

Sauvegarde LOCALE du contenu


des registres utilisés
pour exécuter le code
fonctionnel.
Zones de sauvegarde
Sauvegarde LOCALE des résultats
intermédiaires de temporaire, etc.
l'exécution des instructions du
code fonctionnel.

Sauvegarde GLOBALE des résultats


Intermédùires relatifs à
l'exécution du dernier bloc activé .
d'instructions de code
fonctionnel.

(11 L'ordre d'alignement est le suivant :


- double-motsdongueur unitaire S octets)- -
- motsdongueur unitaire 4octets)
- demi-motstlongueur, unitaire 2 octets)
- caractères (longueur unitaire 1 octet )_
- bits!longueur unitaire 1 bit)

FlGIV-3 Contenu de la zone de sauvegarde PS A ou

PYNAMIC STORAGE AREA


- 218 -

rV.2. CREATION DE L'ENVIRONNEMENT DU PL/1 .

IV. 21. Exposé du problème.

Le problème que nous posons est celui de pouvoir appeler d'un


sous-programme écrit en assembleur AL36*0, un programme écrit en PL/1 .
Le sous-programme est celui réalisant l'interface entre le système
NEPTUNIX et les fonctions incorporées et par extension celles de l'uti-
lisateur. Ces fonctions sont connues par leurs adresses résolues lors
de l'édition de liens (rôle du sous-programme $BIBLIO engendré automati-
quement par le compilateur NEPTUNIX).
XI eat essentiel, dans ces conditions, de connaître les con-
ventions utilisées par le compilateur PL/1, lors de la génération du
programme-objet correspondant à une procédure écrite en PL/1.
Après le passage en revue des abréviations utilisées, nous
aborderons l'affectation des registres dans le code Qngendré et le rôle
de certaines procédures créées automatiquement par le compilateur. Nous
définirons ensuite la notion d'environnement du PL/1, son utilité et
le moyen d'établir cet environnement.
Remarque
Dans la suite de l'exposé nous réservons le nom de sous-
programme (en abrégé s.p.) à un programme écrit en AL3Ô0, FORTRAN ou
COBOL et le nom de procédure à un programme écrit en PL/1.

IV.22. Abréviations utilisées.

Par souci d'homogénéité avec les abréviations utilisées en


[1I2J , nous utilisons les abréviations suivantes dont nous donnons une
description approchée :
AD (array descriptor) : descripteur du type d'un tableau.
AL (aggregate locator) : descripteur d'implantation d'un tableau.
AO (actual origin) ,: origine réelle.
DSA (dynamic storage area) : zone dynamique de sauvegarde.
ISA (initial storage area) : espace initial nécessaire.
LWS (library workspace) : zone de travail constituée de deux DSA et
utilisée par certains programmes de la bibliothèque. Son adresse
se trouve en mémoire à la position d'adresse relative 72 octets à
partir du début de la DSA de la procédure PL/1 activée.
- 219 -

ONCA (on communication area) : zone de communication dans laquelle


las valeurs de retour et les adresses des fonctions incorporées
sont sauvegardées lors d'une interruption.
ONCB (on control block) : zone contenant les informations décrivant
la (ou les) action(s) à entreprendre en cas d'interruption.
OS (operating system) : système d'exploitation. " "'
PSECT (program control section) : section de contrôle du programme.
Elle contient les instructions exécutables traduites par, le corn-..
pilateur PL/1. Le format de chaque PSECT dépend typiquement du
programme source. Le point commun à toutes les sections d'ins-
tructions est défini par l'attribution du râle des registres.
RL (resident library) : partie résidente de la bibliothèque.
RVO (relative virtual origin) : déplacement entre le premier élément
implanté et la cellule de la mémoire devant contenir l'élément
correspondant aux indices tous nuls.
SA (save area) : zone de sauvegarde des registres d'un sous-program-
me écrit en assembleur AL360, en FORTRAN ou en COBOL.
SCSECT (static internal control section) : section de contrôle groupant
la majorité des données qui ne constituent pas des instructions
exécutables. Bile est essentiellement composée de trois parties :
1) La première partie contient les adresses des modules de la
bibliothèque, des points d'entrée de la procédure, des éti-
quettes pouvant être affectées à des variables de type éti-
quette et des procédures externes.
Z) La deuxième partie est connue sous le nom de "constants pool".
Elle contient, au cas où le programme U exige,- lea constantes—
utilisées par le compilateur, les ONCB, les AD et les AL.
3) La troisième partie contient les variables statiques rangées
selon l'ordre de leur longueur :
a) longueur unitaire $ 8
b) longueur unitaire ^ 2048
c) longueur unitaire > 2048
TCA (task communication area) : zone contenant les adresses des 'rou-
tines* essentielles, des blocs de contrôle et un certain nombre
d'informations nécessaires au déroulement normal d'un programme.
VO (virtual origin) : origine virtuelle pour un tableau.
- 220 -

XV.23. Affectation des registres par le compilateur PL/1.

Nous avons groupé dans le tableau IV-4 le rôle particulier de


chacun dea registres généraux et quelques remarques sur les utilisations
que nous avons appelées préférentielles.

Nuaéro
du Rôle et réservation Renarques
registre

a Reglvtre de travail général Ne peut pas être utilisé C O B B M


registre de base
i Registrs da travail + registre pointant
sur la lista des arguaenta à transmettra
ou à recevoir
2 Registre da basa da la procédure (PCSECT) Sauvegardé lors de l'utilisation
des entrées/sorties en mode RECOUD
et lors de l'utilisation des
instructions THT.
3 Registre de base pour la partie statique
de la procédure (SCSZCT)
4 Registre réservé* Utilisé si la taille de la DSA est
supérieure a 4000 octets
5 Registre général + chaînage statique Registre préféré pour les variables
arrière à l'entrée de la proaédure de contrôle des boucles
6 k 9 Registre* généraux
10 à 11 Registres généraux Utilisés ds préférence pour lee
variables de contrôle des boucles
lorsque l'instruction BXLE est
utilisée
12 Registre contenant l'adressa da la TCA
Registre contenant l'adresse de la OSA
13 courante
14 et 15 Registres généraux + branchemnt et
liaison à d'autres procédures ou à des
progressas de la bibliothèque.

TABLEAU IV-4.

rV.2k. Les procédures créées par le compilateur PL/l.

Le compilateur PL/l crée des procédures afin d'entreprendre


certaines actions spécifiques. Ces procédures constituent des sections
de contrôle indépendantes de PCSECT et SCSECT. Elles ont l'avantage
sur les modules de la bibliothèque d'être engendrées "sur mesure" afin
de traiter les cas communs. Lorsqu'un traitement spécial est nécessaire,
il est effectué par appel aux modules de la bibliothèque. Comme ces pro-
cédures sont automatiquement incorporées dans le code fonctionnel du
- 221 -

programme compile, elles ne respectent pas nécessairement les conven-


tions standard d'appel des programmes imposées par l'OS.
Nous donnons ci-dessous la liste de ces procédures et leur
rSle respectif.
- E3LCGIA : donne l'adresse des données du texte source et du format
associé à utiliser lorsqu'une entrée/sortie du type EDIT
est utilisée en entrée.
- XELCGIB : mise à Jour des adresses à la fin d'une lecture avec l'or-
dre EDIT utilisé en entrée.
- IELCGOA : mise à jour de l'adresse de la prochaine donnée et du for-
mat associé lorsqu'une entrée/sortie du type EDIT est uti-
lisée en sortie.
- IELCGOB : mise à jour du bloc de contrôle du fichier (FCB O U file
control block), comptage du nombre de données et libération
des zones associées aux données variables (VDA ou variable
data area) après leur utilisation, pour une entrée/sortie
en mode par flots, le fichier étant ouvert en sortie.
I - IELCGGC : traitement du format X pour une entrée/sortie en mode par
flots.
- IELCGMV : déplacement d'une chaîne d'une certaine longueur.
- IELCGCL : comparaison de deux chaînes d'une certains longueur.
- IELCGCB : comparaison de deux chaînes de bits.
- IELCGON : chaînage des ONCB.
- XELCGRV : chaînages des zones associées aux données variables (VBA).
- IELCGBB : test d'un bit à M«B.
- IELCGBO : test d'un bit à 'O'B.

IV, 25. Environnement du PL/1 .

On désigne par ENVIRONNEMENT du PL/1 , un certain nombre de


blocs de contrôle créés par l'OS ou par la partie résidente de la bi-
bliothèque ou RL (spécialement par le module IBMBPIR). Ces blocs sont
établis pour gérer l'encombrement de la mémoire ainsi que pour prendre
les dispositions nécessaires en cas d'erreur ou de fin anormale de
l'exécution d'une procédure.
- 222 -

Cet environnement est essentiellement constitué par :


1. L'espace initial nécessaire pour l'allocation dynamique demandée par
le PL/1, appelé ISA.
2. La zone donnant l'adresse de départ pour une éventuelle allocation
dynamique et agissant comme une SA pour le contenu des registres
lors de l'appel d'un programme. Cette zone est appelée DSA.
3- La zone mémoire centralisant les informations nécessaires pour l'exé-
cution d'une procédure et appelée TCA.
4. Une zone permettant éventuellement l'appel du module de traitement
en cas d'erreur (XBMBERR).
5. Les DSA pour les LWS.
6. Les blocs nécessaires à l'utilisation des ONCA ou des fonctions in-
ternes telles que ONSOTJECE, ONCHAR, etc..
De plus en regardant le tableau d'affectation des registres
généraux par le compilateur PL/l , les conventions suivantes d'emploi
des registres doivent Ôtre observées :
1. Le registre 1 doit servir à la transmission des listes d'argu-
ments .
2. Le registre 5 doit être mis à zéro lors de l'appel d'une procé-
dure externe, principalement dans le cas de programmes recursifs.
3. Le registre 12 doit contenir l'adresse de la TCA.
k. Le registre 13 doit contenir l'adresse de la DSA du programme
actif.

5. Tout branchement à un sous-programme ou à une procédure doit


se faire par l'intermédiaire des registres tk et 15 qui contiennent
respectivement l'adresse de retour dans le programme appelant et
l'adresse du programme appelé.

IV.26. Comment établir l'environnement du PL/l ?

XI est possible d'utiliser un des trois points d'entrée stan-


dard de la section de contrôle FLXMAXN afin d'établir l'environnement
du PL/1. Ces trois points d'entrée sont :
- 223 -

1 - PLISTART
2 - PLICALLÀ
3 - PLICALLB
Xls diffèrent par les arguments à transmettre.
Lorsqu'un s.p. appelle le PL/1 par l'intermédiaire de l'un
de c-is trois points d'entrée, ce sont les 'routines' d'initialisation
qui sont appelées afin d'établir l'environnement du PL/1. Le contrôle
est ensuite passé à la procédure dont l'adresse se trouve dans la
section de contrôle PLIMADI. Si la procédure appelée est la procédure
principale, automatiquement son adresse se trouve dans PLIMAXN. Dans
le cas contraire, c'est-à-dire quand la procédure appelée n'est pas
la procédure principale, il est nécessaire de mettre au préalable le
nom de cette' procédure dans PLIMA33T. Nous avons donné figure IV-5a
la façon d'opérer.
Le s.p. doit être capable d'appeler des procédures plusieurs
fois. La création de l'environnement du PL/1 à chaque fois n'est pas
la bonne solution. La solution est de créer l'environnement une fois
pour toutes. Ce dernier doit ôtre sauvegardé à chaque appel. Un moyen
est de faire en sorte que le s.p. constitue un programme principal.
Le squelette du s.p. est donné dans ces conditions figure XV-5b. Le
code dans cette figure permet au s.p. d'appeler le PL/1 sans beaucoup
de pertes de temps et avec peu d'instructions.
Une variante de ce code est donnée figure IV-6.
Dans la figure IV-6, le sous-programme MNYMAIN reçoit le con-
trôle du superviseur. Il appelle ensuite la procédure principale
MOTTMCN par utilisation du point d'entrée PLISTART se trouvant dans la
section de contrôle PLIXAIN. Le contrôle est alors donné aux 'routines'
d'initialisation afin d'établir l'environnement du PL/1. Le code de
début et le ~codë fonctionner de MOTTNCN "sont "ensuite exécutés. Une
procédure, CALFONC, que nous décrirons plus loin est capable d'appeler
le s.p. par le second point d'entrée ASMXBQ3.
Remarquons que dans l'exemple de la figure IV-6a» le nom
A5MXEQ3 est de longueur impairs de telle sorte que l'instruction sui-
vante est alignée sur une frontière de demi-mot. Examinons dans le
détail le code correspondant aux instructions de la figure IV-6b.
- Le code correspondant à l'étiquette PROLOGUE correspond à une
sauvegarde des registres de la procédure PL/1 appelante.
- 224 -

LA 1,USTARG
L 2JHPUMAIN)
L 3,'V(M0NPROG)
ST 3fi(2)
L 15.WPLICALLA) se branch* à l'adresse se trouvant dans PL1MAIN
BALR «,75 afin d'établir l'environnement du PL/1
• ••
USTARG DC Alargl) premier argument passé a MONPROG
DC W
DC AL3targ2) dernier argument passé à MQNPROG

F1G iy-5a Introduction de l'adresse d'une procedure dans la section


de contrôle PUMAIN et branchement a cette procédure -MONPROG-

ASSEMBL START
DC C'ASSEMBL',AU(7)
PTENTREE ECU * point d'entrée
STM 14,12,12(13)
BALR 11,0
USING »,I1
LA 2/SAVEAREA zone de sauvegarde du sp.
ST 2,6(13) chaînage
ST 13,42) chaînage
MVC 72to,2),72()3) recopie d'Informations pour le PL/1
LR 13,2 mise à jour du registre 13
»
tcode fonctionnel.Le registre 12 doit contenir en permanence l'adresse de début de la TCA.
•APPEL DELA PROCEDURE. PL/1-
L 15,*V(PUPR0C)
BALR 14,15
•RESTITUTION DE L'ENVIRONNEMENT DU PL/1.
L' 13,4(13)
LM I4J2.W3)
LR 0,13
BR 14
SAVEAREA OC X'90000000 ,19F'0'
ENTRY PUMAIN
PUMAIN DC AiPTENTREE)
END

FlGiy-5b Squelette d'un sous-programme assembleur

appelant une procédure PL/1


- 225 -

START
ENTRY ASHXEQ3
SAVE U4.12),T,HNYHAIN SAUVEGASOER LE CONTEXTE
A0RESSA6ILITE ET CHAINAGES DES 3AVE AREAS
BALR 10.D 10 OYNAH. REG. BASE
USING MO OCL 1 0 REG BASE
4.SAVEMAIN AOOR SAVE AREA HNVflAIN
13.4(41 CHAINAGE ARRIERE
4.SC13] CHAINAGE AVANT
13,4 SA ACTUELLE
15,=VtPLISTAHTl ADRESSE DE "HOTTMCH",
PROCIPARAMETRES) O P T I Û N S C H A I N I :
BALR 14.15 BRANCHEMENT ET L I A I S O N
RESTAURER LE REGISTRE 1 3
L 13*4(13)
RECUPERER L'ADRESSE OE RETCUR
14,12(13)
HESTMJREH LE CONTEXTE ET
RETURN ( 1 . I 2 I . T REDONNER LA HAIN AU SUPERVISEUR

LTORG
SAVEHAIH OS 1SF
OC C'A3tttEQ3' NOH OU POINT 0*ENTRES
OC AU(7)
LSMXERS OS CH
!»•«*»»» Wtl»»ttW»l>«IHHHt »»«»•»»»«»»« « PHHH ;»Mr-WWtHi-»«HIM»«HIMI»»MMMMM«

EXECUTEUR OES CODES H.L. TYPE FONCTION —


It E5T APPELE PAR "CALFDNC".

1 - TYPE OE L'OPERATION BIN F1XÉD(31.Û)


2 - PARAMETRE 1 BIN FIXE0(31.0>
3 - PARAMETRE 2 BIN FIXEOC31.0)
4 - PARAMETRE 3 BIN FIXEDI31.0)
5 - A0RE55E DE " T r O ) " 4 OCTETS
6 - ADRESSE DE " J 1 0 > " 4 OCTETS
7 - ADRESSE DE "XI0)" 4 OCTETS

"•waLio"
QUI EST EN ASSEMBLEUR ET DONT LE ROLE EST DE RESOUDRE
LES ADRESSES DE5 FONCTIONS NON LINEAIRES A L'EXECUTION
LISTE D'ARGUMENTS DRESSEE
1- RANG OE LA FONCTION INCONNUE
ENTIER 1/2 HOT
Z- ADRESSE OU RECUPERER L'ADRESSE DE LA FONCTION
MOT OE 4 OCTETS

CA557 OPERATION D'EXPONENTIATION


CAS5S FONCTIONS MATHEMATIQUES COUPANTES
CAS59 DRESSER LI5TE O'ASGUHEHTS POUR FONC. UTILISATEUR
CASàO APPEL FONCTION UTILISATEUR
CASAI PREPARATION A APPELER FONCTION UTILISATEUR

,
|l»HHt»WIHI»»»#» tf»HHIt*»li^tHt » • * " * « • * « « »^«••*»«»**•l•»•*»*»»"»•*«» • * • • » » * •

F1G IV-6a Création et sauveqardeU'environnement PL/1)

Sous-programmes MNYMAIN et ASMXEQ.3


- 226 -

PROLOGUE SAVE U4,12),T,PROLOGUE


USING ASMXEQ3.XR1S DECLARATION REG. I S
LA Xfl0.10<* LONGUEUR DSA NECESSAIRE
L XHJ,76tXR13) DEBUT A0RES5E DISPONIBLE
AIR XROiXRl F I N ADRESSE APRES DEMANDE
CL XR0il£(XR12> ESPACE DEHANOE DISPONIBLE?
BNH *+io I L YA SUFFISAMMENT OE P U C E
L XR15,116(XP1Z1 ROUTINE D'OVERFLOW POUR . . .
BALR XR14,XRI5 DEMANDE DE NOUVELLE ZONE

instruct ions
L X914.7ZIXRI3) ADR. LIBRARY UORK SPACE P L / I
LR XRI5.XRQ
3TÏ1 XH14,XR0,73(XR1) COPIE ( L U S t . I D E B . I
ST XR13.4(XR1) CHAINAGE ARRIERE DSA
de mise à Lfl XR13.XR1 MISE A JOUR DE " 1 3 "
ST XRS.38(XR13> CAS D'UNE PROCEDURE EXTERNE
jour de la HVI ÛfXBlSI.X'flO' F U G PROCEDURE
HVI
HVI
îtxRisi.x'ei'
2[Xfll3),X*33'
F U G PROCEDURE
REPERER ASHXE03
DSA HVI
HVI
«4<XR13)tX'91*
95<XP13>,X'E0*
F U G ERREUR FOUR ERROR-
. . . HANDLER OU P L / I
EXTENSION 4 U F L i G D'ERREUR
BALR
Mir.nm.Mimui
XB8A5E.XR0 CHARGEMENT DYNAMIQUE
DROP XR15 CHANGEMENT DU REGISTRE D E . . .
USXHG «.XHBA3E BASE OU S . P .
*
» OHCTICKNEL

M RESTAURATION OU CONTEXTS ET RETOUR


EPILOGUE L XRU.4<XR13)
RETURN U 4 . 1 2 U T
»
*
XRO
. . D E F I N I T I O N OES REGISTRES ET OES CONTANTES
EOU 0
XR1 EQU 1
XR5 EOU 5
XR12 EQU 12
XR13 EQU 13
XR15 EQU 15
XHM EQU 14
R5 EQU 5
XR8ASE EQU 11
XRET EQU 14
XAPPEL EQU 15

FIGIY-6b Création et sauvegarde dé ['environnement PL/1

Sous-programmes MNYMAIN et ASMXEQ3


- 227 -

- Une nouvelle DSA de longueur 104 octets est demandée. La façon


d'allouer cette DSA peut ôtre la môme, lorsqu'il s'agit de s.p. réen-
trants ou récursifs. Si la place demandée n'est pas disponible, un appel
1
à la 'routine de gestion des débordements (dont l'adresse se trouve en
mémoire à la position 116 à partir de l'adresse de tôte de la TCA) est
effectué. Le but est d'effectuer une tentative d'allocation pour la DSA
ailleurs en mémoire, en place et lieu de zones pouvant être libérées.

- Les instructions entourées traitent de la mise à jour de la DSA


de telle sorte que l'environnement soit correct lorsque, dans le code
fonctionnel, les procédures externes, dont les adresses sont connues
par branchement au s.p. SBIBLIO, sont appelées. Ces instructions doi-
vent toujours ôtre présentes afin de sauvegarder l'environnement du
PL/1 établi par appel à la procédure principale MOTTNCN.
- Nous n'avons pas représenté sur la figure ZV-6 les instructions
du code fonctionnel. Cependant, il est nécessaire d'y respecter les
conventions suivantes sur les registres :
1) le registre 12 ne doit pas Ôtre détruit. Il doit contenir
l'adresse de départ de la TCA.
2) le registre 13 ne doit pas Ôtre détruit. Il doit contenir
l'adresse de la DSA qui a été précédemment réservée.
3) le registre 5 doit ôtre mis à zéro ou, en d'autres termes,
nettoyé, car il s'agit d'appels de procédures externes.
k) le registre 1 contiendra l'adresse de la liste des argu-
ments à transmettre à la procédure externe appelée, (il est nécessaire
de prévoir une constante X'80' dans le premier octet de l'adresse du
dernier argument de la liste dressée. Cette constante indique à la pro-
cédure externe appelée qu'il s'agit du dernier argument. De plus, comme
les procédures externes appelées sont des programmes du type fonction,
c'est-à-dire retournant une valeur, c'est l'adresse de la valeur retour-
née qui est marquée par la constante X'SO'. Aucun programme de la bi-
bliothèque ne fait cas de cette constante).

Remarques
1. Un s.p. appelé par une procédure PL/1 peut passer outre à la
gestion des cas d'erreur du PL/1 et assurer sa propre gestion de ces
erreurs. Il doit dans ces conditions fournir sa propre macro SPIE afin
de traiter les cas d'interruption ou ses propres macros STAB traitant
des cas de fin anormale d'une tâche. Normalement, il y a peu d'avantages
- 228 -

dans cette façon de procéder dans la mesure où le PL/1, lorsque son en-
vironnement est établi et sauvegardé dans le s.p. appelé, produit des
messages d'interruption assez significatifs. De plus, il y a d'autres
avantages que nous pouvons tirer du fait que nous opérons sous environ-
nement PL/1. Un de ces avantages, et non des moindres-, est de pouvoir
avoir la main par l'intermédiaire d'un bloc du type ONONIT permettant
de fournir d'autres renseignements plus significatifs dans le cas d'une
interruption.
S'il s'avère cependant nécessaire de passer outre la gestion
des cas d'erreur du PL/1, il faut fournir sa propre macro SFXE et de
plus sauvegarder l'adresse de la PICA fl12J. Avant le retour au PL/1
toute gestion des cas d'erreur par le PL/1 doit ôtre rétablie. Cela
est possible par utilisation d'une macro 3TAE ayant O pour opérande ou"
par utilisation d'une macro SPIE effectuant le rétablissement de la
PICA en fonction de la façon dont la sauvegarde et la désactivation
ont eu lieu.
2.. Nous avons utilisé figure IV-6 le point d'entrée PLISTART afin
d'établir l'environnement du PL/1. Nous avons par ailleurs indiqué en
début de ce paragraphe qu'il était possible d'utiliser les deux autres
points d'entrée, à savoir PLICALLA et PLICALLB. Ces trois points d'entrée
diffèrent par le type et la façon dent on veut passer les argumenta à la
procédure appelée. Essentiellement, les différences sont les suivantes :

a) L'utilisation de PLISTART est nécessaire lorsque des options


de procédure sont à passer comme à une procédure principale déclarée se-
lon le modèle suivant :
MOTTNCN : PROC(PARAMETRES) OPTIONS(MAIN);
DCL PARAMETRES CHAR(lOO) VARYING;
Comme, à ce stade, c'est le cas qui nous intéresse, nous avons choisi
le point d'entrée PLISTART.
b) L'utilisation du point d'entrée PLICALLA ne permet pas de
passer des options de-procédure. De môme que pour une procédure non
principale, d'autres arguments peuvent être passés. Dans ces conditions
le registre 1 doit Ôtre mis à Jour et pointer sur une liste d'arguments
dressée à cet effet. Si par contre, nous ne désirons pas passer d'argu-
ments, le registre 1 doit être mis à zéro. Notons, au passage, que
c'est ce point d'entrée qui a été choisi dans le cas des réseaux élec-
troniques. Le mode opératoire a été décrit figure IV-5a.
- 229 -

c) L'utilisation, du point d'entrée FLICALLB permet de passer


à la fois des options de procédure et une liste d'arguments quelconque.
Dans ces conditions, le passage- des arguments est assez complexe.

XV. 3. ORDONNANCEMENT DE LA MATRICE JAC0B1ENNE PAR EXECUTION DES


QUADRUPLETS SOUS ENVIRONNEMENT PL/1 .

IV.31. Implantation de la matrice.

Le mode d'implantation de la matrice jacobienne doit être


efficace afin de réduire le temps de recherche et le temps d'accès aux
éléments. De plus, cette implantation doit permettre d'insérer des élé-
ments qui apparaissent au cours de l'élimination gau3sienne ; elle doit
aussi permettre de retirer les éléments qui ne sont plus utilisés.
Nous avons exposé au chapitre H I les structures concrètes
dont nous disposons afin de représenter les données abstraites. Nous
avons de plus insisté sur l'intérêt que présente la structure concrète
de plexes lorsqu'il s'agit de tableaux volumineux très creux. Nous
avons souligné que l'implantation d'un tableau pouvait se faire simul-
tanément par lignes et par colonnes avec têtes dans une zone contiguë.
Considérons la matrice A :

*1 0 0 "
A = 2 3 0
_ 4 5 6 _

décrite sous forme de tableau creux selon les conventions exposées au


paragraphe 1.44. Nous avons représenté figure IV-7 l'implantation simul-
tanée par lignes et par colonnes de la matrice A à l'aide de listes
bidirectionnelles. Notons au passage que nous y avons adopté la repré-
sentation hexadécimale en es qui concerne les valeurs. De plus l'absen-
ce de chaînage se traduit par une adresse nulle (FF 00 00 00).
POINTEUR-COLONNE

fr 1 6 0 0 0 0 0
KF « 0 0 0 0 0
F F^O 0 O O O O

FIGIV-7 SCHEMA D'IMPLANTATION D'UNE MATRICE


- 231 -

IV.32. Exécution des quadruplets produits par le compilateur NEPTUNIX.

Le centralisateur de l'exécution des quadruplets est la procé-


dure CALFONC dont 1'-organigramme est donné figure IV-8.
Au premier appel du programme CALFONC, le programme SLECTUR
est appelé afin d'allouer et de lire les quadruplets décrivant un pro-
blème déterminé. L'organigramme du programme SLECTUR est donné figure
IV-9.
Deux programmes PLIRXEQ et PLITXEQ, internes au centralisa-
teur CALFONC gèrent le décodage et l'exécution des quadruplets. Nous
avons représenté figures IV-10 et XV-11 les organigrammes correspondants.
Les quadruplets exécutés peuvent âtre des opérations élémen-
taires de multiplication, de division, d'addition ou de soustraction.
Selon la classification adoptée paragraphe XIX.42, le rang des quadru-
plets est alors < 56. L'exécution de ces quadruplets est alors assurée
par le s.p. ASMXEQ2 selon le modèle adopté figure XV-13. Rappelons que
le s.p. ASMXEQ2 est écrit en AL3Ô0.
Les quadruplets exécutés peuvent âtre des branchements à
des fonctions internes ou des fonctions externes. Dans ce cas, il faut
sauvegarder l'environnement du PL/I. Le principe de l'appel des fonc-
tions est donné figure XV-12. C'est le sous-programme ASMXEQ3 qui assure
cette tâche. Les fonctions internes sont au nombre de 17- Leur liste a
été donnée paragraphe UI.421. Ces fonctions font partie de la biblio-
thèque résidente de l'étape d'ordonnancement-traduction-précompilation
du système NEPTUNIX.
L'ordonnancement de la matrice jacobienne peut âtre correct.
Alors, si l'utilisateur le demande, le contenu de tous les fichiers peut
âtre sauvegardé sur cartes. Ce sont les programmes FXLCOFT et COPIE qui
s'en chargent.
La matrice peut âtre singulière. DcJis ces conditions, la
phase de sauvegarde des fichiers ainsi que les phases suivantes ne
sont pas exécutées. Le contrôle est donné au système d'exploitation.
Si une erreur se produit pendant l'exécution des quadruplets,
le programme SDESINT est appelé afin de décrire le type de l'erreur
rencontrée. Ensuite le contrôle est donné au système d'exploitation,
selon le processus décrit précédemment.
- 232

/OH
c CAU=OHCQt,î.f,«« M*m) l
îi
EJWOR BESUI} I F KNÏ«>0 THW CAU. » B I K T ( D « l V X , l
( ewpnm p s,iM»,KHTit nn *ui,M«T,8 x)j
f t > > > IHDJ

|
l»nj)TiHMi>ivn.iift.a«».»'a»M*'«nW'»> I

JflMR»i;S«)>l-, Stt)»-li -=rC_Eu&lZ>


if*
ras» mu. iFUtt.'a'» |
Mnnmii'Mi
I ||IB1IIMWITM •<"êïïm«»»'f J ^ s

AUJttttMM.fMl.MIUVIUrt'0» GET KKCMIIlM LIST /


Ot.SUIVX) /
FUTXE4CF0Nt,NM, /
PHiMMIM»} rffeNMTKtt; MW,MfcT,XNTR)
nw(NwW»V> N t . r M m w ;
FFl.wmwV, SUte-CNFMF/HM»
SUtiCHMJ/HM*

~^> ' " - I -


P*)^. *»i.i
KNTkiO} rasimma)-,
MXRimen>nutu> KNTRiSiPHSiMmtt)',
MtcmnumMHMZ)

KNTK)
MtT,KNTft)

-+•+-

I IAW.UTIL(8WHXf,6J[m,IN>»M 5.yAl.g<m,X)1 1

FIG IV-8 CALFONC ou centralisateur de l'exécution


des quadruplets
/SLKiuiitMmnA 233 -

- g = = _ ^>
" nuwun-wwL?

/ O K H C0OJ6JT / À R E M M I O 1fTM,NCoy
/ IMWIT h" yi»,Ttiu,»«",nn«,B», /

h
ALLOCATE 'GET(conuT) W W I I H H / r
IMITA*, HTIMP,
AUKATI HOMIMN
NHOWt,VT«PB

/atTlMWCTT) 1—U
NHLTAaiimnr.nHtw OONSTMfTI* AU |
«TP«J PMtltM*
VT1>» /
/ AU.OCKT» VAIM«

'cuse eotewT ^ •[-fetTCUMtXTl VALtUR


7
/ a w qtmwtr/ ^ B W B W H ) U»,JI,/ ALLOCATE
TOIt,F««|FOia, 3ACS,
JA«,S*IM,»f*» . » • * *

HA3I.LH; «A*I»L«SMAW»LM) « « « . I . M

foiifmnin»;f«H-ij«^Ni; pom-rat») sPFO;


1
Nwmi4>*ni M>nTiii)5n»; h i n i H - i ^ h«w»H
PW,
RH M LA U O M 4
ï ï Û s t ï ïm
wmS Ï) cpoMé^fwH.cwo.qnci, / bfttMW«au w
« A H , ,c<nm,ca«M,,FOHa /

(nmuli PIS
romnwsPM
mma)>)F|
FMMHIUAPML.'or 6 J»
T< C L O S E . eenowT
7
PWHVUÏSPH
pnmsais PIS
M i m M i Pfti
Poim»B)iPF4

FIG IV-9 SLECTUR,programme de lecture des données

des fichiers CODOBJT et GENERAT


234 -

PLIRXEQ (PREF,J,T,K) .

P.fBEF

' Optimisation" de 'là "bouclé'


DECODeR(TOPRD,T0PIH,TOWU,T0flR,Cma

A5PlXtai(Tonu,TOPiu,TOPM,Tonti , x u ) ,
»M>, T«),ato), FU), otmvxu), VAL&OIUO),
<IW>)

LU*

12 MAXS

(fin PUHXEOT)
UNassuunctcHM,i, s)

«ECODEA
*—
TOPM>»0

TOPHO<5t? /oui.

TOPK»<bi >SMXESt
>.
ASWEC3CTomt>,Tonn,Tomi,7o«s ,Ti»),ttft),xit)

FIG IV-10 Programme PLIRXEQ appelé par CALFONC


- 235

{ PLnXEQCT»B,t»AT,K) )

r Vpfimi&îffôn'cFê ' Tà~~6ôûcïë~


KCOwnCropRe .TorMtTorM/tamsciNa

Mnxeai(TDnu,TetM,Tana,T«m,M4,

-CEE =«,ITA

1
m» Mixta _T\

»ICODE*.

TOP«.6>sO

rurv \ TOPHO*Sfc ? /oui

I / TOf«.D<*iN $»twess.

MnxM3CT«pnt,-r<'"i,7omt,7«fn Ti»,3uA,ii»)
l

FIG IY-11 Programme PLITXEQ appelé par CALFQNC


- 236

CAL FO N C

décodage dts quadrupMs ptr appel CHEMIN


du sous-programme DECOOER
REEL

<56
K rang du
quadruplet

>56
\
)

ASMXEQ3

ASMXEQ.2 sauvegarde de l'environnement


de la procédure CALFONC,
mise à jour du nouvel environ
nement pour la fonction à ap-
peler.criàtion des arguments
Chemin temporaires.
I apparent

FONCTION APPELEE
fonction interne en PL/1, CHEMIN REEL
fonction externe écrite en
PL/f, FORTRAN ou AL360

1
I chemin ASMXEQ3
( apparent
restauration de l'environne­
ment de la procédure
I CALFONC, récupération des
arguments temporaires.

CALFONC

suite...

FIGIY-12 Principe de l'appel des fonctions internes et

externes
- 237 -
/« OECOOAGE ET TRADUCTION OES 56 PREMIER! ITPCS DE COOES */
ASrKEQ2:PSOC(COrD»ZOPliJOP2«iaP3rV.S.T,GtF,D,C.Ji;
/• ..-.„..-...-«. ..—-.. —--, _........---»——
DESCRIPTION DES PARAHETRES REÇUS:
COOP EST LE CCCE DE L'OPERATION.
XOPl EST IE RANG OU FREMIER OPERANDE.
IOP2 E5T LE RANG DU SECOND OPERANDE.
IOP3 EST L'OPERANDE OE SOTTIE.
V EST U TABLE 0E3 VARIABLES.
5 EST LA TABLE RECEVANT LE5 ELEdENTS OE LA JiCOOIOPIE.
T EST UNE TABLE OC t'i>VEG4RDE OES RESULTATS TEMPORAIRES.
« ESr U TABLE RECEP1RICE DE L'ERREUR ASSOCIEE.
F EST U TABLE RECEPTRICE DE LA NORME.
0 EST U TABU OES DERIVEES ASSOCIEES AUX VAHIÂSLE5.
PAR RAPPORT A U VARIABLE It (DEFENDANTE.
C EST LA TABLE OES COttSTANTES tMIERIQUES DU PflOOLEItE.
J EST UME TABLE OE SAUVEGARDE 0E9 RESULTATS TEIirCRAIRE5.
_„_„_—._-———.—--_-—————————— — */
DCL APPEL1561 LABEL AUTOMATIC;
DCL (V,3,T,G,F.D,C.JII»t DEC FLOATI16K
DCL (CQPa.I0Pl.I0P2.I0P3» OKI FIXED!31.0I1
COFO«COPO»1!
/• »/ GO TO APPELCCOFI'Î /• */
APPEL! I l : T(IQP3)*CtIOPli;RETURN;
APPEL! 2 1 : TIIDP3l*VllOPli;RETUlli;
APPEL! 3 ) : TIIOP3I-0IIOP1KRE1URHI
APPIL! * ) : SIIOP31iCriOPIi;HETUnti;
APPELI S U SflOPStsSIIliPDiRETIIRti;
APPEL) h\i G I I 0 P 3 | S C ( I 0 P H ; R E T U R H ;
APPEL!41K FI IOP3 l*T! M P I I"RETURN;
APPEL!HZ I : SI Itll'3 1»J! IOPI ) IRETUPII!
APPELI43K JIIOP3)3ClIOPt>:RETURNi
APPEL!**): jriDP3)»SIIOPli;RErUFN(
APPELU51; T I I 0 P 3 I ' T ( I 0 P 1 I ; R E T U R H ;
APPELI5011 J|IQP31«-J|I0P31 fRETUHH;
APPEL* 71t THOP3l«CllOPlt»T<IOP2);RETURrU
ArPELl a i : FU0P3HCIlOPlMTU0P2>;RErupn;
APPEL! f H TfIOP3l*niOPII*TUOPStiPETURNï
APPELI 10K FIInP3)*TTICPlHTUOP3>iREIumi;
APPELIll): 3U0P3l=aiI0Pl»*SU0r2»iRCTURN;
APPEU12I' SfI0P31"SII0PlliC(IOPZ)iReTURHi
APPELI13): SCIOP3]xSIIOPll*TIIOP2>.RETURIU
APPELtl*)- 8(I0P3l3CII0PlliCITOPZ);RETURH;
APPELI15): SttaP3MGII0PlliT120P2)iRETURHi
APPELI 1*K TIIOPSHCIIOPll-TIIOKMRETUmii
APPELI 17If HtOP3)*CIIOPll-T1XCPS>;ReTUKIÎ
APPELI 1 0 I : TII0P31*TI IOPIl-TIXOPS >IR£TtftMt
APPELI I f >: PI IDP3)»TI IOPI l-TI I0P2 KRElUtlU
APPEL!20> ' SI IOP3KCIXOPl l-SI IOP2l'RETURMî
APPEL! r i ) : SI ÏOP3 )"3I XOPl »-CI XOP2 > jRCTURIIÎ
APPCII22): SUOP31«CIIOPl)-ClXOP2liRErURHi
APPELIESIt SIIOP3)'SIIOPI1-31IOP2tiflttURH;
APPELI 2*1 < S(IOP3)*SIX0Pl)-1UOP2IiR£TURHi
APPELI251: 3UOP3l=CIIQPlt-TIIOP2)îRtTUKHt
APPELI 2* t î 61 10P31*C( IOPI (-CI IOP2 »-RETURNi
APPELI271: GUOPSI'CI IOPI l-CUOPSliRETURN;
APPELI201: T(IOP3)z0fI0Plt-TUOP2>'RETURNI "
APPELI211: G(XOP3}xGIIOPll-TIXOP2»iRETURIi;
APPELI 3t1 s TIX0P3)»T(IOPIl«T< XOPS »iRETURN!
APPCLI31JI FIXOnisTIXOPlINTIlOPEURETURNl
APPELI32)' TIXOP3l*SllOPll«CIXOP2l'flETUHNÏ
APPEL!331i SI X0P31*51IOPIJ«C(XOPSI;PETURHi
'PPELI34I* TII0P3USI IOPI l«VII0PC>"RETURN!
APPELI35I; TIIOP3}sTU0Pl)*CIIOP2i;REILlPli;
APPEL!341.* TllOP3|iTI[OPll/riI0n2i;REU*(;M;
AFFELI371: F! X0P3)*TI {CP1l/TIIQP2liUf H"RH"
ArPEKIO): TIIUP]13SII0PI)/Cll0P2liRi:ilJRIi;
APPELI39H S<tOP3lsSIIOril/CII0P21-PElURIIî
APPCLKlO)' TII0P3)KllIPP!l/ClinPC)iPCH«M;
APPEL!** 11 G! I0P3ISGI IOPI 1»Jl I0P21:P.t ILJRNi
APPELI*?H JllOP3l*JltOPI I*JH0P2IÎPE1URHÎ
*PPELf*«)i JIIDP3l>CIIOPll-JIIDP2KRerURtli
APPELI*?li JU0P3J*J< lOPII-T'lOPEI.RETURN;
APPEHS111 Gl I0P31*CI IOPI I-PI10P21 'RETURN!
APPEL!52 11 Jl MP31Z.H IOPI I-J-10P2I(RETURN!
APPCLI53J' JII(irj)=JUCPl)»VIIOI':iiHClUPIIJ _' y-- A-*
APPELi5*ii JiiaP3i'JiiDPti«TiioP2i;nEruPNi r l Q U r fi 1Y * 1 J
ArPELi5sn jiiapsi-jrTOPII«JIinpsiïflEiutïfii — i -
APCELI f7* i : j i t n c j i s j i mpi J / T I I O P Î i;«r IURII;
EIO A5MXCQ2;
- 238 -

IV.it. TRADUCTION DES QUADRUPLETS EN LANGAGE PL/1 .

IV.4l. Introduction.

Lorsque le compilateur NEPTUNIX sauvegarde les résultats de


la compilation sur le fichier GENERAT, nous pouvons admettre que le
programme-source, enrichi du calcul du jacobien, est transformé en un
arbre analogue à l'arbre d'analyse syntaxique. Nous allons admettre -
que les noeuds de cet arbre correspondent aux opérateurs et les feuil-
les de l'arbre représentent des opérandes représentés par les pointeurs
aux tables des variables du système à simuler, ainsi que des constantes
rencontrées lors de l'analyse. Physiquement, il existe plusieurs façons
de représenter l'arbre précédent. Indépendamment du mode de représenta-
tion adopté, nous pouvons dès à présent appeler cette représentation
tjar programme intermédiaire. Nous avons déjà traité au paragraphe IV.32
du décodage et de l'exécution des quadruplets sous environnement PL/1.
A ce stade, nous savons s-i la matrice jacobienne est régulière ou sin-
gulière .
Dans le cas où cette matrice est singulière, cette phase de
traduction est inutile.
Nous nous plaçons dans le cas où la matrice jacobienne est
régulière. Le programme intermédiaire dont nous disposons est une suite
de commande qu'il s'agit de traduire en un programme-objet. Pour que
le générateur de code engendre un programme-objet correct, il doit pou-
voir accéder aux informations contenues dans les tables des symboles.
Par exemple, les attributs des opérandes intervenant dans une opéra-
tion doivent être pris en compte : lorsque A est une variable et B
une constante, le code engendré pour A + B est différent de celui en-
gendré lorsque A et B sont des variables.
Pour des raisons d'efficacité, il est hors de question d'opé-
rer par décodage et d'exécuter des quadruplets à chaque pas d'intégra-
tion. En effet, la traduction des quadruplets et la reconstruction de
l'arbre d'analyse est une opération onéreuse. De plus, afin de profi-
ter de tous les avantages de l'environnement du PL/1, le programme
correspondant à la description du système utilisateur doit obéir aux
conventions standard du PL/1 .
Afin de fixer les idées, nous disons que le programme utili-
sateur est appelé, lors de l'étape d'intégration, un certain nombre de
fois pouvant dépasser le millier. Il va de soi que l'optimisation du
programme engendré est essentielle. Il faut d'une part profiter de la
- 239 -

classification des termes du jacobien en termes constants, en termes


dépendant de la variable indépendante et en termes non linéaires, et
d'autre part éliminer toutes les opérations redondantes.

IV.hz. Représentation du programme intermédiaire.

Le programme intermédiaire est une suite de quadruplets. Con-


sidérons par exemple l'expression arithmétique suivante :
F(15) = B+C*-D
où B, C et D sont des variables.
La suite des quadruplets permettant de calculer cette ex-
pression est :
T(1) = -D
T(2) = C*T(1)
T(3) = B+T(2)
P(15) = T(3)
Nous remarquons qu'il est nécessaire d'utiliser des variables temporai-
res T(l), T(2) et T(3) afin de sauvegarder les valeurs des expressions
calculées. Une optimisation assez simple de cette suite tenant compte
de l'opération d'affectation permet de remplacer la séqusnce précéden-
te par la séquence ci-desous :

T(1) = -D
T(2) = C*T(1)
T(15) = B+T(2)
Cependant, ce type d'optimisation ne peut Ôtre que local.

IV.43. Optimisation de code liée à la machine de traitement.

La traduction des quadruplets peut être effectuée par une


suite d'instructions de langage-objet indépendante du contexte des qua-
druplets. Par exemple le quadruplet :
(+ , X, Y, A)
peut être traduit par les trois instructions élémentaires suivantes :
CHARGER X
ADDITIONNER Y
SORTIR A
- 240 -

1 1
L instruction CHARGER X place dans un "accumulateur' la va-
leur contenue en mémoire à la position repérée par X. L'instruction
ADDIDTIONNER Y additionne la valeur contenue dans l'accumulateur à
celle désignée par Y, le résultat se trouvant dans l'accumulateur.
L'instruction SORTIR A met en mémoire à la position de nom A le conte-
nu de l'accumulateur. Signalons au passage que cette dernière instruc-
tion n'est pas destructive.
Dans l'exemple précédent, nous avons supposé que la machine
de traitement ne possède qu'un seul accumulateur.
Si l'accumulateur contient initialement la valeur associée à
la position de la mémoire de nom X, alors l'instruction élémentaire
CHARGER X est inutile. Il faut en tenir compte, lors de la génération
de code. Ce type d'optimisation de code est fonction de la machine sur
laquelle s'effectue la génération.

IV. kk. Exposé de la méthode adoptée (All] , (AI2] , [G6O] , (*Nlï] .

L'arbre représentant le programme intermédiaire est traversé


plusieurs fois durant la génération de code. Le rôle de cette étape est
de fournir le mode d'évaluation de chaque construction, prenant en comp-
te, à la fois, la structure fournie par le compilateur et les attributs
sémantiques.
Dans ces conditions, il s'agit de représenter l'arbre associé
à chacune des équations de manière linéaire, puisqu'il faut le parcou-
rir souvent.
Un noeud peut Ôtre rencontré de plusieurs façons pendant le
parcours ;
- en mode infixé, c'est-à-dire, après qu'un de ses descendants ait
été rencontré ;
- en mode postfixé, c'est-à-dire, après tous ses descendants ;
- en mode préfixé, c'est-à-dire, comme descendant d'un noeud déjà
rencontré.
A chaque parcours des actions sémantiques sont prises. Par
exemple, si une décision peut se faire à partir de la connaissance de
la sémantique des descendants, le mode de parcours postfixé est mieux
adapté. Si au contraire, certaines actions peuvent ôtre entreprises
avant d'atteindre les descendants, le mode préfixé est mieux adapté.
- 241 -

Afin de construire la représentation linéaire de l'arbre, un


mode de représentation particulier dans un ordre spécifique est imposé
par les concepts sémantiques de la génération.
Le mode de représentation étant les quadruplets, leur ordre
tf
d apparition fixe, en général, l'ordre dans lequel la séquence est
exécutée.
Ce que connaît le générateur est l'ensemble des informations
attachées aux feuilles de l'arbre, ou plus généralement ce qui devien-
dra les feuilles de l'arbre. Ces informations sont répertoriées dans la
table des symboles. Les caractéristiques du langage ont une influence
profonde sur la génération. En effet cette dernière n'est pas seulement
concernée par le type des identificateurs ; leur taille et leur adresse
sont aussi importantes.
Le générateur de code que nous avons utilisé travaille avec
les entités du code intermédiaire prises dans un certain contexte plus
ou moins local. Son modèle est formé :
1) d'une pile contenant la séquence des objets ;
2) d'un simulateur de machine qui, à tout instant, maintient un
état des ressources, de l'environnement et qui peut préciser quelles
sont les positions libres des mémoires temporaires. Si ces dernières
sont occupées, alors le simulateur de machine doit être capable de
dire quel est leur contenu.
La pile a pour but de conserver les informations liées au
contexte. Il est en effet nécessaire de disposer du contexte (arrière-
avant) afin d'effectuer la génération de code.
Nous avons insisté sur le fait que l'état des ressources doit
dtre connu. Les ressources seront donc décrites par des descripteurs
donnant leur contenu (nom de variable, nom temporaire d'un quadruplet...
Afin d'adresser les opérandes, nous consultons la table des symboles.
Toute référence aux opérandes dans les quadruplets se fait en donnant
leur adresse dans cette tab± . Le code à engendrer dépend du type de
u

l'opérande. Far exemple une constante est accessible par un indice dans
la table des valeurs numériques, alors qu'une variable et une fonction
interviennent directement par leur nom qui est placé dans une variable
temporaire.
L'optimisation du code est jugée en fonction de l'utilisateur
du programme. Il s'agit plus d'améliorer que d'optimiser :
- 24a -

- Réduction du temps d'exécution par évaluation des expressions à la


génération et par propagation des résultats.
- Elimination des sous-expressions identiques.
- Optimisation de la gestion des ressources.
Le compilateur PL/1 prend en charge l'optimisation au sena
large du terme.
Le code étant séquentiel, son amélioration se trouve facili-
tée. Nous disposons de blocs séquentiels. Nous avons un point d'entrée
et un point de sortie par bloc. Si nous supposons connues les sorties
d'un bloc, c'est-à-dire, les variables utilisées ensuite dans d'autres
blocs, nous pouvons aisément détecter à l'intérieur d'un bloc les ins-
tructions inutiles. D'autre part, afin d'éliminer les calcula redon-
dants un certain nombre d'outils sont utilisés. (Rappelons qu'une ins-
truction 1 est redondante lorsqu'il existe une autre Instruction j telle
que ces deux Instructions soient Identiques et qu'aucune valeur dont dé-
pendent ces instructions ne soit modifiée entre i et j.)
Les outils cités précédemment sont la mise en oeuvre de la
notion d'activité d'une variable à un instant donné, la notion de graphe
de dépendance associé à un bloc, de permutation d'instructions ...

c U c o d e
•*• " ?£2É£ --2£ °- -
Nous disposons de T.. , ... , T_ positions temporaires. Le code
est engendré de telle manière qu'une fois évalué, il laisse la valeur
de l'expression dans T-. Une fonction CODE (n,i) engendre le code cor-
respondant au noeud n en fonction des codes de chacun des descendants
directs du noeud.
Appelons CODE (n ,1) le code correspondant à la racine n ,1
étant le numéro de la position en mémoire où est laissé le résultat.
Comme à ce stade nous opérons sur des arbres, nous définis-
sons sur l'ensemble de ces arbres deux opérations :
- Une opération d'enracinement qui correspond à l'appel de la pro-
cédure CODE (n,i) avec les arguments correspondant à l'opération à
évaluer.
- Une opération de concaténation qui correspond à la concaténation
de deux chaînes de codes se trouvant dans deux positions T. et T. ,-.
Un noeud est dit MINEUR si c'est une feuille avec étiquette 1.
Un noeud est dit MAJEUR si chacun de ses fils a une étiquette
supérieure ou égale à N (N étant le nombre de positions temporaires de
sauvegarde).
- 243 -

On peut considérer le nombre d'enracinements et le nombre de


concaténations pour calculer une expression agissant sur N positions
temporaires. Le COUT de l'arbre est le nombre d'opérations nécessaires
au calcul de l'expression correspondant à l'arbre. Ce coût est une
fonction du nombre de noeuds intérieurs, du nombre de noeuds majeurs
et du nombre de noeuds mineurs.

L20
B - Çontrôle_de_génération_lors_de_la_tra^ [viOJ [ J•
Il existe une différence fondamentale entre le calcul algé-
brique et le calcul numérique sur ordinateur :
- le calcul algébrique porte sur des opérandes infiniment précis
et les opérations y sont supposées faites avec une précision
infinie.
- le calcul sur ordinateur en virgule flottante porte sur des opé-
randes qui possèdent un nombre limité de chiffres significatifs
et les opérateurs qui les traitent ne sont qu'une approximation
des opérateurs mathématiques correspondants.
Ainsi, toute opération effectuée sur un ordinateur peut en-
gendrer une erreur.
Lors de la génération de code, il faut s'assurer que le pro-
gramme qui va être transmis au module d'intégration du système NEPTUNIX,
ne dégrade pas progressivement la précision des résultats.
En effet, il serait fâcheux que l'algorithme d'intégration
dont la convergence a été démontrée [M3OJ puisse diverger lors de la
phase d'intégration parce que le générateur de programme produit un
code non valable du point de vue numérique.

On peut utiliser des lois algébriques appliquées à certains


opérateurs afin de minimiser le coût de l'arbre. Ces lois algébriques
induisent des transformations sur l'arbre an cours de traitement.
Nous allons émimerar quelques i^nes des lois algébriques
utilisées. Signalons au passage que ces lois doivent être manipulées
avec précaution.
- 244 -

1. Une opération binaire G est commutative lorsque nous avons :


a 9 (3 = (3 9 a
Far exemple la multiplication est toujours commutative. L'addition peut
ne pas l'être, dans certains cas, compte tenu des erreurs d'arrondi
QnoJ.
2. Une opération binaire O est associative si nous avons :

ce 9(p e s) = (a 9 (3)© T
Par exemple l'addition peut être une opération associative. Cependant
il faut être prudent lors de l'utilisation de cette transformation.
En effet
CC +(0 +7) peut être différent de (a+(3)+ IS

11 suffit de supposer CC trop grand vis-à-vis de |3 et "ff = -a. Supposons


de plus travailler en arithmétique décimale. (a+|3)+ TT peut donner 0
alors que CC +((3 +IS") peut donner une autre réponse.
3. Une opération binaire 9.. peut être distributive par rapport à une
opération binaire 9- si l'égalité suivante a lieu :

a 9 ((3 9 v) = (a 9 p) 9 (cc 9
t 2 1 2 1 v).

Far exemple dans les mômes conditions que précédemment, la multiplica-


tion est distributive par rapport à l'addition, lorsque nous pouvons
écrire :
tt*((3 TT) ~ <x*(3+a*T .
+

4. Un opérateur unaire admet une inversion si l'on peut écrire :


9 9 a = a pour a quelconque.
C'est le cas de la soustraction unaire.

D - Composition déprogramme engendré.


Le programme engendré est une suite d'ARTICLES. Un article est
formé de code PL/1 entouré d'informations secondaires qui le concernent.
Comme ce programme est compilable et par là-même translatable(c'est-à-
dire qu'il peut faire référence à des entités dont l'adresse en mémoire
est inconnue lors de la génération), les informations secondaires dépen-
dent du type des articles.
- Zk5 -

Brièvement ces types sont :


1. Les Déclarations. Elles ont pour objet :
a - d'identifier pour le compilateur PL/1 les entités auxquelles il est
fait référence à partir d'autres modules (par exemple les trois
points d'entrée du sous-programme engendré correspondant aux codes
associés aux termes constants, aux termes dépendant de la variable
indépendante et aux termes non linéaires du jacobien).
b, - d'introduire des entités crées à 1'extérieur (par exemple l'appel
des fonctions incorporées dans le compilateur PL/1 ou des fonctions
extérieures à fournir par l'utilisateur).

c - d'introduire des entités créées à l'intérieur du programme engendré


(par exemple l'utilisation des noms mnémoniques des variables).
2. Les Définitions et les expressions. Elles identifient les
objets qui, normalement, possèdent des déclarations associées. Ces défi-
nitions ont des valeurs obtenues par évaluation d'expressions plus ou
moins complexes (par exemple calcul de la norme d'une équation, calcul
des dérivées partielles associées à chaque variable intervenant dans
chacune des équations).

3. Les Chargements. Les objets décrits dans ces articles doi-


vent ôtre chargés en mémoire dans des adresses courantes fournies par
le système NEPTUNIX lors de la phase d'intégration (par exemple affecta-
tion des valours évaluées de la matrice jacobienne chargée en mémoire
sous forme cle tableau creux, etc.).

k. Ce que nous pouvons désigner par Divers. Nous avons groupé


sous cette rubrique ce qui correspond au retour du programme engendré
au système NEPTUNXX à partir de chacun des points d'entrée, à la fin
physique du programme engendré, à des directives de mise en page pour le
compilateur PL/1 ...

Dans cette section, nous allons discuter brièvement des trai-


tements spéciaux que le générateur doit mettre en oeuvre afin d'assurer,
lors de l'exécution, une solution cohérente pour le passage des pa-ctmè-
tres.
- 2k6 -

Afin d'établir la correspondance entre les paramètres réels


et les paramètres formels à l'exécution d'une fonction incorporée ou
d'une fonction externe, plusieurs techniques d'appel existent. Nous
allons les présenter.
-
1. Appel par valeur. Le paramètre réel est évalué au moment où la pro-
cédure est appelée. Aucune modification du paramètre réel ne peut s'en-
suivre (cas d'une fonction incorporée).
2. Appel par valeur résultat. Le paramètre réel est évalué à l'appel
de la procédure et sa valeur est assignée au paramètre formel rangé dans
la procédure. A la sortie de la procédure, la valeur du paramètre formel
est recopiée dans le paramètre réel dont l'adresse avait été calculée
lors de l'appel (cas des termes du jacobien lors de l'appel d'une fonc-
tion utilisateur).

3. Anoel par résultat. A l'entrée de la procédure, l'adresse du para-


mètre réel est calculée et passée à la procédure. Le paramètre formel
n'est pas initialise. Une zone mémoire lui est réservée. Au retour, sa
valeur est recopiée dans le paramètre réel en utilisant l'adresse cal-
culée plus tôt.
Dans tous les cas, trois types d'informations sont nécessai-
res :
a - nombre de paramètres,
b - adresse des paramètres,
c - nom de la procédure ou de la fonction à appeler.

- , e : r uc
** îSÏ2EÊi_-2-iS _ïïé*^2Ë P od- *ion 'Vun code transportable.
L'intérêt de la méthode est d'écrire un programme indépendant
de la machine tout en conservant des performances acceptables. Nous
avons pensé que le langage de haut niveau (PL/1 ici, mais pouvant être
aussi FORTRAN) constitue une réponse à ce problème. Un bon nombre de
critères ont été pris en compte.
- taille du programme
- niveau d'indépendance de la machine
- dégradation acceptable de performances.
Un complément évident de cette transportabilité est l'adapta-
bilité des programmes que nous n'aborderons pas ici.
- Zk7 -

IV.45. Programmes réalisant la génération de code en PL/1 .

Essentiellement ces programmes sont au nombre de deux :


CENTRAD et PLITRAD. Ils appellent quelques programmes externes
($LECTUR, DECODER) et quelques programmes internes (DECLVAR, INITVAR,
APPEL-POUR pour le programme CENTRAD j TEST1 , TEST2, EXN, INTERNE,
PRINTER pour le programme PLITRAD). Comme tous les programmes du système
NEPTUNTX, ces programmes sont écrits en PL/1 structuré.
Nous allons décrire brièvement le programme PLITRAD et nous
pencher plus en détail sur le programme CENTRAD.
1. Le Programme PLITRAD.
Essentiellement c'est la fonction de transition d'un automate
à pile à entrée et sortie par le sommet (APESS).
Le programme PLITRAD réalise les définitions et les expressions.
résoud les problèmes de traitement liés à l'exécution du programme en-
t
gendré et traite du cas de la construction de l arbre par les opérations
d'enracinement et de concaténation définies précédemment, du cas de la
simplification de l'arbre par utilisation des lois de transformations
algébriques ainsi que de l'optimisation du code.
Une expression peut inclure des sommes, des différences, des
multiplications et des divisions de constantes, de variables, de fonc-
tions incorporées ou de fonctions externes. A leur rencontre par le
compilateur PL/1 , toutes les valeurs doivent ô.tre disponibles pour le
calcul de l'expression.
2. Le Programme CENTRAD.
Son râle est de centraliser la tâche de production du program-
me engendré et de faciliter le travail de 1'APESS implanté par le pro-
gramme PLITRAD.
Nous avons donné figures IV-14 à TV-1 6 1 s organigrammes cor-
respondant au programme CENTRAD. Nous allons commenter brièvement ces
organigrammes.
Une chaîne de code est une structure ayant la forme :
1 NOM-DE-LA-STRUCTURE basée par un pointeur,
2 LONGUEUR-MAXIMALE (entier de 2 octets),
2 CHAINE (de longueur dépendant de la LONGUEUR-MAXIMALE);
- 248 -

V. CtNTRAO

tMOhw «fat. ti^Èl


. UMTin. SSiX/^

DECLVAR
! FONCTIO r

<^y
tPFEL.FOUIll ,1 , FREE JACS
y »*X4CU* /

FREE JAC3 f
«EXECU3 / ^
f e/s u./
/ ^ —C5E±>q
XMITVAR
INITVAR
X
APPB..POURI «AJ5 ,
PJ5)
1

'OHIBV FREE F0N0,F0W,F0Nt,eER(,&ERa.

^ L
AFPEk.POUItlOXMU), PAMHUSC fUTRA0(FONÎ,MF3,
I» TNOMFON.TPMinN)

F M E FOM.rWIilllX.TNMireH.TMKfON

Fcinulwic «L» JiU.


SORTtCS

C FIN du S. P . ~ \
CENTRAD J

FIG IV-14 CENTRAD ou centralisateur de la traduction des

quadruplets en un programme PL/1 équivalent


- 249 -

/cumui,F«iu.ucnmkk
( OV FltHlM FONCTM I

^ A
OMN FlLMFOHCno) /
INFUT /
/
1 '
GET FiU(FOMcno) /
(BFON) /
/
TF0H-.»FOH«a
AtUC TNOMFOH.TFARFON

«L2E
^
OIT «IlKrOtlCTIi) ( NOMFON , PARFOM)
7£ OSE f l L t ( f O M C T I Û ) /

/FUT FILi(lMTIU)) UMTUMit/ TNOMFONt»»!) s NOMFON ^FIN «UUf«ke \


I t i e FLOAT HM TFARFON(Mt2)x FARFON LECTUA1 M l FICHU» ]
FONCTIO d » S . P . J
V CSNTRAB y
fUT FILCtfOftllCS) C' B'L NOfirON IHTH.1I.
/ y
3mi, F A R F O N

<s
<
J x FARFOH
Dt!••»
7
»UT F I L Ë ( * O R T I M ) C ' O t C 1 PUTflLE(SOItTIH)C»KFLOAY
'LOAT«t>, B U FLOAT (4b) ' )

/ A.), 1EC FLOATUb),M /

IG IY-15 CENTRAD partie lecture du fichier FQNCTIQ


- 250 -

DEBUT iu. ».f. 0C8UT < U ) , r . ^


DICLVAR INITVAR
BU. CARIf CHMKSO) > K l *IX riCTUKE
s ^ . 'ZZÎ3'

IS 2
FINduS.P.MaVM P3X.I
<! ) C*RTt.'#f'llNOTOOSNCI) | |
'=AOWU*Xt'PUir)V,'
C«TE»'OU. 'HMtaKMXJU'Mt
FLMT(M) SAM» If P'HNOKIUIIO
JII'V,'

ï
/FIN
5
au S.MNfTYAP.
/
/ F U T nu(«MTiis^
(CARTS) /
PUT FlUCSORTIiy
(CMTC) 7
/

APPEL. POUR( t m , FNT)


SU. (LT,Dim,«ACT) AlNFnMj
DU.(PT,PNT) « H »
KU i SIKI RMtDCPT),
* MUT MN PIXC»,
i TA«U(LT MMm»imV)ÇHMU5);

LT» DIM I
PT.PHT
EXACT» D I M / 5

T
PUTRA»(TABU,lXACT,THOI<irOW ,TPftRFON )

c FIN Ju. %.i


A W E L . POUR, 3
FIGIV-16 DECLVAR, INITVAR et APPELPOUR, programmes

appelés par CENTRAD


- 251 -

Sept chaînes de code sont disponibles. Elles sont décrites


par le tableau ci-dessous :

Longueur
Nom Commentaire
maximale

FON0 MAF0 Codes pour calculer les normes de t e


y p 0L
F0N1 MAF1 Codes pour calculer les normes de type 1

PONa MAF2 Codes pour calculer les normes de type- 2

JAC3 MAJ3 Codes pour calculer les termes du jacobien de type 3

JAC5 MAJ5 Codes pour calculer les termes du jacobiân de type 5

GBR1 MAG1 Codes pour calculer les fonctions d'erreur de type î"

GER2 MAG2 Codes pour calculer les fonctions d'erreur., de type_2.

Enfin une table F0N3 de dimension MF3 groupe tous—les- codes


-
de calcul de tous les éléments autres que constants" ou dépendant' de
la variable indépendante.
Sur 1 ' organigramme de la figure- I3C-1U,. nous avons désigné pn* :
1 ) ISS1 : . - . _ -

C'est une suite d'instructions d'affectation des pointeurs et


des dimensions associées aux chaînes de codes. Les adresses des chaînes
sont gérées par le sous-programme SLECTUR qui les place, lors ds l'appel,
dans une table de pointeurs POINTS. Des pointeurs rangés dans une table
PADHBSSES, de dimensions DIM, sont disponibles' dans le programme CENTRAS
et permettent une réorganisation de. la séquence pour d'éventuels trai­
tements par boucles. L a suite d'instructions est l a suivante :

PADHESSES(1),PJ3=P0INTS(1) DIM(1 )=MAJ3


T
PADHESSBS(2) ,PJ5«POISTS(5) DDj(a)=MA.. j
PADRESSES ( 3 ) , PG1 =POINTS( 2 ) DIM( 3 ) =KAG1
PADRESSES(4) ,PG2=P0INTS(6) DXM(4)-MAG2
PADHESSES(5),PF0=POINTS(3) DM(5)=MAP0
PADRESSES(6),PP1=POINTS(4) D3W(6)=MA51
PADRESSES(7),PP2=P0INTS(7) DB«(7)=MAP2
- 252 -

2) B/S 1 :
C'est une opération d'entrée/sortie sur le fichier SORTIES
de la génération correspondant à :
1. L'ouverture du fichier en mode écriture par flots
1
2. L écriture du début du programme engendré.
Nous trouvons dans l'ordre séquentiel les chaînes PL/1 suivantes :
/* titre du probïème_ à_ répéter sur le listing de la compilation '*/"'
SEXECUT:PROC(SC,SD,SF,$S,SX) REORDER;
DEFAULT RANGEE(*) STATIC;
DEFAULT RANGE(#P) PTR;
DEFAULT RANGE(MN) DEC FLOAT;
DEL (SC,SD,SF,SS,$X)(*) DEC FL0AT(16);
Ces instructions correspondent à des déclarations portant sur l'ensemble
du programme engendré.

3) E/S 2 :
C'est une opération d'entrée/sortie sur le fichier SORTIES
correspondant à la création du premier point d'entrée du programme
engendré qui devrait commencer sur une nouvelle page lors de l'édition
sur le listing par le compilateur PL/1.
Cette opération symbolise l'écriture des chaînes suivantes :
<$PAGE;

SEXECU1 :ENTRY( SC, $D, 3F, £S, £X) ;


#SKEP(3);
Le point d'entrée ainsi créé groupera toutes les expressions du jacobien
décrivant des termes constants.
**) E/S 3 :
C'est une opération d'entrée/sortie sur le fichier SORTIES
correspondant à la fin du premier point d'entrée et à la création du
second point d'entrée. Le second point d'entrée débutera sur une nou-
velle page à l'édition et groupera toutes les expressions du jacobien
qui sont fonction de la variable indépendante.
Cette opération symbolise l'écriture des instructions PL/1
suivantes :
- 253 -

#3KEP(3);
RETURN;
«{PAGE;
SEXBCU2 :ENTRY( SC,SD,SF,3S,SX);
^SKTP(3)>
5) E/S h :
C'est une opération d'entrée/sortie sur le fichier SORTIES
1
correspondant à la fin du second point d entrée et à la création du
troisième point d'entrée. Le troisième point d'entrée débutera sur
une nouvelle page à l'édition et groupera tous les termes du jacobien
non linéaires et *iutes les normes.
Cette opération symbolise l'écriture des instructions PL/1
suivante»s :
%SKIP(3);
RETURN;
SPAGE;
3EXECU3 :ENTRY( SC , SD, SF, SX, SX) ;
£SKEP(3);
6) ES/5 :
C'est une opération d'entrée/sortie sur la ficnier SORTIES
correspondant à l'écriture de la fin du programme engendré.
Cette opération symbolise l'écriture des instructions PL/1
suivantes :
#SKEP(3);
END ÎESECUT;
- 25k -

IV.5. APPEL DÏNAMIQUE DU COMPILAïBUR PL/1 .

Nous avons exposé paragraphe IV.h la méthode de génération du


programme SBXECUT en langage PL/1. La phase actuelle du système traite
de la compilation par le compilateur PL/1 du programme ainsi engendré,
La figure IV-17 représente le sous-programme LOADPLI appelant le compi-
lateur par utilisation de la MACRO système LINK.
L'appel se fait par la macro LINK afin de pouvoir :
1) fixer les options de la compilation
2) définir les noms des fichiers à utiliser lors de la compilation
3) spécifier le numéro de la page.
Nous remarquons sur la figure XV-17 que ;
a) EP=IELOAA
spécifie le nom symbolique du compilateur. Le point d'entrée où commen-
cera l'exécution est déterminé par le programme de contrôle du réper-
toire de la bibliothèque (Library Directory).
b) PARAM=(LISTOPTA,LISTDEV PAGE) et
t

PARAM= ( LISTOPTS, LISTDEV, PAGE )


désignent l'adresse des paramètres à passer du système NEPTUNIX au com-
pilateur PL/1. Le premier mot dans la liste des adresses contient
l'adresse de la liste d'options» le second mot contient l'adresse des
noms des fichiers à utiliser et le troisième mot contient l'adresse du
numéro de la page initiale.
c) LISTOPTA et LISTOPTS
désignent l'adresse d'une liste variable contenant les options. Cette
liste doit démarrer sur une frontière de demi-mot. Les deux premiers
octets indiquent la longueur de la chaîne.
Cette adresse doit Ôtre fournie môme si les options du compilateur à
utiliser sont celles correspondant à sa génération. Dans ces conditions,
il faut coder zéro dans les deux octets de la longueur.
Les zéros et les blancs ne sont pas autorisés dans la liste des options.
d) LISTDEV

est l'adresse de la liste variable des noms des fichiers disponibles


pour le compilateur. Les noms utilisés ne correspondent pas systémati-
quement aux noms standard.
IOC «JECT CODE AODRl About 5THT SOURCE BHTEHEIfT ASH « 2 0 1 8 3 . E S 0B/09/7S

D00DD0 START OD000010


PRINT HOGEII 00000020
EXTRH HDDECK 00000030
SAUVEGARDES D'USAGÉ ET D E F I N I T I O N DU REGISTRE DE BASE. OD00r040
SAVE 114.121.T.10ADPLI 0D0RDD50
O00O1D 05B0 BALR DBASE,0 00000060
USING *.RBASE 0C000070
000012 1840 LR RSAVE.RSUPE caoooo&o
000014 4100 B08A 0009C LA RSUPE.SAVEAREA 00000090
000018 50D4 0008 oooos ST RSUPE.e(RSAVE) 00000100
00OO1C 504D «004 00004 3T RSAV£,4IRSUPEI 00000110
TEST SI DEMANDE DE DECK OU HOII. 00000120
O00D2O 5650 B08& 00098 17 L RCItlQ.sVUNQDECK) 00000130
000024 4655 OOOD 00000 18 LH RCIHQ.OIRCIIKII 00000140
000020 1255 19 LTR RCIIIQ,PCXNQ 00000150
00002* 4780 B04B 0005A 20 BZ SANSDECK 00000160
21 AVECDECK LItK £P=IELOAA,PARAIS L1STGPTA,LI5TDEV.PAGEI,VL'1 00000170
000056 47FB B070 00082 37 B RETOUR 0D00018D
38 SANSDECK LIf-C EP*IELDAA.PARAN=<LIST0PT5>LISTDEV.PAGE1,VL>1 00000190
000082 5&0D 0004 0D004 54 RETOUR L R5UPE.4(HSUPEI 00000200
55 RETURN ( 1 4 . 1 2 I . T , R C = f l 5 > 00000210
000098 «0 LTORG 00000220
000096 00000000 61 =VU«H>ECKJ
00009C 62 CHOP 0.4 00000230
00009C 63 SAVEAREA DS 16F 00000240
00001 64 RARG EqU 1 00000250
00004 65 RSAVE EQU 4 00000260
00005 66 RCKW EQU 5 00000270
OOOOB 67 RBASE EQU 11 00000280
0000D 66 R5UPE EQU 13 00000290
OOOÛF 69 RAPPL EQU 15 00000300

FIG IV-17Q Sous-programme LOAPPLI d'appel dynamique du compilateur PL/1


PAGE S

IOC OBJECT CODE AOORl A00R2 STMT SOURCE STATEMENT ASH 0 2 0 1 2 3 . « 06/09/76

00000320
72 D E F I I I I T I O I I OES o r . 10H5 DE CKIPILATIOM ET DES F I C H I E R S 00000330

74
*
7 3 1K»***)l***l*»W**W'*WHPHn**mr,m»n*M*n»nm****M****1'm***W<l*m'**tU**mWMm**
m
00000340

75 * PARAMETRES OE LA COMPILATION «
00000350
00000360
74 • * 00000370
77 CAS DU I A COMPILATION SE F A I T SANS DECK a » 00000380
0OQOE4
O00OE6
0700
0054
78 »
79 LISTOPTS
CIIOP
DC
2 . 4 00000390
H'8V 00000400
0000EQ D5C1C76B05C16BC3 eo DC CL47'tMÇ,HA>CSI60 E B I , C . N C T . M D . H I S , L C t 5 7 > , M 0 L I 3 T . l l 1 . ' 00000410
000117 D3D4E2C76BD5C5E2 Bl DC >
CL37 LIISG,NE5T.OPTf2^S>M0STMT,STG,IK.FfE> ,
00000420
62 CAS OU LA COMPILATION SE F A I T AVEC DECK «
00013C 0700 83 * CHOP 2 . 4
00000430
00000440
DDD13E 0057 84 u s T O P r A DC H*63' 00000450
000140 05C C76B05C16BC3 65 DC CL46'IIAG,HA,CS(60 EBJ.C.HCT.D»NIS.LC<S7l,HOLIST,HHV 00000460
J0016E D3D4E2C76BD5C5E2 66 DC CL37'U1SG,HEST,OPT(2»,S,tlOSTHT,5T6,HX,FIEr 00000470
67 N • 00300480
98 HOHS OES F I C H I E R S ffECE5SAlRES * 00000490

000193 00
89 « m 00000500

000194 0700 90 CHOP 2»4 000O0S1O


000196 0070 91 LISTOEV DC H'118* 00300520
0001*8 C2C905C1C9D9D7C7 92 SÏSLIH DC CLB'BIIIAIRPG' 00000530
0001A0 00©00000000f>0000 93 V1DE1 DC XL6*0* 00000540
0001AB OOOOOOOOOOOOOOOO 94 VIDEZ DC XL9'0' 00000550
0001BD OOOOOOOOODOOOOOO 95 SVSIIB DC XLB'O* 00000560
000108 EED6D9E3C9C5E240 96 5YSIM DC CL&'SORTIES * 00000570
OODICO E2D6D9E3C9C54040 97 SYSPRIHT DC CL8*SORTIE * 00000590
0OOIC9 OOOOOOOOOOOOOOOO 9B SY5PU1CH DC XLS'O' 00000596
00D1D0 OOOOOOOOOOOOOOOO 99 SYSUI1 DC XLB'O' 00000600
00D1D6 OOOOOOOOOOOOOOOO 100 SYSUT2 DC XLB'O' 00000616
0OD1EO OOOOOOOOOOOOOOOO 101 VI0E3 DC XLB'O* 00000620
0001E9 OOOOOOOOOOOOOOOO 102 VIDE4 DC XLB'O' 00000630
OOOIFO 0000000000000000 103 VIDES DC XLB'O' 00000640
0C01F8 OOOOOOOOOOOOOOOO 104 VI0E6 DC XLB'O' OC000650
000200 0000000000000000 105 SY3CIH DC XLB'O' 00000660
106 m m 00000670
107 NUMERO DE LA PREMIERE PAGE • 00000660

000208 0 7 0 0
108 »
m
CHOP
m 00000690
109 2,4 00000700
00020A 0004 ISO PACE DC H'4" 00000710
00Q20C 0 0 0 0 0 0 0 0 111 OC F'O' 00000720
000000 112 EDO LOADPLI 00000730

IY-17b Sous-programme LOADPLI d'appel dynamique du compilateur


- 257 -

La liste doit commencer sur une frontière de demi-mot. Les deux premiers
octets correspondent à la longueur de cette chaîne.
Tout nom de moins de huit caractères est cadré à gauche. Un ou plusieurs
blancs, à droite, sont utilisés comme caractères de remplissage.
Lorsque le nom standard est utilisé, les 8 octets qui correspondent sont
mis à zéro.
e) VL=1
indique que le bit de signe du dernier mot de la liste des paramètres
doit Stre mis à 1 avant l'appel.
r
Cela correspond à X'80 dans le premier octet du dernier paramètre de
la liste. Cette indication correspond à cell* de fin des paramètres
transmis.
Le programme-source se trouve sur le fichier SORTIES.
L'édition du compilateur se fait sur le fichier SORTIE. Le binaire
correspondant est chargé sur le fichier BINAZRl^G qui est transmis à
l'étape d'édition des liens en vue de l'intégration. Une copie de ce
binaire sur cartes est effectuée si l'utilisateur le demande.
- 259 -

Chapitre V : EXEMPLES.

V.1 . APPLICATIONS AUX REACTEURS NUCLEAIRES.


V.11. Cinétique des réacteurs.
V.12. Simulation d'un générateur de vapeur.
V.121 . Définitions.
V.l£2. Description sommaire du modèle.
V.l23. Glossaire des symboles.
V.12&. Résultats.

V.2. APPLICATIONS A DES SYSTEMES MECANIQUES.


V.21 . 'Modèle simplifié d'un train d'atterrissage d.'avion.
V.211. Notations utilisées.
V.212. Expression des forces élastiques et des forces de frottement
visqueux.
V.213- Expression de la force de frottement sec.
V.214. Equations du système.
V.215. Conditions initiales.
V.216. Mise en oeuvre.
V.22. Simulation de l'appontage d'un avion.
- 361

Dans le cadre de la simulation des réacteurs nucléaires, nous


ne citerons que deux tests qui ont permis de vérifier l'efficacité du
système NEPTUNIX. Nous avons testé la résolution des équations cinéti-
ques d'un réacteur nucléaire, ainsi que la simulation complète d'un
modale de générateur de vapeur Framatome type 51•
Des tests de systèmes mécaniques ont été effectués. Nous
traiterons deux exemples s la simulation d'un train d'atterrissage
simplifié et celle de l'appontage d'un avion.

V.1. APPLICATIONS AUX REACTEURS NUCLEAIRES.

V. 11. Cinétique dea réacteurs.

Pour la cinétique des réacteurs, la difficulté ne tient pas


au rang- du systba'ô (ici faible), mais surtout au rapport des constantes
de temps qui est de l'ordre de 10 . Pour un tel système, les méthodes
numériques classiques, lorsqu'elles n'échouent pas, prennent un temps
d'integration très long- (H3O\ , Qot] •
Au voisinage de la criticalité, les équations cinétiques d'un
réacteur s<mt décrites suivant la théorie à six groupes de neutrons re-
tardés par le système différentiel suivant :

dn _ p(t
-Sa* I a. c. + s
i=1
(V.1)
dC.
i -S n - A, 0, 1 à 6
dt

n est la puissance neutronique instantanée,


C, est le nombre de précurseurs du groupe i,
f(t) est la réactivité,
S est le taux de production das neutrons émis par les sources,
/3 «:-^ le pourcentage des vu -lirons retardés,
E* est le temps de vie moyen des neutrons,
AJ est la constante de désintégration radioactive des neutrons
retardés.
- 262 -

Le système (V.l) a été réduit en posant

= »{«).
n (t )
0 (t)
±

Le système résultant est alors

" - à w*>-p> » • I h h -P(* )


0

(v.a)
-— = X (PN-X )
i i pour i = 1 à 6

Nous nous proposons d'étudier le système préalablement en régime stable


soumis à une rampe de réactivité positive :

p{t) = p(t ) + Sk t (V.3)

Valeurs numériques.

2,8 10

5
0 g = 84 1 0 "
- 5
0, = 240 1 0
- 5
0^ = 210 1 0
- 5
0. = 170 1 0
- 5
0, = 26 1 0
+
0 = Pi 0 * ^3 p
+
2
*h **5
e

*1 = 14
A 2 - 1,61
X
3 = 4,56 ID" 1

\ = 1,51 io- 1

*5
= 3,15 io- 2

»6 = 1 ,24 io- 2
- 263 -

Pour la rampe (V.3) noua avons pris p(t ) = 2 10 Sk = 10 et


o
(Cf listage de la procédure CMNDE).
264 -

sts/st* u t * / u / i « n A M . « . M mxaut* HEPTUMIX DC RESOLUTION OE STSTDCS AUsu*o*asrfmxrxna

TEST DU EOMTtOKS OE LA CINETIOOÏ.


OTTONS ancznta

OUDUSI

EOmGH

TEST DCS EQUATION! 01 U CrNCTXQUE.

^ ^ ^ TEST OCT EKWTXCMS OC oooiim


BBOBBBtB
MS! nAXPUfS.S ,(tINIrtJR«l.|-O.0OUirw«m,U--II SOBBBBJB
ZKTEtVtlLEIIUXlr«l>7S >mHIHUWai eOBBOOAB
MECXSICHI Ï - - E I SB BBSS»
s m e w » c m s * * . ccmcMTAirtE M H M C M v w r u i t s - c o w n o w c t u s . OBDBBBAB
u v n u i comxriixE i i m u n m DU Nortsu oe c o a w m s i 8B8BBS7»
l » W , OWIIMTAWt CSTDUTXIM TAXLU-TASLl-CCgCS-IMTEfNtS;
DxnCH. CamCNTUHE pgu* *VTOJf 3W LtSTINS LA HM *CXl-é> ; BODBBOt*
OUDUSU. CaiKHTADII WW AVDIH SUt LXSTXM US PASES 'CX17' A BBBBBIOO
etx»je*( ccnoNTAiXE raw 'IKTECHTUH' vasts * c a - i » ET SUITE* I BBB3BU0
in* BBBBBUB
»ECUHTXSMf BBBBBUB
VAJIZJWLCSI m,xt.xt.x> !» » m i BBBBBIAB
satratmi BSIOSUI
vuuiu> nrt BSBOBIAB
samn WTI BBBB61»
rrtcnoHi cotciun IttttlM
IWTtB«»l,ja»l.XI«l,XJ«t.X**i X»«l^»il.TOT»-»^I»Wll
(
OtMtltS
if» MSMttt
•ItMUS
tlMSSlS
11 • A T — I I ISMIt»
•i is"-THOo«s»--»«a«i*r*-»wo*at--s«»** ITS--s»*»**»"-*»» i / i . 1 IBWIMS
-PN'*tetvi.ai mttat
MSIMAI
KTU>U"-f MTJ n i letrt
KTAAnii—i SETA MISSIS*
•> CSmDHMT.SM tllMlfS
•rot «••MISS
«ItMUS
iUPCAIft titssiis
ÏI . « ' * M ^ * . l * » K l l BBBSS1»
1
» i.*i*m •l.iinct.xs ; IMSBS4B
*' i . « H > w - i . t j « m ' X ] ' i I0BBISM
S> B . U l * m « « . U 1 . 0 t * - » ' l •MUM*
,
m u m
71 • .MI*"*»*-*.I11*«X*-X* 1 XeiBStB
•F». *M1B»I

COUPTLATION
- 265 -
TUT DES EOUATXOHS DE L» CXHETXBUC.

Hon v u t x i m TYfC D E C U I E ^ M M T X E / M t C M t * ! EQUATION

L D C A I R E t S O i r n E DENUBEE
toei « i l i H t a a i i too* o s i i M M MOT
uHEuitE.ac*nE DOUHBEC
0001 OEM
UNtACTI.MtrTIl HON DEMANDEE
e a u B i u «BSf
untÀ3Mt,aamM NOM OBUNBEE
OHl tOI3 MBS
UHcuHEiiarrie «OH O D W M I
BBDl IM* MM
UHEUKEiMtnf HON ODtWOU
0101 1MB I I »
UHtAX*E.MtTXE HON ODWCR
M i l MM «104
LXMtUflC.IOJTXf HON 0OUHBE1
• H I OMT HOT

TUT OO UU1TX0M Of U CSOIM.

vMBurcmsTWTt

>.HNIM)N •MHH» HON U n i l K E


•LtMIIKill • w w HOH UTXUtn
E.SMMOM-M BBB1
«.MMHM*M MB1
t.MOOMM-41 •Ml
MMIIWII •on
l.mflMMl oon
i.iMIMH-M em
MiimiMt
Bon
E.MHHK4M
•m
•Ml
X.MWtMMl SMI OMI
l.tllHfttMO HH Ml]

n MTAXUIS H U MMUTtOM TUT I

W U I W U T B IHVMUK» uAMtanm rcwnaHTi "L™*** °*"»_IA " • «

Tom « in

E au J I I I E M / Z H T B M U I O'XMTMU.TXSH/M* 9'WTtmujiavrmcssiatrmajma urn H i/EUHXHuraM/rm o u t a r n c a

7.MM0IHM1
l.lMMMC-f)
L i m m M i
••MMMH*«t
S.IMIIMf-M
l.f
MffTXZS TAJUUt* ET OUMC9 Of HtUTWIM

C0UP11ATIÛN

n» m n u u o s L'ÀHUTM
• W I O'EXTWMW M U «•LXOTHEM
- 266 -

i LOI DE VJJttJtnOH DI L'PfTXK WT '

SOUKI u r r o *

(«OT.HOTI oie ruurcuit


•ccttat' NOM Di u Mocawi BTCLAREI omt LE L A W I I
iteon • LH putumi unu -tor' .nucnvirt iHjtprti
M > m i i m i ET UNI m n w *<WT' TCUI n i a n a

OECUMTtOHi m m i A
DCL icr*t*i ate r u u n u i STATIC IHITI
UE-S.Ml'I.ttH-liSlH-lilTH-I.ME-III
KL UlTFt MC FLOATIU) ITATXC D m u . K - O I
KL «i» DIE FUUrUll STATIC IHXTKII
KL J UX TXOO tHCTIVJI
KL rMLTM.UnuiI DEC PLUTtUII
KL 0UUT i n i t l STATIC INCTI't'tll
u ( court THU oai / • CALCUL D I 'sun' «J M i m n * m i » /
DESUTCS'II
KltMl
DO J»l TO *t
MW*UM€T*tJM
ENOI

. . _ - — • • • • TSâimorr > SAIM


DELTJK>>:. IE-M.lt-4«Tt
lETOUMMT •IMLTAK-**tr/UlT(*t
iront >
RCniMKTOUIll

FONCTION EXTERNE

Ï M I U T O H oi srsnws *Lanm-oirrefEHTiELi

L U ratAMnca ei et W > M I m r r

« ou n o n «ma

u u u IT

VECTEUI «tnUTÀTTW COUMMI

W"M1 K l IWJ11MT1 TOTAL'


NonHi a n ILUITHT» OHOIHH
I O O * I DEt ELUIEHTI «ira»
ÛRSONNANCEMENT-TRAPUCTION-PRECOMPILATION

nu ai L'AFVEL OTIUHHUI DU m»iUTiu*


wicu» ou COM «newt *i» L I CDKFILATEU»
- 267 -
PL/I 0PI1KLUM C B H U TCTT H I mUTIDKS DE U SIWROUC.

ruaca U V M T

TUT OU EKUTKM 01 U «HtTIM.

(•CtD.IF.tl.lX)

OEFM&T >imt(«t STATIC!


DEFAULT RUSrilPl m i t
OtFAUlT UHHIIW1 DK FLOAT!
Ml (K.IO.IP.»>«C! UHBtB FLOATIUH
KL 1 VUIUU MJUIIFV».
i HC ate FiMTtiéit/» i*'
i n HC PU»TIUl./a I*-
t a MC PLHTtUl./* *U
~ ' DU P L U T I U I H " «I
HC F U U n U l t / a »"J
KC FLUTIUW» **
Me FLOATI!*!./» T^
I iOT HC PLMTCU-ll/B •«/
• OCL 1 BEUVR UUBIMOI.
t H M 1 MS FU»TTU)./MN
t MmtNcri«itui./«a
i M M » MC nvmiit,s*a
t «atCWHC PUATCUI./>XS
t <aootf « e FLO*ni»i.>"x*
t tagtM CfE FLMTU*IM"X1
t *a«HTDEC FUUTH*li/*X4
t « M H K C FUtTtUII/MOr
a DCL 1 CaWTWTt IUI01MC».
I tC«iat OIC FLOATIU».
S « M M OIC FLOAT!!*).
t « c a m oic F U U T I U I .
t tCSIMDEC FLOATIU).
t « c a m oic FLOATI 1*1.
t «CIH» OIC FLOATtUI.
t «C»HT OIC FUUTIUI.
a u r n oic PLMTiiti.
t tcattvotc FLUTIU>.
f U N U DtC FUATIUI.
£ WttU OCC PIHTIUJ.
1 K i l l * OtC P10ATI1*).
Z *CMU DR FLMTIlil.
t K N W OK FL0AT1UI.
t «CfllSOtC PLMTIl»».
t 1CMU DtC rUUTUi),
t «cmrptc nuTtuii

n / x OFiuuiua) a a n n m IBUATJB» H

*n i a KL i aie n u T i u N K c FLDATIUI
) M I W a i H C FIDATIUItt

uran LEV iff

na i • (tc< « i . i r . i a . t x t

IF R t s r mm H I
1
FUIT» »'»!
MCaADMUCtllll/wlAM COWTAKTt *M K i l l
HI
m «irtoin/Ktaaai
tat T)«tciip*/te»«itt
itt aiPiesiPi/icaaiti
itt
*tt
*)iietiB*/f'.Mi(t
tai>K9aar/tcHt«i PWRAMME ENGEimE
tSI U1«CM»»VIC*0I»I
«ai l i i w w m s '
«it i s i r t c a a u i
III lTKfCtaMI
it-i i f i r t c i a u t
It! ttlrtCMUl
1*1 tll*ICM17t

• • • i t mun i
268 -

PLSI oFnmziM c o r n u » TEST Of S EOMTIOM 01

(IC.W.IF.I1.IK1

m UI*-IICMIII*IIIJII
«i ntbiMsaui>*i(3ii
(II ttl*-llGMUl**lt31l

« M I S RETUM

»CI WTXKItXHS CEnPIU» HJT s i * tournera on t* CNHIQ».

itc.H.tr.ti.ixi

HI .«HOT •»l>l

131 UHM E

«F( tl«-»»#tt**CMlt»m -tatlt'Xl

m iweua*m -icBBii*a -MMI»

tft 4IMCMIUM -KHIUK] «lOHMt

wt sincNiSHM -«munet -leiwii

*tl tMtCMU«n« •NWIWI -MUNI

*ri T)iieaiiï>M -KH17MC* -ietM7t

ft u>conar><rr .m uni

i w loacuT

PROGRAMME ENGENDRE
- 269 -

TOT m nuinora el u CDWTXWE. kt Mtisitn

FM SI MTUMMI I.MHI-K
Td»> MCTIAL

Miiuxau) i.MMt-U
t.NHMI

MRVMUIU

im» BE» VUIUUI

• KWXMU noantt * row • maut • ram •

i.iraii i '.HrtCrtl • l.Mt*f*M 1 t.MMCtM «


• WT • T.tMMtll • I.MMiN •

I.Hf*E<M •t.«14Mt*l t . M U ' ••'• IUI>M -*-:mi>*i


i . xt m m X.«t»JX*M -«.«MHtll 4.M.IC -i .zntfM -4.JV4*(<«1
i. IMtt.il l.Mtlf.if -•.mil ill «.iiKt't: .«»:ti«M •*.;;noii
«.MHtiM M1HKH •f,NHI*ll •.tllll'll ,;M*E<M •4.1*1 l f . i l
l.ltMUM I.IIOE'» •t.TtWt'fl «.Mift'il -ïnn'H •«.mtcii
• .llill'H l.«ttt*fl -*,I*CH**1 «,nm<n •llUI'ti •*.ll*H*ll
• .MM I ' M i.nni>N -+-•7111.11 «••IMOtl -1IWH •«.tCI>t*ll
1.IMMI i.at)n*M -t.iim.u «.41KKM .:*J*EIH •«.HlTlill
t.UH«M L.MStfMl •4.41UKI1 t.NMI'M .:«JIi'« -«.»TH*I1
T.UHKl? •*.MFTE*II I.MiK'll .ICHKfl -«.llUll'il
T.*IIH*t(
l.«ltll>H
».«»»•!•
l.MlllMf
i.*im*H
-•.MTtE'H
-*.»JMt*tl
|,UMt*«l
|.ttHE*tl
.lllTEtll
.HMItfl
-«.ll*JI.il
•T.lTMt'il
f.liOM+i» r.M«ti*«* •i.ntjfii l.tiOII'll ,KKKN •i.*tin.ti
l.lLIHtlt i.MiUta* •i.tmim I.MHttll .!]»£••• -T.tait.ti
1.0MH.il l.MTHtM -•.MITtHl 1.M M EM1 .n*«»« •T.WlKtl
1. l M 9 l . i l l-IIUIMt -».*aiE>*i l.niMXI .MtllXI -T.ITHt.tl
1.U1H<H i. c m i . i t -«.«•mm I.ltltttfl •>trit>M -T.UMitU
l.lligtm l.CMII.il •MnMMi |.*»tK*«l .3H*I**I
1.3MK.il I.MEIHH •*.»»i.n I.n«EI*tl .ltllf** •T.K01E*H
It t.**llim t.tlHKH •t.imitii f.#l«M'«l .Kailtgi -T.?«Ht«0l
l.llllttll l.lTltltH • •.JHIItll >.it«aitii ,]7^1>l* -7.7^»I.«
«
M
M
l.iliOKil
I.HHKI1
i.mirxi
t.intKM
1.ITHE*H
l.ltME'M
-t.l**II»U
•i.ltttl.ll
-«.niTim
t.MIHtll
«.I1C1K11
t.Uttftlt
.mTixt
.)M)I>I»
.iim-ii
-T.nirt.il
-:.»«H*ii
•T.ttnt>ot
tl l.llMf»! l.lHlt-H -•.intitii *.»CII*tl .»»»(••* -T.*]«Jlrtt
l.VlMfttl 1.IKJMI •*.U71E<» i.lHIIttt .«in»» •r.tim.u
E» l.WKI'CL i.imi.ii •t.UIIKM t.ltlllOl .•l(Tt*l> -f.lilTt.al
tl (.MICE tit i.ntrt.ei -t.HUKM IxLîûEill .*:*M*» -T.iicrt.tt
C.I1HI.*! I.lOJJt'OI -*,»m»i t.Milt'Il .*)1.E*H • Minitel
t.UMIXt i.nnE'Oi •*.!»»• M • .HUE*» .—1)[<" •r.*««»(.ii
1. I I TBI*» i.mii.ei -*.lltlt*ll ». llCE<tl .—,lfB)
»
a

IÎ ;.H»[*fl I.UHKII -«.ttt+f.ii t.ncacui .•fill.M -T,*nnii


11 I.aldEHl 1.1)911X3 .4.<tM*<ll i.T*ME<Ct .•4111'f* -r.*i»7!'il
:.nt«i>4i l.UIMII •l.*tt<l<ll *.MIIE*« ••IH'II -r.jtiu.il
»*
11

IT
i.HHIXl
I . M M l . CI
i.nwi.ti
i.u*n*«a
l.UfttMi
I.urn.»»
•l.flll!**!
-I.MHEttl
-i.tnttii
•.1lt«E<*l
T.UME'll
7.ttHUn
.«TTTEtM
-M)tE<B*
.**Jl(*9t
•T.171*1*11
-r.jjjrt.ii
-T.llT*t««
1» i.*i(n**i i.itm.e* 4.I1I7C.I1 i.unutx .IHtl.H •T.EKlEtll
1* t.Mwm L.lMÏItC» •a.u?*t*u T.:IMI>*I .i9*tf<n -MlklEdl
t.Hietxi t.lMMMI -i.raju.et T.11Elt*CL •K:*f*ei -T.Itttt.01
I.eXICIXl t.umrii -#.7MJ|.0l T.u«gE>« .i;toi*n -T.aart.oi
4t J.lKCiXl 1.IMU.il •*,7:ititei T.MHIMl • llMIMI -T.ITWE.M
l.USCI'll i.ikrjt.n .*.71071.11
i.tteeixt L.mute ••.*7JM*I1
j.nct.ci l.17Tll.lt i,isni>ii
1.1IITIXI -l.ttlMtll
i.:>»!••» -«.ttiite.ti

IB
>-*»»(>•!
Ï-J>»l>ll
}.»1»E»J
l.Mise.oo
i.l*?:>>»
•i.itr*i>ii
• t.IMtl.il INTEGRATION
l.r.titoi (. » « : ! • • ] -i.ii-je.oi
11 J.TWfT.il I.£9TM*I3 -4>NtIlll
It JII«3t>(I i.mmos -«.LtDTt.Ol
It J.tJlJdlJ i.:if;«t« .*,«:(!.11
1* • -4KOK01 i.;;nt.oo •«.•triKii
I» «.etgeoii I.:EIIE*M •«.»*)E>I1
*.!•(! )l.11 l.iMOIi» -l.IMtl.01
IT +.:ir;«.« I.:Ï*TE>» -I.JJlTl.dl
1* «.JtfGCïl Litmus -«.)SIDt<«
- 270 -

1 ! I>--
1 1> - i
1 i i >1 1 i
1 1l - r i i
...---t"T M M M i M
*.:&••• i.:u*«t i.ut*«i t . u n n j.ui*n i,Tn**i !•*! *.m**l I.3H*S1 t.KE'IL *.Ml«l

i t i i : : i i i : : •• » i
i i t t t : i : î i • —i i
i t i i r i i i i «i» i i
t i i i t i i t IM« i c :
I I t 1 I I t t *» •! I t 1
i i i i : i i ia**i i : i
i i i i t i i » • i i i : :
t t i i i i ***i i i : i i
t t i i i . • i t t : i i
i t i i i •« i i i i : i i

: i t i w* i i i i i i i i
: i : « » x i x i : t i i
t i i •• i i i Ï i i i i i
i t ">i i i i i i J i i i
i >IM i t i i t i i i t :

• » i i i i : i i : i t î

4.2»*aB [.:«••«! i.i»(*M :.*«•« i . l i m i i.n(*ti « . m o i *.*tt<si s.sn*n «.iit»*i. ».m<ei r.*»i«

Î.VTEGRATIÛN
- 271 -

V. 12. Simulation d'un générateur de vapeur [B6O| , [pkoj .

NEPTUNIX a été appliqué à la simulation d'un générateur de •


vapeur FRAMATOME type 51 décrit par le schéma de la figure V-1.
Le modèle mathématique correspondant est un système algébro-
différentiel non linéaire de rang 78 avec des constantes de temps très
séparées.
Avant de présenter le modèle mathématique, commençons par dé-
finir quelques termes.

V. 121. Définitions.
Le DOME est la portion d'espace limitée par la vanne d'admis-
sion à la turbine, la partie haute du générateur de vapeur, le plan de
sortie des séparateurs-sécheurs et le niveau de l'eau dans la chambre
d'alimentât!on.
La CHAMBRE D'ALIMENTATION est la portion d'espace limitée par
le niveau de l'eau, l'étranglement qui définit le début de l'espace an-
nulaire d'injection, la paroi de 1'évaporateur et la paroi externe du
générateur de vapeur.
L'ESPACE ANNULAIRE est limité par l'étranglement qui le sépare
de la chambre d'alimentation, la paroi inférieure du secondaire, la
paroi de l'évaporateur et la paroi du générateur de vapeur.
L'EVAPORATEUR est limité par la partie basse du secondaire,
par les séparateurs et par la paroi cylindrique.

e
V. 122. Ç .22£iE£i25_£255âîE2_ÎÎ!i_52ïÎ2i2 *
Le modèle correspond à celui décrit en Il est détermi-
né par :
1) les phénomènes thermodynamiques dans le dôme représentés par
un bilan de masse, un bilan d'énergie et un bilan de volume ;
2) les différents états thermodynamiques du mélange de différents
courants d'eau liquide dans la chambre d'alimentation ;
3) un retard et une perte de charge pour l'espace annulaire ;
4) un bilan de masse, un bilan des énergies et des équations entre
les entrées et les sorties de 1'évaporateur ;
5) un modèle point pour le primaire, dans la gamme de variations
fixée ;
6) une boucle de régulation de niveau.
272

«Aw-....

_9ii!r.!hi?Ss:.._...J...

.îlîfKiî. .îftWîîT*.

FIGY-1 Schéma du GENERATEUR de VAPEUR


- 273 -

s e e s
v. 123. §i25 .âi£2_.É .2_£ï5È2i . .'
Le tableau ci-dessous précise pour une même variable :
- le symbole mathématique (colonne (1))
- le nom mnémonique utilisé pour la simulation (colonne (2))
- la signification physique (colonne (3))
- l'unité (colonne {k))

Symbole ^ ' 1
Nom <> 2 (3)
Signification physique Unités
mathématique mnémoui lue

PD PD Pression dans le dôme bar


P
d PPD Pression en bas de la colon.- bar
ne de descente

P
h PH Pression en haut du mélange bar
P PBI Pression dans le îuélange bar
HI diphasique

Û P DRPI Perte de charge dans bar


8I
1'évaporateur
MVD HVB Masse de vapeur dans le dôme kg
MLD MLD Masse d'eau dans le dôme kg
qpv QPV Débit de vapeur entrant dans kg/s
le ddme
QSV QSV Débit de vapeur sortant du kg/s
ddme
QO Débit de condensation kg/s
«0
QAL PAL Débit d'eau alimentaire kg/s

QR QR Débit recirculé kg/s


ajs Débit dans la colonne de kg/s
*d descente

Q Q Débit total sortant de kg/s C


1•évaporateur
H
CA HCA Enthalpie de l'eau dans la MJ/kg
chambre d'alimentation
H
d HD Enthalpie de l'eau en bas MJ/kg
de la colonne de descente
- 274 -

(1) (2) (3) w


H HD Enthalpie de l'eau en bas de MJ/kg
d
la colonne de descente
HRI Enthalpie du mélange dipha- MJ/kg
«RI sique
B H Enthalpie du mélange dipha- MJ/kg
aique en haut de 1 ' évapora-
teur

Pcx P.0OA Densité de l'eau dans la kg/m 3

chambre d'alimentation

?KL ROEI Densité du mélange dlphasique kg/m 3

a ALFA Taux de vide en sortie de


1'évaporateur
ALFAEI Taux de vide
«HI
•c TO Retard entre le haut et le s
bas de la colonne de descente
D D1 Paramètre de contrôle
1

D 02 Paramètre de contrôle
2
N N Niveau d'eau m
WPS WPS Puissance transmise du primai- MW
re au secondaire
T
PM TPM Température moyenne de l'eau •C
primaire
T
T TT Température des tubes •C

«LS^ » 1 HLPD Enthalpie de l'eau à satura- MJ/kg


tion à pression PD
HygCPD) HVPD Enthalpie de vapeur à satu- MJ/kg
ration à pression PD
HLPRI Enthalpie du liquide saturé MJ/kg
«LS^Rl' a n P
RI
p HVPRI Enthalpie de la vapeur satu- MJ/kg
=ra< Hi) rée en P-_
H^Ph) HLPH Enthalpie de l'eau saturée MJ/kg
en Ph
i
- 875 -

(1) (2) (3) (4)

H^Ph) HVPH Enthalpie de la vapeur satu­ MJ/kK


rée en Ph
X X Titre de sortie de l'évapo-
rateur
dHLS/dPD DHLPD Dérivée de HLS $ pression MJ/kg/l -ir
en PD
dHVS/dPD DHVPD Dérivée de HVS # pression MJ/kg/bar
en PD
dHLS/dPjjj DHLPRI Dérivée de HLS # pression MJ/kg/bar
e n P
RI
dHVS/dP^. DHVPRI Dérivée de HVS # pression MJ/kg/bar
e n P
RI
dHLS/dP^ dHLPH Dérivée de HLS % pression MJ/kg/bar
en P.n
dHVS/dP^ dHVPH Dérivée 'ie HLS # pression MJ/kg/bar
en P h

3
PLS(PD) ROLPD Densité de l'eau saturée kg/m
à la pression Pp
fvsCPD) ROTOD Densité de la vapeur à sa­ kg/m 3

turation à la pression P~
3

^(^1 ROLPRI Densité de l'eau saturée à kg/m


la pression P
3
'VS<P )M
ROVPRI Densité de la vapeur à sa­ kg/m
turation à la pression P__

fwfpfc) ROLPH Densité de l'eau saturée à kg/m 3

la pression P.
PvstPj ROVPH Densité de la vapeur à sa­ kg/m 3

turation à la pression P h

dpVS/dPD DROVPD Dérivée de la densité de kg/nr/bar


vapeur saturée # pression
en P D

J
dpLS/dP^. DHLPRI Dérivée de la densité de kg/ra /bar
l'eau saturée # pression en
P
RI
cipVS/dEVPjy. DRVPRI Dérivée de la densité de kg/m /bar
vapeur saturée $ pression
a n P
RI
- 276 -

(1) (2) (3) w


T SAT (PD) TSTPD Température de saturation à «c
la pression PD

T
SAT( P R I
>
TSTPRI Température de saturation à °c
la pression P_-
H HAL Enthalpie de l'eau alimen­ MJ/kg
AL taire
ROAL Densité de l'eau alimentaire kg/m 3

PAL
6(t) EPS Ouverture de la vanne
1
TEP Température de l eau primai­ "C
^EP re à l'entrée du GV
T TSP Température de 1' eau primai­ •C
SP re en sortie du GV
u U Coefficient de pondération
V V Coefficient de pondération

Qp Débit d'eau primaire kg/a


%
H001U DE SMMTEUt Dr VAKl»

TltT 01 U VOIIIDN t . mOCU Dl «HBUTCUt 01 VJIKM

MII aofintMM.Mt r u x s x i m . i i . rmraMtii.c-it


cemHTUiii L'onu D f a m i nut
XHTUVHUI riDmnrnttnumtnuBi
FMCtSIOHt 1.9--1I
onam
omtt*7«, ecwtm-AUK TOIMI o*tw*noKit
HumiMtt c o m m M n out n u vat. rr i n u a . i
ounum. eonHCHTiifi n u n i t s Kirarjicti n o ï s t i a i
BJITXOH. eowtHT»m ran u s r o a i
enfliMi COWHHTAIM n u t s n c i r i t i r i c r m »
irm
r& o n u m e r a DI c o m u n o r t c r o u o t i i n u M ou n r o i u n t
lOICUJfiTKK»
wwim.wo.M.m.ow.opj.om.Mwi
MWlWJ.FW.W.MI.DW.OM.DWtl.MVBl
v j u t u i u i ' tiiB.atv.ojv.ocont.at.oo.o
HCl.HO.WW.H.BHftUMWfOW.OMUDF.DHO»
•CC1.IKOT M.OHaWiALHH.UMOiiLlMUMM
DITTO» X KXX D»XO* TO 01 01 HI
VMI W T W t T K i n HVHI H t n i MVMX HIW
HVM m i » OHVTO OHIHIX OKvmi w i n OHVM l o i n
• c m n m i mvmx «Dim iravm oiravra cwtjtx i m m
TSTTQ TWIW DXOP Hit MAI HC IF1 TO
W M H
sonrut m n i ojv U L m x M un mn
e o m w r u m 'PONC..' FOHCTIOKI s n e u u s m T U T S cr
VAUUI 44MUJI
' V K . . . ' WHCTW 0ISTXMU A «TUOItt II CDTtW
TOflKT OU STSTIMI
rcNcncwt
racMUit racsH*!. raMcuts».
VIUtALI t I.VAUK1AC I ) • VIlHCt 11. IUUHI11 .VALTtn I ) ,
VAIQPUM
VWIMUT' U.V.TTTi.a»!
cammort
— . . . . . — WtTMUMTIDH 01* V U U I U S I
win w*j».*«,fw««.*ii.w«jf.iM.«ii»«-rTtu)««t.ittt"-ji
,
IHTT1 0 P 5 i » . ï * r - ! . 3 f « r « ï . n r t » - ï . m l f » 1 . 4 f 7 " î . m f i » ï . 3 " - H .
c»w*,r*w-:.wv**.rTirî^c»i^î-.a.au»*.Ttr*î-3i«T.Hri.
csuxrf.Ttfaattn.ra.HSi-i.inCtWit.iau^tii.xsst.Hit.wi
n
owcjumj . n v < i . o t a D m , s u > M M i B M ( . u r - L X C t i H I . »
nnp»-t.rtM**-i.Kiita»*r.tt«iH>tH.u7io>anp>ta.au>.
,
AlFAM**.»M-.*,ALH3iL.I£JF-L.AlMM.Mir -l.
o u w i F * . i ^ T » - . t , x*i.r>T-'-i.j<jn*i.dK4'*-r.B»iBr>-*.it4«--i.

T O T M u vtnjoH s . wofu n « H U A T K * 01 vtraar i

, ,
TOM.if*i^ni.c.ttr <n.oe4^aTT *i«tW«.oi
M I I un^M.tt£.m*H3.atiTmM.T»Mtn>t.2io.KVfl>*t.rM4.
. Nim»i.ei5^v«tnt.7ji7.H(jw»i.aM,KWHn,r»*i.
,l
0HVIO«.l.lir'-I MLMIia.SfH -1.0HVMIbi.i3*7—3t
l

«TT» DWLW«l.4I7S-*l.B(Vm»-L.UK".*.MtFO»TI».Ml
Dim «wn>>H.4TiinLnt*ri7.4*>iovMii».H<iatwint,m
m m tavm«M.niomv*a»r.4r'<tiDtima-i^M*<on-ma).jiir**ii
WTTI T t T W « t T * . t l . T 3 7 W I » t r j . M . 0 W » ^ I . T r ' - I j a t M . « W I
m m n«i««*3.aiNen.i.fpm.3tTip>ru.«ii
WXTI r j n t | t . t t , | | M W , U , ) M J I ] H , V M . I M M I
WTTt TtT*lf.4tt**.6PM>.fr'll
CWTfHTAIW
'•••• « H H t'DttTMUUTIOm
inn
mots otcunrxoM
L'OMI 0 » MCATTEMS M'lIT H I XMOM.
L'wewi mat»* m c m x n IMSUIMOT A T » of n c i u m us
v w m u n w » AVW u rojtu o r j t m u .
lUNUI'l
1> SfV*«C-4fV*HVfl'*HU'I
i> Ktmfl'iiHv«>oKvn<nfl"wini/(HLn-Hvn)«n'i
i
n oa-fiL-«i*«e»*.ii«iceji*N *DOCA'*U.U4MIII
f i nva<«ovn>'iti-<.it*Nii
t l F0HCTI(Q«.*,»U.I,IM,t.Ifm.#1I
e c r r a m n i osv-iti.THo*m/(feirrui3iTtTre«i73iii
,
71 »il -«.JiM<0iM)IV-tHI.'e9*M't«V-«AL'M
I t 0I'-IM"-J«fNC-OI-ll00rtl'>t
<l 01t|*01»HI
m Ho<MCi*rowuM
11< r0-4.«4»iaCA/00l
131 »F0-«MI0CJW(10.M+l.l*«t<t**.«"-S4<]H)1
n
!*• OFl-<i.*ï -i/t]*raui/»ot
in nt'n>*ont
i*> m*u**n-v*ire*onH
171 IOri-*U«HMOVF«-tt-*lHtH«0lPlt1
m efmiMMvm^otrtr)>HJtnfjF-âLfi»i»o»vFti-it-UFiJit)")ftF*ii f V l U P T ( ATT ON
, l , w i r t L n i i V t
HI ^cllOvrtr•«otF•t)'lotwtF•*trl•^ol^vnïHI-AtFJUl:)•o^lrtIl•Mt "
•i«r-«i/fH»rmn
:oi 4Lrio*«ti't.7ai(i>xiii)'(wovp«t/iaimiii
HI HFMHILfM.ïfll
111 0lMIFit»ir*0lî)-il.MI)»OMrrB*-X««itJ*HI
j i t *uAH-<tiovp»L-»oimt»t,r»j-ii«ox*niF
-t i . Ti/i ROLimi i a 11 •< j - w i i n RovPM»ottm-ioim»oiivrm ) i
£*l HO-*tn»*OVFH.It-4LrAI>IIOLFHI
- 2?8 -
Tttr M u v n i o N t . noons n «NBUTTOI n v

Mt ts> IMBW—i««M|*MiM»MMl'-tqBMB • « m w i / f T c w w n
«M ï»i mi-VW-Wtl
«f* (7> M W I W M M I M Ï M W M U W I I I
«0 lit jnlfflMMKMIlH-Mimil
««• tf« >M1>XI<II
IIM m MV-XXI
IMt MHtI-Mtni)MDtlVf«I-<Mim)l
lua n> AIHH>MII->O«U.ÏI"«MV«/MI*II>I.*I .
1M» JJI ÛH»IT*-U»#Hrt*-V»«tft
11*1 l i t tHVfH««ILMI»<tWr»<HVWHfUWI-<IIIM» a H W n i W M U f H f
MM I(HVM>MIMI|
tarn » • »'««•»•«»-«'i*i.7--n
un 17) M U D i N i a i i t a i M c i - m i n a m M c i t
UN Ml m-m»«.U"-f"U(.*"MflEI*W«IHI.O--MM/rT*ra>»>l*ll
in* »» raHen»Mtti.sa>**dii<i(otMZ>*it
un camomm owt-i.7T--4MAOTwoi»«uj»j"«iir»i/*uwi
UM *VK OXMMKM nflHllUiSM
uu *** raw*tum>.i.ca.t.«oei.*ii
X1M COmtHTJUIt 0M>l.3V*-MHMHMll»1.71t/IKm
UM *II i.i»TM*>t>mHftp*TMi
un cmaT np>t.si
UM «IllVt- MM *mTT-TimX!/tt.MHSIKXKMt/»WH
rot . commuât sruwtt
UM » m . wwi.w-i»ww—.av-i»M—•< TWWTI-MII
uu eotrar i»n.*«-* cMt.4f-i KVTM.W-S I T * M »
ttM *** «.r^—.*l*-*MT'->.JV-liMMMTWIirT>WWt
tm ntmrun merwrm
UM MMMtlttUMttllt
UN ttmuiuisiuiii
mi «nnudHciit
ttJi «•rauMmiiM
UM ••IVM.TMITM.III
UM HinHCSMtW.l.aC.tll
UM C O I W I i n UHMC-Htt AVR (IP MO<t TM< n U M t l
ut* irai
UM lUHUin
UM III MM - l . i l i r . l t (!**•)
UM *«T.«"*M" rn-Miit
UM -*.*--*•• IPjtMUl
UM -uu.ttn^-M*
urt nt m m -i.iu^<wni>Mi
UM *«T.r'-M" (Mt-MIlt
UM ~4.tr-U* (»*!•*• III
iMi •itu.3tfr<«ii >
uu n* H I M •a.éur -ixPw-Mt

UM •uu.mr4tt
IMt Mt KVM • t . M N ' 4 ]
1M» *l.t"<M« IK-MI I t
UTt • l . r * * » IM-MII3
1*M •Cnt.HtJ"**!!
ItM Ml HVMZ • l . M M ' . M M M I * * »
1M* *1.*--M« tm-*»Ut
IIM ,
•i.t*-*n ipii**tiu
un •t7M.Mfr *«ii
»M*4d ifn-Miii
UM - ! . « " • « » <m*MI|»
ISM -tTM.MfT"-*»
It» ITiOHVM *C.II«*MWM-MI -»J--*T» IM*Mllt
UM *i.uf"<nt
1M Ml MWW«.U*-M>IMI-MI-f^^W IMI*Mllt
UM *t.ur*«it
UU S*l MMW H.lg*-M»tM-MI - f . I - - m 1M-MIU
un «i.ur*-«3i
>
UM HIMMt »f.l»»-«f>fM-M>-*.r >«T» (M-MJlt
UM *f MIY**Mt B

UM tUMIMI •I.IM--MHMI-MM.r*-tM IMt-Mllt


- UM .i.mx»<«»
U» UtMIM •f.MT'-MWWI-HI-l.f-W» « H M t l l l
UM -I.IW**»
UM ut m n .*.*• M *I.II
ÏTM ** t *9mn*t.é» m «i.ii
ITM MI MVm H . * » M «fl.ll
ITM MIMUV «I.MM -«II
IT» i n «11111 * I . M M X -«ni
1TM MIMUK * t , t « M «1711
tTM tit MU«t*i.n-*«iMMt-Mi-i.rMMPn<Mtli*t.ini a
ITM 711 M a n * - i . u - * « i M M ^ M t - n . r * - M * i w > M i i t > f f . M t r > n i
17» niMVMl -I.M'*«lMMt-Ml-a.r^MWM]-MII<>I.IHr->«tt
ITM mnTM -i.mwM-Mt *i.r*-M tn-Miu • m . m i i

ÎSt "'"liESSrS:'!^.. CÔMPJLATÎOU


MM CVtWffMM CF«».*F*-I) •• i —
UM »tlMI.TMM»»Hl.W>/M«.MIMa.4M*MMM.MII
MM 7*1 «•(Mil
a
MM m TTrk-l.n n-*.M"-lMM1-I.S*1HP14M.Mnt
UM Tit VAlMfMtlll
- 279 -

V.124. Réaultata.

L'étape de compilation des équations ainsi que la dérivation


formelle opérant 3ur les 78 équations nécessite 6 secondes (IBM 360/91)•
L'étape d'ordonnancement de la matrice jacobienne nécessite
2,30 secondes;
La traduction du programme engendré en FL/1 s'effectue en
1,50 secondes alors que la compilation du programme engendré en EL/1
nécessite 27 secondes.
Pour un intervalle d'intégration de 10 secondes, le temps
d'exécution a été de 2,50 secondes. Les essais furent comparés à ceux
effectués parallèlement en calculant le jacobien à la main. L'aventage
revient au calcul automatique du jacobien par dérivation formelle. Il
a fallu plusieurs mois pour avoir un jacobien sans erreur dans le cas
manuel. Les temps d'exécution sont similaires.
L'axe des abscisses représente le temps exprimé en secondes.
L'axe des ordonnées représente la variable de sortie deman-
dée exprimée en unités correspondantes (Cf glossaire).
280

1 1\ y 1
: î
1 :
ï \
1 i
Z 1
z z
z
l -"

H
î :

1
î :
î î
î :
î î t
IW
z
z
I ••
I

I
I
«
. 1 _
I
•ï I
• ï I

*.MI*H 1.MM1 ! . m m l.HItU t.*K*U S.MM1 ».fjt*ll T.KIHl •.«!•**! ».fK**l l.mtlt 1.IHH1

z x t z t z i i i t i i * :
î : z z î z î x x t î : •* î
i t z x x x t x t x i î » î
X 1 X X X ï I I t I I î • I
X X X X X X X I I I Z I •• I
Z X Z Z X Z Z I Z I Z ' E I
Z X Z Z I Z Z Z Z I I » I Z
Z Z Z X Z 1 Z X I I I « I I
Z Z X I X X X X I I I M I I
X Z X Z I X X Z X Z I • I I

X Z I Z Z t X X I Z «• t Z Z
X X Z Z Z Z Z X Z I •» I Z I
X X I Z 1 X Z X Z I M I I I
I I Z Z I X Z J Z M Z Z I
X X Z X I Z Z X i » I I I I

I I Z I X I I I x w z Z Z Z
I Z Z Z I Z I I i " ! Z I Z Z
I I I MM N > I Z I I Z >*•• I X X I t

X I » I I I I I I X I X X I
I « ! I t I I I I I I I I I
I » I I I t I I I X X I I I
J • I I I Z I I I X I I Z X

f.fw*nj i.fw*n *.*nm i.fM*tL *.mm S.MML ***!••• T.mni 4.nim «.mtai L.m*u i.m*«t

l.Mftll l.fTKM X.HKtl *.m«« l.*M»*l t.TOIMl ».«!•« «.«Util ».HI*I1 l.ttftlt l.XfCtlt

TOTEQBA770H
281

Ï i«a • * » { : i i i i t : i t i

! ' « ' * * " "".L * ? * * 1 *


: î i i t i i • «i i t î :

[ î } [ | | | { ;"- •_ { [ |

! ' 1 ! ' • î • 1 ! 1""..!


*.iae»ei i.wita: t.«n*oi i.Mrtu 4.fti*oi f.wttn I.W«BI 7.*IE»«I a.*u*ai ».«e*n i.atitat i.iit<

mm i.Ht**i i . n u i i I.MEXI *.«t*«i ).wc«u « . m x i 7.m*n • . t u r n i.ttuti i.i«.« I.:H<M

o.tatos t . H i n i Il î . « t . 0 1 4.4 iït<ai «.«t«.u *.«t*«i i.atEtct i.i«.ai

INTEGRATION
- 282 -

I I Ï I I I I t I I I I •• • I
I I I I I t I I I I I IM» I
I l ï I I Î ï t l I I * " " !
i i i I i i i t : i i • •« r i
I I I I I I I I I I i"» i i

i i i i t i i i i i « " i ï Ï
i i : : i t i i i I « I ï ï
I I I I I I I ï X • « I 1 I
: ï t ï ï ï ï ï I » I ï ï ï
I I I I I I I X I « " 1 I X 1
I I I I I I J J M I I I I I
t ï ï ï ï ï ï i »•• x ï ï ï ï
i : ï ï ï ï j i«» ï ï ï ï r
t r i i i i i " » x i ï i 3
I I X 1 1 I I » • I J 1 X I 1
I t t X X X •!• I I I I I X
I X X X 1 I — 1 X I X 1 X X
X I T X X I • •• I 3 X 3 X 1 I
I I X X X I » X X X X X I X
I I X X I B M I I I I J I X
1 I X X M a i I I X X X I X
X X X I * «I X I X X X X 1 I
X X X X »•»• I I I I I I I I I
x x i MM ï ï ï ï ï ï ï : i
X X !<M • I I I I I I I I I I

t.flltM X.tU*u I-tTMl l.HEtll 4.Ht«ll S.MKU •.flMl T.«I*I1 «.«Em 9.TM*I1 l.lft*K l.lMt

.mm i.Hf«n um*n t.ntm *.nt*n s.«*t*u I.IIKU T.wm «.mm t.twtti i.m*w i.m**t

*.ftl»tf l.MEtll i,*n«ll l . W m >i T.4tl*tl l.ttttH f.WOl l.lflHI l.lTOti

IMTBSMnOM
283 -

V.2. APPLICATIONS A DES SYSTEMES MECANIQUES.

La difficulté de ces deux tests ne tient pas au rang des


modèles mathématiques les décrivant. Ils mettent en oeuvre soit des
équations qui changent au cours du temps soit des discontinuités.

V.21. Modèle simplifié d'un train d'atterrissage d'avion.

Nous supposons
- que le train est unique, de masse m +

- que le fuselage de l'avion est rigide de masse M


- que toutes les forces sont verticales.
L'avion roule à vitesse constante sur une piste sinusoïdale.
La liaison entre le train et le fuselage de l'avion est assi-
milée à une combinaison :
- d'une liaison élastique
- d'un frottement visqueux
- d'un frottement sec.
La liaison entre le train et la piste (le pneu) est assimilée
à la combinaison :
- d'une liaison élastique
- d'un frottement visqueux (Cf figure V-2).

V.211. No^tions_utilisées.
M masse de fuselage de l'avion
1
m masse du train d aterrissage
Z déplacement du fuselage de l'avion par rapport à sa position statique
z déplacement du train par rapport à sa position statique
e enfoncement du train
h hauteur de la piste
P force de liaison entre le fuselage et le train
P effort des pneus
Zç déplacement du centre de gravité des deux masses M et m par rapport
+

à sa position d'équilibre.
Z8k

J'
FIG V-2 Train d'atterrissage simplifié
- 285 -

ues o r e s
V.212. Expression des forces fil52*iq. „et_cles £ £ de frottement
visqueux.

Liaison train-fuselage
liaison élastique Ke
frottement visqueux K. e (de signe opposé à celui de e')
Liaison train-piste
liaison élastique K (n-z)
frottement visqueux K (h'-z*)

V.213, Expression de_la_force_de_frottement^sec.

La force de coulomb a les particularités suivantes :


- elle est égale à une constante F opposée à la vitesse d'enfoncement
e' si e'?*0 (le train est dit DEBLOQUE)
C
- elle est égale à une valeur comprise entre -2F° et 2 F si e'=0
(le train est dit BLOQUE). Dans ce caa, les deux musses sont liées et
leur mouvement est celui de leur centre de gravité.
Les conditions de transition d'un état à un autre sont les
suivantes :
- le train bloqué se débloque si la valeur absolue de la force de
C
Coulomb est supérieur à 2F :

C
I F - Ke | > 2 F
Le signe de la vitesse d'enfoncement est alors celui de la force de
Coulomb.
- le train débloqué se bloque si la valeur absolue de la force de Coulora
1
est inférieure à 2F , au moment où la vitesse d'enfoncement e passe par
zéro. Cette force de Coulomb est calculée en supposant que les deux
masses suivent le mouvement de leur centre de gravité.

V.214. l;3uation^ï_du_S£3tème.

MZ a F - F (F valeur statique de F)
e * e" + z - Z (e valeur statique de e)
- 286 -

Si le train est bloqué

c
(V.5)
pour e< y, 0 F = K e + K . e + F
8 c
e t pour e ' * 0 F = Ke - K, e - F
m £ (F F
+ = p "V " ( " F)
F = ¥ 2 +
P p* KP^" ) K (h>-z')
P l

h = Œ(1 - c o d a i t )

Calcul de l a f o r c e de Coulomb, t r a i n bloqué :

Le mouvement du c e n t r e de g r a v i t é des deux masses e s t donné par :

(M - m ) z + G = F p - F . p

La f o r c e de l i a i s o n e n t r e l e s deux masses e s t :

H (F - F )

D'où la force de Coulomb

F - Ke = F + M + IB, (F -F ) - Ke J
P P v

V.215- Conditions initiales.

Nous supposons le train bloqué et la force de Coulomb nulle,


z = Z - nsO z' = Z" = h' = 0
F * F = Mg
e = -e - gF .

V. 216. ^S£_en_oeuyre.
Les grandeurs sont exprimées dans le système MTS
DFP • Fp - F_
e
P
ozz - z'
- 287 -

DZ = z"
1
DE = E
Il est une fonction explicite du temps. Elle est décrite par
une fonction externe appelée PISTE. La fonction FONC décrit l'ensemble
(V.5).
Remarque.
Afin de permettre une gestion efficace de la logique, non dis­
ponible dans le langage NEPTUNEC, nous avons signalé au chapitre XV, la
possibilité de laisser le soin à l'utilisateur de le faire au moyen
d'une procédure APLTJTXL. Cet exemple est uno illustration de cette possi
bilité.
288

TWAIN o A m t t m M z s w u m

T I U H o «rromisauf tarant iMmii


ITOTO* MBHKI
HttratMl-«4tRU»l--tiOEIMt"-lI MIMO»
IHTCTV»LlEItaNn.K*X»ll HlflOM
nteisiONti"-ii MHIIII
OFTUKSlOrBnM.tDITl(M,QUIHUCiCOU(KSiHf MNNH
trot
iDictMinas m u m
VMIUUS>ZZ.Z,t.K>flS.eZir.»F*.Kl MHMM
sovms'Zz.e.Ft twiun
iKnuuunwuFMHtCM.K» imoin

HIU0/«.*tl«OZZ' - F « « H | MIM17I
M - t.it» *ZZ-Z I MHIIH
lIFOeif.*.I.*,«.»» IHHltt
4lflB/t.U>*DZ' - WF * F - 4111 M0H2I0
J1DFP * ItMMZ-Hl * TWZ'-H'ÏI CIMUU
«WSTIIH.II; aieinii
7'OZZ • ZE'I NHBNI
•IDZ -VI IMMZ4I
t:DE - (*f IMtOZM
iriM. NMHI

COMPILATION
- 289 -

FL/I onitunro connu* * PLUTXU n K I BfKVK. F, . n e u r.DBUv .J.VIUVP. • x I I

«we» u s i n a

i lFlUTELiFF0SIDEFIVX.Fil.iraHP.lNacUFiSiV4LEUt.XII

• i n m n u n c H B B ruMtnwcs
» BR FlQaTIIIIt /•OEttVEE OES VMM l « •/
> DIG flOMIItll / • rant BIS totuncNi «»•
» etc n u t u t i t / • * i a F 4 » EXPLOITER «/
Ill 1 0 DEL /* VMIUU3 "•
151 1 « BEL VUtUlla! DU FLttTtUlt
1*0 i o DEL antor am f i x a i
1TB I * DEL ttSULT l i m i t /••llDUUr.SIFU
/•OECUMTTOH a » VAIEUL» IT RDIEIIELVI « HEFTUHK •/

I» 1 • DEL T DIE FLUTtlk» EXTI/<TtmiV4tI4SLt DMFDO.)*/


ue i a K L ntut « c ruurciti Exrt/MOtFi FXIUI o'ixnGuncH»/
no i • DEL jsTâtr m i Ftxra EXH/MUCT n m n eua APUITII»/
:«e i a SCL IVTIL UNFIXED Exn/>iisErufBE DTH F U U M •'
/ • s u m e i t N n m oiw wuirtt»/
»• i a ni OLKT UHPMB txn/t n ïuniM.iirai -i» • /

nt i t «i Mis ate riotTti») EXTWMI o ' l m B u n w •,


n » ) DCTI/WM rcunui •,
DCL WUX DEC FtOlTIJH L _ ..
DEL O W H DEE F t C J T I l t l IXTI/M1SDE CDtMKUt •/
cdcoxniu Quaiu txTt/*imtM*ait ou earmi */
/ « i t u u n c m n o n » iu n c i u n t
in,n.For*.nt,mLPoaa,mt.rn) mi
/otamutm »t
ite l a DEL * DIE FUATIIII HHTCglSM /•*«DIW •/
u DIE n c i T i u i nnnian /••mminnir •/
DIE FICHU*» mnm.im / « l a i rustw
i « t > DCL • R Ficimu num.iitiit /turn mix •/
«II I I OCt DIE FLOXTIUI umitian W » L WIT. K F «
MB 1 I DEL

tit 1 • EEL DDZZ


(ID L I DEL DE

4FLUTI H FMEI « H V K . F I. 2EMF. DK4 LP • I . V» LtUt .XI (

Ml • OCL ODZ DIE FLOU t l i t UnDfFDOEll / • DZ* •/


I » 1 BEL ZZ DIE FLOlTtUI IlSEDIFEZ);
/•VUIUUS LD3I9UI1 */
Ml I OELTVlUn DEC FLUTfiei 1IIXTIIII /«UTMIN IL09UC •/
Ha • DtlïtPWt C1CFLOAHUI IIIITIBII A t l W 0! (' •/
/ • v i i i m n iwrEiMoiHxw »/
Ile B «El DF DR FL04TIUII ."OISCCNTIWin W« F •/
*W a OCL FFC oie F u i n u i i «POSÉE oi couion *t
/•ilVttl •/
a OCL ETtDISI L4IEL «UTEtUTIEl

*t« a
«
CCL urttr • » FIXES noriaii/MUE» Mtsut
FIZiiDM(Xtl)ll
•/

**•
«IS
HI
1
a
FFM0D»IXI7))l
Fnisciixiim
in e nFFiicoaixi«i>i
m e FCE>i9HixrititFDn>iDationtvKi]>M
**• • Fnu'toeicKKvxuiji
lei • FDOZZilO«IIDniVX(*lll
na 1 10 TO CmiDOHFII
Til a manu
IF -modi/ i tun u t mm WTILIII/*O DUNCE O'UH 4FFEL auF«Ltnc
/* a 1FIUTIL
ne a I F catniv • •!• i IITJRT • i TOEH invmi

ltKIF(ai.C0L(T).«.C0Lt»).4.EOLtlLI.*.C0LI*I)>A>COl(m
COLriTl.l.CDLini.A.CDLt» 1,411
•» i isninii
lia 1 ItTUlKt
es» • tnodiittnmi
ITD • ETiaiin
IF -D0G4LF THE» RITUIlIt /'El H'HT Fil L'JFFEL OC 9I1VT*
aie 1 IF IlUKTte THCII tinmil / • « N'ISt FiS L-4FFIL 9UFFLIM.*
aie a eF'i.i COMMUWICAnOW AI/EC LE
•ne a IF m i n '».»
TNEII /«TllPI |LCm</
S/5TEME NEPTUWIX PAR
na i rr:tFL>K>Ei
1 IP HJIPPEt ) HFC
IHEII /•CIllOIULSt DU Tf«t>H/ UN LANGAGE PROCEDURAL
C9I
n» : TsiiMu.:
1EE0 t IWtïftttlUTKlt
C DP»>ItlKteiiPC-PLl
« M : «ai
icie 1 tlOI
a El» /•ttAIll OEILCWI*/
290

FUI ormaQw connut **umL!raœitnrm.p,»,iieMF,D«c»Lr,»,vjU£Ut.X!t

n (lUIOtl > l . E - U t S I M E t E < ni


THÏH / « • H T F U S E E MR ZERO*/

ïlfl ï « rFciFStt K/IIHHT > i t o t r w i i


uai 1 E it uttmi < e»rc
ÎHïH / • t L M U A I t OU TOUH»/
Mi
1111 1 S TUlUKKt.I
IMS ; s ncMit'i. ;
IIS» l S W «rrC4ICH-FI.SK.DIlH. I
XJtt i i VOi
U70 i i CUE
DOI
nia 3I9KK>t»Kt)Ell
us* DFtSmOE«t.«FCt
m» DOI
EWt
11» DOI
11*0 ri«rL*Dri
îa» vozz*taz*srm
DSZWDI-OTiTTT:
ut«

COMMUNICATION APEC LE
•SYSTEME NEPTimX PAR
UN LANGAGE PROCEDURAL

Fi/i o p i u u z n o c o n n u * *rurtiLinwciiiBHvx,r,»,iic«)r,iiec*tr,i.vAuui,xii

MISE* LEV HT

mi i i roretrmmrF.irF.iE.iEi.ME.icfi) « H U M I D E C m u r i u m
U4I 1 I KL FF DEC r i U T I l t l l /»MXCE t*/
ini 1 I KL M OEC FLUTIUII /IEHFOCDCHT ! • /
IHI i i KL irr BEC r u u T i u n mumi u m i u t oiraci/DM/
un i • KL MB n e ruuTiuit mntm mmtm omne»/nf«/
1JH 1 • KL Dfl KC FUUTIUIf /•UTTEMI B'tHFOCtWHI M*/
im i i KL fou n e ruMffitit / • a m m FMTKLLC atracivixoii*/'
1*M 1 • KL «ET flte FLUTtUlI / m i U * H U NOM R M V
Mit i » «ir«T»iiMmi»a.-TFttBt»»(Fwi«n.iaw(«iaootï«nrciii
1*JB 1 • fFFil.-TRILWI
IM« i • in>.ii,.rnuiiik*;i
i*i» i « tmrTnta*-iau.-min>*i»Bf««i>mi
IHI 1 • RETUMtRtTIt

IMt t f rïJTEtEHTRïlH.M» FtTUWt IIEC FUUTIUII t


un i • DCL H DEC FLOW M M /wuimm DE u n r n v
1111 1 • KL Mt DEC FLOMIHII /«DERIVEE FJUTIELU BIPlSTEI/DtHIV
UEO 1 • RET*M.lfMl*CaiS*ii].MUt«Tm
II» 1 • 1W1.I
IStl 1 • . «TU»t«MTH
IHI 1 t » IFLUTXli

FONCTIONS EXTERNES
291 -

I.ÏIE-*! l.ME-ll Î.44E-01 3.111-41 .141-01 *.»TI-ll S.ni-01 t.t

I • I • I I i I I I
ï • r• ï ï J. £ I I

i • »i i i
»C I I •
! • | {• | | ,' ! . I I •

• iî l r i • I I •
I I •
ï ï • •! j • I « Ï ,
î • I • I I •
\ \ • I*. j- •
;• ;'
ï» i

i
i
i
t
ï
:
"•] r _
» -. i" 1 r~ •: • - !

INTEGRATION
- 292 -

T
V.22. Simulation de l appontage d'un avion.

Lorsqu'un avion se pose sur un porte-avions* sa crosse d'ap-


pontage accroche un cable qui l'immobilise complètement en quelques
dizaines de metres. Pour que la décélération se fasse sans chocs, mais
cependant aussi rapidement que possible, le câble d'appontage entraîne
un ensemble de chariots et pistons selon le schéma de la figure V-3.
Sur la figure V-3, la position initiale du piston et celle du chariot
sont représentés en pointillé.
Les grandeurs qui interviennent dans les équations de ce sys-
tème sont :
m. et x masse et déplacement de l'avion

EU, y. et |i masse, déplacement et frottement visqueux du


J
piston
y. allongement du câble.

Les équations d'évolution de ces grandeurs sont :

m + y =
2 *2 ^2^2 ~ 3 ^ 3*1 (^1 " ^ 2 *

•S ï + skj^-ayj) = 5 7 ^

y. * h » 1/x + h 2 2

1
Afin d observer en simulation la décélération subie par
l'avion et ce pour plusieurs vitesses d'appontage x , nous avons trans-
formé le système d'équations précédent, en un système du premier ordre.
Nous avons de plus posé

z - y 2 - y.,

v « y - 2y
PISTON
masse m„ ..
3 2
frottement visqueux u

Schéma symétrique '/.A

AVION
masse m

FlGV-3 APPONTAGE D'UN AVION


S3KB1X3 SNOLUNM IIUIMM»
ir**i»itr»m-<t<riifU)i/<UMAMtrmi-f(*rmutittit
I'lfVUWIM-IatUf
i •ti/'Mcn-ui
IMHA»
I'ta^tUXUMM-K-Htftl-CMUlll
iiir»iu-iT*rMUiMiiriwri-it>riMrii/tiriHTi*uii*r •tu
ft'Mf
IM in
m u m
m t i i m t i i < f i M r u u i àt
IM U W H
I ' M i U M H l I'IKtUi it
, > > a
i m u w u 3H I
m IM
a, >
tl'HC *Mf *m *«M *M***m*'Ul* Mt
<
• ' • n ' * « I T m ' U I ' t t " K * ' l l l M I C«UWM 311 IfllMfl
, , , , ,
IM
> > ,
•<••*•*•»• • M w n ' * i i « ' i i t
•t*f*V4 l'l I'l<«"T "VII'*UIHI («JlllWIi 3M IflMU IM
i i n u n u 9M IUH'IXOI I M
HI«U1*U 3MIWM1H lUMX-U'UI'U'M'rtMI'tMIUUirJiaHH

I'MW'UllilUI
IM Mil
I Ml
I ' M i t t 't-*!UltUa***UI*MUI
•M MH1 IIU'MUI a
• U M ttU'U'Ul'irM'AIJUUMIHMI

'•kCU'IAIIMU
IM Mil
IM
1-taUtl -T-alUICU-UI^ZUM
IM MHL IfMUI U
t ' w i u HMi I ' W C U I a

K i u o a < n u n u MO I M I M
t m t n v u am « t M i ' c w i u ' U ' i i i ' i i ' i i i ' u ' A V A ' w i i IM
I9UVU l»tM»mi 11AMM

'MEM Ml>l Ml M i l l I MM WMtltl «

NOUYIUWD

U1BI9H
•nuoM
UMIIH
•KCHM
CfttMtt
M)HM
m u m
ItCIMM
•tEIMM
itriwi
UHNH
nniiii
UUHH
HUM* I
MUM*
MUtt*
MUM»
•»•(•»
SI HI Ml
HMCMI <
iit^'i«xa'i>*.i*i iiix*i»^*i'4 i r n u T t n w i a i
UTMMB i < • IISNU • i t itMM * t E i e r a à t w s i i a o i
•IIIHH ix'xa'xsainilic*
UIBBIIB
•MUM*
•IIBtOIB
•It09II*
BE1MIU
K1MBM
IIIHMI •Miiin
eiiMiM •••iwtnii
0 KM SIS •tnnttHi
siaiaouitNOUia
en DU H
o u » a is
awoigiB ii-»g'iiM9»ntw
11 * t t * n a n u * »• Mnmaiit ITITACUHI
,I t--i • tumnau ' i • • i itnuxru* i B ' M A « m a a i m
'MUA» K M M U M U M - I u M u v i n a t

'NOIAV iiua i m K M r . i ia t u u n n u a m i o x luxura

- +765 "
a95

i : : i t • •—*• i i i i t i i i
! I I I • — t 1 t J I J I l

i t i " t i i t : t i i t
i i • t • i t i i t i : i i i
i r • t • i i t i i i i i i i
i t : • i t i i i i i i i i
i : r i i Î i t i t Î i i

i •• • t » i i t i t i i i i :
i i» * i t i i r i i i t i
t i i t t i t i i t i i
• • i i i t i t i t î t i
I I I I I I I I I : I :
- i i l i t î t î t i i i
i i : t t i t i t i t i
• i i i i : t t : i i i :
I t l l t l C l I I I t
i t i i i i i : i i i i

ï l t l t f l l t l l l
• x i i x t i t i t i t t
: : i : t i t i i i i t
i i t î i i ( t t i i i
i t t : t i t J t i i i

I.UtMl l.UItM «.lUtM S.ME*4I t . M M t TJ]E*<I l.lUtl l.Ut'tl 1.1IM1

t-lHH* I.HItM « .MUM r.stttêt t.Httn M t o n I,ME>H I . U I * I I i.m»i

..-••-+-r— i
!_-""

-
^"i" '

tim

INTEGRATION
- 297 -

Le travail réalisé tout au long de cette étude et décrit


dans le présent rapport, montre bien l'efficacité et la souplesse du
système NEPTONIX de résolution des équations algébro-diffêrentielles.
Ce système est essentiellement composé d'un module réalisant la com-
pilation des équations, d'un module traitant de l'ordonnancement de
la matrice jacobienne et de la génération de code et d'un module ef-
fectuant l'intégration numérique.
Noua avons plus particulièrement traité les équations ma-
thématiques relevant du fonctionnement de réacteurs nucléaires et de
systèmes mécaniques. Ces domaines couvrent, par analogie, la majeure
partie des systèmes physiques.
L'efficacité du système développé réside, d'une part, dans
l'algorithme d'intégration et, d'autre part, dans les algorithmes non
numériques utilisés qui exploitent à fond le concept de variation ty-
pologique des éléments, c'est-à-dire, de la hiérarchie de ces éléments
au moment de l'exécution.
Quant à la souplesse, elle provient essentiellement de la
façon simple d'écrire les équations. Le calcul du jacobien de façon
symbolique ou par dérivation formelle est un avantage non négligea-
ble. En effet, la méthode manuelle est fastidieuse et génératrice
d'erreurs et le calcul par differentiation risque d'être très vite
onéreux.
La simplicité de l'analyseur syntaxique montre l'intérêt
d'utiliser des langages évolués dont la structure est définie par une
grammaire à indépendance contextuelle (context-free), au sens de
Chomsky.
- 298 -

Le langage, à plusieurs niveaux hiérarchiques, traité jpar


programme d'analyse ascendante, permet à la fois une analyse rapide-
efficace.
MSma si, lors de la définition de la syntaxe, des problème
se posent pour éliminer les ambiguïtés éventuelles (ce qui conduit è
augmenter le volume de la grammaire engendrant le langage), il n'en
reste pas moins que le langage associé possède des propriétés très i
t^ressantes. Très synthétique et rigoureux, il demeure très souple,
compte tenu de sa structure de blocs.
L'analyse lexicographique utilise une méthode efficace de
traitement des identificateurs et des constantes numériques. L'emplc
d'une fonction de partition conduit à une recherche très rapide des
identificateurs.
De l'analyse syntaxique, nous retiendrons essentiellement
le codage numérique des symboles terminaux et non terminaux de la gx,
maire, la mise en pile des caractères successifs et des relations er
ceux-ci, la partition du vocabulaire de gestion de la pile et l'effi
cacité de la programmation de la fonction de transition de l'automal
assurant l'analyse par utilisation du méta-langag» de Floyd-Evans.
L'utilisation d'une grammaire à trois niveaux (niveau de
bloc, niveau haut d'un bloc, niveau bas d'un bloc) nous a permis d'c
ter 1»utilisation des îuatrlnas de precedence. Nous avons pensé util:
ser les fonctions de precedence. '1 n'est cependant pas certain que
l'on puisse les déterminer à partir d'une syntaxe donnée. On ne com
en effet, ni critère d'existence, ni méthode systématique de transft
mation de la grammaire. De plus, les traitements en cas d'erreur soi
difficiles à effectuer.
Lors de la phase d'analyse sémantique, la mise en pile de:
éléments temporaires permet de ne conserver que le minimum d'informé
tions utiles. La place réservée pour les données nécessaires au pro-
gramme intermédiaire est ainsi très réduite. Une souplesse des règle
sémantiques conduit à envisager différentes versions du compilateur.
Selon l'efficacité désirée, on peut envisager l'optimisation apport*
par la partition du programme intermédiaire en plusieurs parties :
la subdivision des codes engendrés en termes constants, en termes d<
pendant de la variable indépendante et en termes non linéaires. Cet-
optimisation est appliquée au Jaeobien associé au système-util!satet
- 299 -

L'algorithme de dérivation formelle lit une seule fois, de


gauche à droite, le mot à analyser. Il est global, c'est-à-dire qu'il
ne traite pas séparément les diverses possibilités rencontrées au cours
de l'analyse. 11 utilise la notion de langage régulier standard, pont
entre deux théories, celles des graphes et celles des langages. A cette
notion se rattache celle de graonaire régulière standard, qui ne fait
que formaliser la représentation déjà souvent utilisée, d'une grammai-
re par un graphe qui est en général arborescent.
Le temps demandé pour la reconnaissance d'un mot de longueur
n est proportionnel à (qn) , où q est le nombre de symboles de gestion
de la pile de l'automate réalisant la dérivation symbolique. Quant à
l'encombrement du graphe associé, il est celui d'un graphe de (qn)
points. Comme il s'agit de cas simples* le temps et l'encombrement ont
été notablement diminués par utilisation d'une technique convenable
pour le stockage du graphe.
Le jacobien ainsi calculé, est obtenu sous forme de "tableau
creux", c'est-à-dire que seuls les éléments non nuls sont pris en compte.
La clarté et la rigueur apportées à la description sémantique,
ainsi qu'à la dérivation formelle, sont des avantages non négligeables.
On leur ajoutera la facilité d'écriture et le fait que l'utilisateur,
n'étant plus confronté aux problèmes d'implantation, peut concentrer
ses efforts sur le problème étudié.
Nous retiendrons enfin de l'étape de compilation une "stan-
dardisation" de l'appel des fonctions mathématiques incorporées et des
fonctions externes de l'utilisateur. L'intérêt qui en résulte est une
génération automatique d'un sous-programme écrit en AL360, assemblé
par appel dynamique de l'Assembleur. Le sous-programme ainsi assemblé
est transmis à l'étape d'édition de liens en vue de l'ordonn&ncement-
traduction-précompilation, pour une résolution des adresses externes.
Lors de la phase d'ordonnancement, l'implantation en plexes
de la matrice jacobienne est très efficace. Bile permet de réduire le
temps de recherche et le temps d'accès aux éléments. De plus, l'étude
concernant l'analyse du compilateur PL/1 et son implantation pratique
nous ont suggéré les techniques à employer afin de réaliser la traduc-
tion et l'exécution des quadruplets sous environnement PL/'. . L'avanta-
ge de cette technique de réalisation est un* prise en charge par des
programmes appropriés des cas d'erreur résultant d'une opération anor-
male ou d'une singularité de la matrice.
- 300 -

La phase de traduction-précompilation est spécialisée dans


la génération d'un programme PL/1 décrivant le système à résoudre,
enrichi, du calcul de la isatrice jacobienne avec une affectation des
variations typologiques aux éléments intervenant dans chacun des cal
culs. Le programme ainsi engendré est compilé par appel dynamiqi.e du
compilateur PL/1. Le résultat de cette compilation est transmis à
l'étape d'édition de liens en vue de l'intégration. Ce traitement,
pour un modèle topologiquement invariant n'est effectué qu'une seule .
fois et sauvegardé sur un support informatique convenable, prêt à et \
utilisé pour plusieurs simulations successives.
Les résultats obtenus, lors de cette étape de recherche,
sont encourageants. Nous espérons qu'ils permettront de développer u
extension du logiciel proposé, extension inévitable si nous voulons
être en mesure de traiter des systèmes encore plus complexes.
Un développement intéressant est l'implantation de la logi
que du calculateur hybride, la qualification des modèles, l'introduc!
tion des modèles par macro-génération et enfin l'implantation du log
ciel sur des petites machines. Des travaux sont entrepris dans ce se l
Certains résultats déjà obtenus sont encourageants.
- 301 -

Annexe A : MESSAGES D'ERREUR

-* Messages d'erreur lors de l'analyse syntaxique et sémantique.


- Messages d'erreur lors de la dérivation formelle.
- Messages d'erreur lors de l'ordonnancement-traduction-précompilation.

MESSAGES D'ERREUR LORS DE L'ANALYSE SYNTAXIQUE ET SEMANTIQUE.

Messages du type I
1 ) ... L'ORDRE DU SYSTEME EST OMIS. 30 EST PRIS PAR DEFAUT . ..
Z) ... POINT FINAL MANQUANT. FIN PHYSIQUE DES DONNEES AVANT LEUR FIN
LOGIQUE ...
3) ... NOMBREUSES ERREURS. ARRET DE L'ANALYSE ...
Messages du type II
Ces messages ont pour modèle :
CARTE NUMERO numéro texte
où - numéro 'est un nombre donnant le numéro de la carte où se trouve
le pointeur-caractère lors de la détection de l'erreur fai-
sant l'objet du message.
- texte est une phrase construite selon l'un des 18 modèles suivants.
Remarques
1) les chaînes de caractères prenant leur valeur dans le program-
me source sont écrites en minuscules ;
2) || tient lieu de symbole de concaténation.
- Modèle 1
Le début du texte est choisi parmi l'une des 11 chaînes sui-
vantes :
a - mot-clé II symbole
b - mot-clé || symbole 1 It symbole 2
c - symbole-courant II symbole-suivant
- 302 -

d - symbole II/NON CONSTANTE/


e - nom-fonction II/DS.LINEAIRE/
f - identificateur II /PARAMETRE/
g - PUISSANCE DANS LINEAIRE
h - numéro-équation ll/SUPERIEUR/ Il ordre-du-système
i - /EQUATION DEJA DECRITE/
j - /PIN ANORMALE/
k - symbole-courant II /INATTENDU/
Le texte se termine par SPECIFICATION INCORRECTE.
- Modèle 2
Le début du texte est choisi parmi l'une des huit chaînes
suivantes :
a - identificateur
b - identificate'ir H/CONFLIT/
c - PLUS DE 10 PONCTIONS
d - /JACOBIEN (llvariable )?/
e - nom-fonction II/DS.LINEAIRE/
• - /; MANQUANT?/
; - symbole-courant II /INATTENDU/
a - NOMBRE PARAMETRES/nom-fonotion/
Le texte se termine par NOM/APPEL/PONCTION INCORRECT.
- Modèle 3

Le début du texte est choisi parmi l'une des deux chaînes


suivantes :
a - symbole-courant II 'INCORRECT DONC
b - symbole-courant ||/DECL/INCONNU

Le texte se termine par NOM DE BLOC INCONNU.


- Modèle k
Le texte est composé de :
.'PIN OMIS POUR CLORE LE BLOC nom-bloc
nom-bloc est : a - SYSTEME
b - DECLARATIONS
c - LINEAIRE
d - NLINEAIRE
- 303 -

- Modèle 5
Le début du texte est choisi parmi l'une des deux chaînes
suivantes :
a - /CONSEQUENCE/ Il nombre
b - /CONSEQUENCE/ || + (9)
avec nombre compris entre 1 et 9»
Le texte se termine par l'une des deux chaînes suivantes :
a - PARENTHESE (S) - OUVRANTB(s) - MANQUANTE(S)
b - PAHENTHESE(S) - PEPMANTE(S) - MANQUANTE(S)
- Modèle 6
Symbole CARACTERE INCONNU
- Modèle 7
Le début du texte est choisi parmi l'une des 9 chaînes sui-
vantes :
a - symbole-courant || symbole-suivant
b - mot-dé II symbole-courant l| symbole-suivant
c - mot-clé II symbole courant II /INCORRECT/
d - ; MANQUANT
e - symbole-courant II/AU LIEU DE ( ou ;/
f - symbole-courant II/AU LIEU SE :/
S - symbole-couant H/AU LIEU DE ;/
h - NUMERO MANQUANT
i - /POUR II numéro-équation II / : /OMIS/
Le texte se termine par ERREUR DE SYNTAXE.
- Modèle 8
Le texte est le suivant :
LE TEXTS A PARTIR DE CHAINE EST IGNORE JUSQU'(AU)(A LA) FROCHAIN(E)
séparateur
avec ' chaîne ' ayant pour valeur :
a - mot-clé || symbole-courant
b - symbole-courant II symbole-suivant
et 'séparateur' est un symbole terminal de la grammaire (par exem-
ple ',' ou • ; • ) .
- Modèle 9
symbole-courant IDENTIFICATEUR TROP LONG
- 30U -

- Modèle 10
nombre CONSTANTE MAL CONSTRUITE
- Modèle 11
Le début du texte est choisi parmi l'une des trois chaînes
suivantes :
a - mot-clé II identificateur
b - identificateur II /MOT RESERVE/
c - identificateur
Le texte se termine par VARIABLE/DEJA DECLAREE /OU/ INCONNUE
- Modèle 12
Le texte est le suivant :
DEPASSEMENT DE BORNES DANS LA TABLE - nom table -
avec pour 'nom-table' les trois valeurs suivantes :
a - DES CODES INTERNES
b - DES CONSTANTES
c - /[(identificateur II/DES PONCTIONS
- Modèle 13
Le t e x t e e s t l e suivant :
LE NOMBRE DE VARIABLES DECLAREES EST DIFFERENT DE L'ORDRE DU SYSTEME
- Modèle 14
Le début du texte est choisi parmi l'une des deux chaînes
suivantes :
a - mot-clé |J symbole -courant
b - mot-clé || :
Le texte se termine par CLE INCONNUE.
- Modèle 15
Le texte est le suivant :
PAS DE VARIABLES FOUR LE SYSTEME A RESOUDRE
- Modèle 16
Le texte est le suivant :
PAS DE VARIABLES-SORTIE POUR LE SYSTEME.
- 305 -

- Modèle 17
Le texte est le suivant :
PLUS DE 50 VARIABLES-SORTIE DEMANDEES
- Modèle 18
Le texte est le suivant :
-.-. ARRET DE L'ANALYSE.

MESSAGES D'ERREUR LORS DE LA DERIVATION FORMELLE.

1 - EQUATION NUMERO numéro OPERATION LINEAIRE ILLEGALE ASSOCIEE A


CONSTANTE rang-constante
2 - EQUATION NUMERO numéro OPERATION LINEAIRE ILLEGALE ASSOCIEE A
VARIABLE rang-variable
3 - EQUATION NUMERO numéro OPERATION LINEAIRE ILLEGALE ASSOCIEE A
VARIABLE DERIVEE rang-variable
4 - EQUATION NUMERO numéro OPERATION LINEAIRE ILLEGALE ASSOCIEE
A OPERATEUR IMPRECIS
5 - DESCRIPTION DE L'EQUATION numéro MANQUANTE
6 - EQUATION NUMERO numéro TROP LONGUE
7 - EQUATION NUMERO numéro NOMBREUSES ERREURS. ARRET DE L'ANALYSE.

MESSAGES D'ERREUR LORS DE L'ORDONNANCEMENT - TRADUCTION - PRECOMPILATION

Ils sont de trois types :


1) Ceux relatifs à l'exécution des quadruplets. Ils correspondent
dans ces conditions à ceux du FL/I à l'exécution. Un descriptif de
l'évolution du problème est donné en plus afin d'aider à localiser
l'erreur.
2) Celui relatif à l'ordonnancement de la matrice jacobienne. Ce
message est le suivant :
- LA MATRICE EST SINGULIERE
- INUTILÏ"TJ^ALXEirPLUS"X6ÎN"
3) Ceux relatifs à la compilation du programme engendré. Ils cor-
respondent aux messages d'erreur du compilateur PL/1.
- 307 -

Annexe B : PROCEDURES D»EXPLOITATIDN

Noms des différentes procédures.


Signification des différents paramètres des procédures en langage de
commande JCL.
Développement de la procédure NPTX1C0I.

NOM DES DIFFERENTES PROCEDURES.

Cinq, procédures en langage de commande (JCL), permettent


d'utiliser tout ou partie de l'ensemble du système. Ce sont :
1 - NPTX1C : Compilation.
2 - NPTX10 : Ordonnancement-traduction-précompilation.
3 - NFTX1I : Intégration.
h - NPTX1C0 : Compilation + Ordonnancement-traduction-précompilation.
5 - NPTX1C0I : Compilation + Ordonnancemant-traduction-précompilation
Intégration.

Ces procédures sont sur un fichier catalogué, SES.SERF.


NAKHLE.-PR, accessible des ordinateurs IBM 360/91 et XBH 370/166 du
centre de calcul de Saclay (CISl).

SIGNIFICATION DES DIFFERENTS PARAMETRES DES PROCEDURES EN LANGAGE DE


COMMANDE JCL {sont soulignées les valeurs par défaut).
appartient à
s
- TD type de I traité d'accès direct SYSDA SYSKJT
ou SYSVIO ou 3330 ... C,0,I
- EA nb. de pistes pour écrire le programme
d'extension de la bibliothèque, et
nb. de cylindres pour écrire les listings des
programmes engendrés^en Assembleur et enPL/l
C,0
ECCM nb. de pistes pour écrire les fichiers CINITIA,
CODOBJT et MATRICE créés à la phase d'analyse
1
- 308 -

nb. de pistes pour écrire les fichiers DONNEES


et ERREUR nécessaires pour la phase d'analyse

nb. de pistes nécessaires sur le fichier GENERAT


des quadruplets engendrés

nb. de pistes nécessaires sur le fichier BINAIRPG


du programme PL/l engendré

nb. de cylindres nécessaires sur le fichier


TEMPHEC créé lors de la phase de dérivation
formelle

nb. de pistes pour écrire le programme-source


PL/l engendré sur le fichier SORTIES

nb. d'enregistrements pour l'éditeur de liens


sur le fichier SYSLMOD
240
nb. d'enregistrements pour l ' é d i t e u r de l i e n s
sur l e f i c h i e r SYSTJT1
240 0,1
nb. d'enregistrements sur le fichier SYSUT1
utilisé par le compilateur PL/l
320
CART option de demande de cartes à l'ordonnancement
précompilation
1
valeur '/CA ou '/NC
INIT option de demande de copie du fichier CINITIA à.
l'ordonnancement
valeur IN ou NI
PREC option de demande de précompilation à l'étape
d'ordonnancement
valeur PR ou NP
DECK option de perforation du binaire résultant de la
compilation PL/l du programme engendré
valeur DE ou ND
CCOND condition d'exécution de l'analyseur
CREG région nécessaire pour l'exécution de la compila­
tion d'un programme écrit en langage 'NEPTUNIX'
valeur > 270 K, par défaut 300 K
- 309 -

- LC0ÏTO0 condition d'exécution de l'édition de'néns pour


ordonnancement '
- LKEGO région nécessaire à l'éditeur de liens pour créer
le module permettant l'ordonnancement
300 K
• GCONDO condition d'exécution du. module créé par l'éditeur
de liens et réalisant 1'ordonnancement correspori-
dant au problème de l'utilisateur
> GHEGO région nécessaire pour exécuter le module réalisant
1 ' ordonnancement
300 K
• LCONDI condition d'exécution de l'édition de 'liens pour
l'intégration
' LHEGI région nécessaire à l'éditeur de liens pour'créer
le module permettant l'intégration
300 K
GCONDI condition d'exécution du module créé_jpar l'éditeur
de liens et' réalisant'' l'intégration
GRBGO région nécessaire pour exécuter le module réalisant
l'intégration
300 K

Autres paramètres

- CFGM nom du membre sur SES.SESF NAKHLE.MODULES réalisant


S

l'analyse syntaxique des équations-utilisateur et la


dérivation formelle
- LGPH nom du membre réalisant l'édition de 'liens "~
- LKLHDSN bibliothèque nécessaire à l'édition de liens
- CALL option de l'éditeur de liens valeur CALL ou NOCALL
- LET option de l'éditeur de liens valeur LET ou NOLET
- MAP option de l'éditeur de liens valeur MAP ou NOMAP
- LIST option de l'éditeur de liens valeur LIST ou NOLIST
- OVLY option de l'éditeur de liens valeur OVLY
- SIZE option de l'éditeur de liens valeur 'SIZE.(300K.75K) '
- TERM option de l'éditeur de liens valeur TEEM ou NOTERM
- 310 -

DEVELOPPEMENT DE LA PROCEDURE NPTX1C0I.

//NFTX1C0I PROC TUïSY5DA,EAil,ECCN=3.E0E=4.EG=5,ET=2,EB=10.ESOR=14, 00000010


// 5PÎ100=240,SPUTs240, 00000020
ESTl'350. » FIN DES OPTIONS COWUHES AUX PROCEDURES » 00000030
CALHeAlL.lET=lET.TERN=HOTERH, « PARAMETRES E D I T . » 00000040
LIST=N0LI5T.(1AP=H0HAP,0VLYs0VLY. • . . . OES LIEIIS. 00000050
SIZEs'SIZE=t300K.7SK>'. » LKEI ET LKEO. OD000O60
CART*VCA'.INITsNI,FREC=PR.DECK30E» N PARM. ORPR 00000070
CPGM:COEQUA04.CftEG=300K .CCOND* > • JCL POUR 'COMP- ooooooso
LFGÏ1aIEHLF126.LKLBD5N='SYSl.PLIVI0E' LKEO 00000090
LCONDOs'tl.LT,CGnP)',lREGO:300K. • EDITION LKEO • 00000100
// GCON0D:'<5,LT,LKEOr,GREGO:300K. • CROOIMAH.-rRECO.» 00000110
// LCONDI='I1.LT,C»FR)'.LREDI=300K. • EDITION LKEI • 00000120
// GC0N0IsM5*LT.LKEI>',GREGI:300K « FIN DES OPTIOHS » 00000130
//COMP EXEC FGHslCPGM.REGIONsICREG.CONOstCCONO 00000140
//• 1 00000150
//«ETAPE 1 COMPILATION OES EQUATIONS. 1 00000160
//• 00000170
//STEPIIB DO 0SN33ES.SERF.NAKHLE.MODULES.DISP=SHR 00000100
//ASSEHBL 00 DSNsItASS. * FOUR GENERATION FP03RAMME tBIBLIO • 00000190
OISPsINEU.DELETE.DELETE).UNITslTU.SPACE*(TRK,XEA), 00000200
// 0CB*<RECFtttFB»lRECl>SD.aLK3IZE3S00> 00000210
//CINITIA D5N=»«CIH, > POUR LE5 CONDITIONS INITIALES • 00000220
// 0I3P«HEM.PASS,0EIETE].UNIT:|TU.5FACE=<TRK.1ECCI1). 00000230
// OCBK RECFM*FB <LStCL=SO ;BIK3IZE:000 I 000002*0
//COOOBJT OSH:<ICOD. » OOHNEES POUR OROCIH. ET INTEG. • 00000250
// 01SP*(NEH,PASS.DELETE ).UNIT:1TU.SPACED TRK.1ECCH), 00000260
// OCBs|RECFN'FB.LRECL360.SlKSIZE:«00> •0000270
//DONNEES OD OSH*tlDOM, » COPIE OU FICHIER SYSIN POUR A.S. » 00000200
// DISPXNEU.OELETE ,OELETE ) |SPACE=I TRK.IEDE 1 ,UNIT=17U 00000290
//ERREUR OD 03N>i«ERR> • HE53AGE5 O'ERREUR PENDANT A.S. a 00000300
// DISPONE».DELETE.DELETE),SPACE'ITRK.IEDEI.UNIT'ITU 00000310
//FONCTIO OD DSNsttFON, » DESCRITION DES FONCTIONS EXTERNES • 00000320
// DISPONED,PASS>OELETE)iUNIT-tTU>SPACEctTRK.l). 00000330
// DCBXRECFniFB,LRECL:SO.BLKSIZE:BOO> 00000340
//GENERAT DSNStlGEN* » QUADRUPLETS OU CODES D'EXECUTION • 0000O3S0
// DISPxINEH.PASS,DELETE>,UN1T:ITU.SPACES! TRK.AEG). 00000360
// OCBsrRECFHsFB.LRECl=«0,BLK3IZE>3120> D0000370
//NATRICE OD OSHstMAT, • 0E5CRIPTI0N OE LA KATRICE/ORDONNA.» 00000390
// OISPs! NEU.PA3S.0ELETEI.UNITsCTU.SPACE*!TRK.AECCM >. 00000390
// Oca:IRECFH=FB.LRECL:80.SLKSIZE:BOO> 00000400
//HICFICEX OD DSIRtlCEX. • OBJET PROGRAMME ASSEMBLEUR tBIBLIO» 00000410
// DISP»(NEH,PASS,DELETE>,UIIIT=1TU,SPACE=I3120.2401 00000420
//HICINTR1 DO OSN'AtTRI, » TEMPORAIRE 1 POUR ASSEMBLEUR » 00000430
// DI3P»CNEU,DELETE,DEIETE].UWT=ITU,SPACE*I3120,240) • 00000440
//MCIHTRZ DD OSN'MTRE. • TENFORAIRE 2 POUR L'ASSEMBLEUR • 00000450
// DISPONE»,DELETE.DELETE),UNITsITU.SPACE*!3120*240) 00000460
//NICINTR3 DD 03N:(tTS3, • TEMPORAIRE 3 POUR L'ASSEMBLEUR • 00000470
// OISPxtNEU.DELETE.OELETE),UNIT=ATU.SPACE*!3120.240) 00000400
//PERFO 00 SYSOUT». • PUNCH CD00BJT.NA7R1CE.GENERAT.CINI» 00000490
// DCB«RECFn'F,LRECL*B0.BLK3IZE*S0> 00000500
//PLIOUMP DO 3TS0UTU 00000510
//SORTIE OD DSNillSOURCEiUNITsATU. « LISTING OES PROGS 00000520
// SPACE*!CYl.(ET).OISP'INEU,PASS.DELETE). 00000530
DCB*I RECFN*VBA.LRECL*137»BLKSIZE*4799> 00000540
OD 0SN*SY31.HACL1B.0ISP*3IIR « BIBLIOTHEQUE ASH" 0000O55O
' OD 3YS0UT*A, » ECRITURE 0E5 RESULTATS DANS PLI • 00000560
DCB'(RECFn*VBA,LRECLsl37.BLKSIZE*963> 00000570
//5YSPUICH DD SY50UT*B, — 000005(0
// DCB=IPECFII=F,LRECL»00.Bir.SI-E»<i0) 00000590
- 311 -

//STSUDirP DO 00000400
ATEHPREC DSH*1(TEH, • COOES IHTEmEDIAIRES PAR EQUATION • 000(0610
// 0ISP«INEU.DELETE.0ELETEl.L>UT<lTU.3PACE><CyL.l£TI. 00000.CO
// DCMIffiCFIt*F.U>ECL*21*0,BLItSIZt*21«0.O30RGiDA,KETLEll>SI
EXEC P O U t l K t l .
000006»
000004*0
//UXEO
// PAimc'tCALL.SIXT.IUST.lHAPrlOVLY.ITFJIH.ISIZE', 0(000690
//
//•
C0HB*ILCOND0,REGI0NstLRE6O
2
00000660
oaooo67(
//«ÉTAPE 2 OUOWUCEMEHT ET nECOHPILATZOH. 2 000I0AS9
//• 00 DSH>SES.SERF.H4KHIE.M0DULES.0ISP39HR
00000690
60000700
//HCDUIE
//sniit
00' DSH'ILKLeOSN.DISP'SHR ooooono
M osrcsrsi.PLmse,oisP"SHi) 00000720
// 00 DSIItSTSl.BBLPLI.DISIttSHR OOOOST»
// DO D9N'9VS2.F0RTLIB,DISP»<SHR,PA3S> (OOB0740
// 00 DSWSTSl.eRLFORTiDISP'tStm.PASSI 000107JO
//SYSLIN DO DStKllCEX.DISPXOLD.DELETE.OELETCI 000(0740
// DO O0HAHE*3«3IH 00(00770
// DO DOWSES.SERF.NAKHLE.SllOVLIOCPRI.OISPtSHR BH007SO
//STSLHOO DO -OS>l'ltnSETrtOPLII UHIT*ITU,SP<CE*l»2e,ll9FI100..1l>,
>
0000» 7 »
// DtSPPIHEHiPASSiDELETEl •I000BOB
//SYSPRINT 00 STSOUT'A. « SPECIAL EDITEUR DES LIENS. a (O0OOUO
// 0Cl«(RECFmV»»,L«ECl>12J,iU<IÎZE'H»l •B(00t2(
//STSUTl DO DSN>tISTl.UHITPtTUtSPACE»<3120.<SPUT> (0O0BO30
//ORPR EXEC PBWMM0.SMLHO0. (OOO0S6O
// PASm'lCWT.HNII.JPBEC.IDEClt'. •00OBJ5»
// OM>»A6C0!f)0iRE6I0NsAGRE60 •0010340
//•loom DO Dsm».utEo.sTsua>,DisP'rsw.oELETE> 00000070
/ / U N A I R P O DO DswtiBW. » BINAIRE DU nsooftAitiE P U RÉSULTAT •
OO(O0MO
DI3P«INEN.PASS,DELETE!,UNIT«1TU,SP»CE"! TOI,«EB>, OM0H9B
0(000*00
•// OCB'<p:ECF11>FB.LRECl>tO,BLK9IZE'3120 > 00000*10
//CHHTIA DD 0SH*<iC3H,DI9J»<OLDiPA3S.DELETE> (OOODKD
//CCDOBJT 00 DSH*CICOD,DIIP»IOLD PAS3iDELETE>
> 00(00*30
//TUBUS DD OSNsttSTS, • FICHIER SVSIH DE L'IHTECPATIOH • 00000*40
// 0I3P«(HtU,PAS!,DELETE).*IT»tTU,SHCE«nBlL,»ECD1l, 00000*90
//
//FILENB2
DCB>tRECFH>FB.LRECL'a0,BLKSIZE'aO0>
DD OSHttlFlZ» « FICHIER FICHE OE L' INTEGRATION «
0(000*60
DISP*trJEU,PASS.DELETE>>lJNITslTU.SPAC£*ITRK,AECCm, oooom-o
OCBMRECnfsFB.LRECL'SO.BLKSIZEiOOOl (0000*30
//FILENB3 DO 0SN<ttFI3i • FICHIER FICH3 OE L'INTEGRATION » 00000**0
0ISPt(HEU,PA3S,0ELETtl.UH!T'tTUiSPACE*ITRK.(ECCH). oooowo
// BCB'(RECFHiFB,LRECL*90iILK3IZF'(OOI 0(001010
//rONCTIO DD DSHslIFOH.OISPXOLOiOELIIt.OELETEl 00001020
//FT04F001 DD STSOUTM, • CAS OU APPEL FORTRAN • •000105»
0CB'IRECFI1>VBA.UIECL'137.BLKSIZE*M^I 000010*0
//•EHERAT DD DSN'1KEN.DI9P«I01D.DEIE1E.0ELETE> 00001090
//TUTRICE DD DSHUtnAT.DHnlOLO.OElETE.OELETEl O1001I40
//PERFO 00 ST30UKB. • PERFORER LES CONDITIONS INITIALES • 00001070
// OCSMRECFH'F.UECLOOiBLKSIZE'OOl OO0O10OB
//PLTOUKP OD SVSOUTM •00010*0
//SORTIE DD OSIttltSOURCE.DISP'ISHR.PASSI 00001110
//SORTIES DO OSHUtSOR. • SOURCE OU PROSRAItlE PLI RESULTANT • 00001110
// OISPatHEH.DELETE.DELETEI.UNIT'lTU.SPACEXTRK.AESORli 00001120
//
//STSPRIHT
DCB'l»eCFNsFB.LRECL<eOiBLKSIZEiSOtl
00 STSOUT'A, • ECRITURE OES RESULTATS OAHS PLI
(0001130
000011*0
// 0CB*(RECFH*VBA»LRECL'137,BLKSIZEsM3l OOBOUSO
//STSPUHCH DD STSOUT'*. • OCCK DU PROGRAMME PLI GENERE 0(001140
// DCB*<RECFH»F,LRECLcSf,BLKSXZEBSO> 00001170
//STSUDUHP DD OUHHT 00001100
//STSUTl DD OSN'llSTl.UNIT»ITU,SPACE»!3120,1E5T1I (OOOlltO
- 312 -

//SY5UT3 DO DSN=*l5Y3.UNXTajtTU,3PACE=C312».IE5Tl)
<VLK£X EXEC PCHslLPGH, 00001200
// P«rt='lCALl.tLET,11137,JHAP,«TERM,I5IZE". 00001210
00001220
/f COM) ULCDM) I . REGION* AUJEÇI
00001230
//«CTAP* 3 : INTEGRATION 00001240
00001250
//NEPTUttl OD 3 00001260
DSM=S£S,SERF.MAKHLE.HOOUL£S.OISP=SHR
//5Ï5LID DO o s N s t u ; L e o s N , 0 I 5 P 3 SHIT 00001270
OSH'SYS J . PUBASE .0I3P=SHR 00001230
DSN=SVS1.891PH.0ISP=5HR 00001290
D5r)3STS£.fO0TLIB OXSPs<SHR,PàSS)
(
00001300
DO 0SH=SY3I.fiBLFÛRT.0I3Ps<5HR,PA5Sl 00001310
/V5YSIIN OD 00001320
D5N=*ÏBIH,0ISP=<OLD.OELETE,DELETE)
OD oor»n£ssrs2ti 00001330
DSM=3E5.SERF.HAKHLE.BJIEDIIir4TG).0I5P=SK? 00001340
//SYSLHOD 00001350
D5N=«COSET(G0PLU,UHITsSTl(.SPACE=(n20,USPtaO ,ll) (

OI5P>(HEM.PASS OEt.E7EI 00001360


(

/ / S Y 3 P R I M T OD SYSOUT'A. * SPECIAL EDITEUR DES L I E N S . * 00001370


DCBsiRECFM*VBA,tREC(.=121.BlKSIZE=96a, 00301330
//SYSUTI 00301390
00 DS»=A15ri>U'XTsfTU,SPACE»!312DiX3PUT)
//INTS 00001400
// EXEC f G t t « . LKEX. 3Y3.UTO0,
COrJDxIGCOTfflftREGIONalGnECI 00001410
//BXOOtIS 00001420
00 DSHs«.LKEI.5Y5W0D,M3P*l3IW,DELETE»
//C2IHTIA 00 D5HsilCIN.QI3P»IOLOrPAS3,DELETE) 00001430
//CODOBJT 0 5 t m i C 0 O . 0 X 3 P s r O L D . P A 3 5 . DELETE) 00001440
•/FICH2 0SHsfXfI2.0X3Psr0LD,OELETE.DELETE) 00001450
//FICH3 — DSN=I1FI3,DI3P=<OLD,OELETE,OELETE) 00001460
/ / F T 0 6 M 0 1 DO 3YS0UTM, « CAS D'APPEL OU FORTRAN. * 00001470
DCB*<RECft1*VaA.LRECL*137,BLK3IZES963) 000S14BO
//PERFO 00001490
3YS0UT*B, «PUNCH DE5 FICHIERS DE L'INTEGRATION»
DCBsfRECFHxF.LRECLMO.eLKSXZE'BOl 00001500
//PLIDUHP DD SYSGUTsA 00001310
/V3Y3IH DO 00001520
— DSNzttSYS.DXSPstOLO.DELETE.CELETEI
//SY5PRINT 0 0 SYSOUTsA. » ECRITURE DES RESULTATS DAMS PLI * 00001539
/ / DCB*IR£CFmVBA,LRECL*l?7,BLK3IZE=963J 00001540
//3Y5UiurtP so ounty 00001550
00001560
Annexe C : PRODUCTIONS DE FLOYD-EVANS POUR LA GRAMMAIRE G(«PROGRA>)

i
ARBORESCENCE pour les productions de

LECTURE: REDUCTION:
1 *=! > s*»> <6fttKHE> t «*> i »*> 1
Ci a
17 <S1L-£HS> »*a> «IDFONO
E4 • « * >
27 » «lÛFCîlO
• «•«> 14
* )XDEHT ««> IDEIIT

t •*•> • -••»
«ïi> • 14 * " >
u ««* ia
1* «s»
*«»>
IICH9PE
ENTIER
5 i » > z t » / 19 * « » «i
NOfSPE
ENTIER «»«• <V1DHBL>
^ •»»> / *•*> *

«2 *"> 42 <VlRIâBl> • • » <0E*1VEE>
7 -.-> • 4 «•> 4S <CI?XVEE> «•i> <FPIMI1R>

» —>
£1 •
MENT
*CCJBLtl>
«->
—- » «00MIM> «S ---> 40 <FB 11*111» -—> <F*CTEUR>
ÏS > «o *«*> *»> <3tcatra>
1 .—> ---> «i*
to
<MCTEW>
— > <TEPH£»>
ï» — > *
<TE»«*> .»> «2 0 ---»
• " » 37
<S5C0"3>
• ss> <TEnnE>
S3 - - - >
1
<BLQWJl>
<E>'F3IMI>
-«>
—> 3* — > 31
<TEFHE»
<TEPHE> —-> <EXF3XHt>
31 — » 31 — > ta <exP3iti*> > <0CJ9LE*>
Ï7
î » e«=>
> ï
£l
l-VîE*0
CEÎÎICïl
»
—>«>
ÏÏX» ttJUCH
ES — - >
J —->
0 <0C'.'BLE«>
>
: i — •> 1 S'JP-'SH
0 f
••«> > Firpicti U
32 * * • > 3S <E*Psm> —-» <C0UBtE>
*••>
10
«
«3»
«•>
12
37 *
FHPÎÎW »*»> <UIEEW> ••*
33 > 1 <SCUSLE> «•*» <E3U1T> VJl
*i — > » «t-LSECJ» -— > 37 •••» 30.
44
<IFIEC?J>
<EW*T> »»*> <C0 EW>3

ÏS
44
— >
>
9
1
«EXPRES»
«SECO'ID»
«->
-—»
35
**i
«»>
-.-» 30 <CCPEQU> —> <ewïcji>
1

47 > 0 «EXFS!>E(I> ...> 30 — > 0


43
<BL0EVJI>
--->
«*•> <PADiPE>
-«> 1*
43
*«>
— » » JICC9Z
<PAP*NE> > <C0J!LE»>
M — > 1 -—>
31 *>» 3* <EXFSIH> *>•> <AFFCUT>
3* — > 0 <*PFWJT> -—>

G(<PR0GRA>)
ZUS RUB SUB
2 0 0
0 39 75
40 (3

4 0 t
4 0
4 0 •
0
4 0 0
0 42 75
13 0 0
Ill 101 0 as 69
III 111 ) 0 0
NI 121 •0 0 0
III 131 roiHTEX 0 47 0
HI 141 lOEIIT B 11 75
HI ! 5 I HWÎBPE 49 75
HI 161 JJCCBI •
0 50 93
HI 171 NUMERO 25 0 0
III 101 EHuen 0 52 75
HI 19) 1 0 53 •5
HI 20) DEE™ 27 0 0
III 211 SUIHOII 27 0 0
III 221 riHTHM 0 54 Bt
HI 23) OEEEW 0 0 0
HI 241 flHEQU 0 t 0
III 25) <P<M)SRA> 0 0 0
III 2*> <MUCHE> 2 0 0
HI 27) <IOfOIIC> 2 0 0
IK 281 <OOUtlE» 10 12 el
HI 2?) <TEPHE9> 14 IB 78
HI 301 <BLCECU«> 1» 21 91
NI 31) <EXFSIH»> 22 24 BO
HI 3 : i <EXP51H> 29 30 97
HI 331 <0Crj3U> 2? 0 0
III 341 <CLCEQy> 32 •
HI 351 <EXFRE5> 34 0 •
0
HI 31) <*proirr> 0 55 97
III 37) <UUEEQ*J> 0 5» S9
HI 391 <EOIMT> 0 5» B9
III 39) <TEBHE> t 5» 78
HI 40) <MCTEW> 0 04 76
HI 41) <VIHIABL> 0 67 75
HI 4SI <DER1VEE> 0 (S 75
HI 431 <PAMI1E> 0 60 93
III 441 <C04E0U> 71 6»
III 451 <PRltttIR> 0 • 73 75
HI 4») <SECON0> 36 37 76
HI 471 <EXFCHEH> 30 0

TABLE DES ETIQUETTES [G(<PR0GRA>)1

i
FIOYO-EVJUIS ntOCUCTXO.» ( F I P 1

FIFTH FOURTH THIRD SECWD FIRST WIISJW SEH. SCAII TRAIISFER

I Z TOT/.

2 2 'III 201
1
1
21
31
2 'HI 271
• 1
4
4
Z I
z -
1 « Z
4 2 •/
Z
«
«1 Z » 1 1 4 R 1
1 5) • I0EHT 1 V 4
z IDEHT
1 61 IIGtCRE 1 • R IW3BE
1 71 233 1 ETC

1 01 z I0EHT Ï 4 P •
1 91 1 1 R 1
1 101 Z ' I I I 231 Z t
1 111 R I0EIIT Ï0EHT 93» 'III «11 333 1 s lOEiir
1 lei II ' H I 201 'III 201 02» i.->
i>-> ' I I I 331 323 j 3 "III 2 ! 1
1 131 Z I0EIIT i Z IDEIIT
1 141 , J1CC3T i •
4 R J«C051
1 131 a?» i 'PPC9

1
1
101
171
Z «111 2 9 1
. i
i
4 Z 4
z /
1 131 R •III 291 'III 291 / «29 i -> «TERHE> «32 1 « » «It 291
t 191 Z 'III 301 3'JlriTl i z I'jnrai
1 201 • W W i • B FII.WI
<
1
£11
221
R •III 301
Z «Ml 311
'HI 301 229 j -> =H( 3«l 333 1 « 3 «Ml 301
• i z*
1 231 i « 4
z -
1
1
241
231
R •III 311 'Ill 311 - 32» i -> 'III 321 223 |
• 3 «III 311
Z 1
Z IPJKEPO 1
1 III 22» i E°FC9

1 27 z OECiiai
271 z suiim IPJHEPO i 4 z rcr'.EPO
1 201 933 i
1 29 z ' I I I 321
291 z 1 H 331 1 i R 1
1 301 R •Ml 321 'III 321 223 i -> 'III 3SI 323 | S ' I I I 321
1 311 239 i E™=°
1 331 Z 'III 341 FOXHTEX 1 4 R rolllTEX
1 331 23» i EFRCT

1 341
1 351
Z •HI 3SI i
2 »
ii . R I
EPP'JR

1 331
1 371
Z •III «01
n 'III « i l 'III « i l
1
222
ïi-> 'III 401 223 1
. R
3
1
-III ' 4 1
1 391 z •III «71 CiniER i 4 R ENTIER
233 i -» 'HI 421 29» 1 S •

FEP[G(<PR0GRA>)1 1
lucni T =tll 11} *>?»
i 4i> "Ht 26) a»
1 42) R 1 =llt 2 7 1 =111 331 1 t « •III 36) 939
=m 2 7 i «Ml 321 «Ht 451
1
1
4SI
44» =HI 261 E H I 321 I ) ttt
999 •III 45»
?9>
933
1 45) S?»

1 4fr)
1 47)
R ï
R FOIKUX DESHOtl
î?3
;
•Ht 3 4 1 POIKTEX
939
939
•lit
•lit
44)
251
? »

I 461 93ï>

C 441 R HOTCKE IITSRE 3ïi =111 4 5 ) Ma


1 50) R JACCBI IDEIIT JACOBI •tll 4 3 ) 9za
1 511 * 99»

( 52) » emiER ttt EliriCR »?) «Ml 4 6 ) 933


t 53) R 1 } » I 939 'Ml 4 7 ) s?a
1 54) R rii-i.TM nico*! 9ï9 Etlt 3 0 1
I « 1 R =HI 3 M »» •m » i 939 =tlt 1 5 )
539
S?»
( 54) R =MI 3 7 ) =Ml 3 0 1 stmrcti •Ht Ï 7 | =111 3D) 553
t 57) tN( 371 :;*
9?a =111 3 P ) 333
1 5£) R <EWA1> <EW*T> ?39 =111 3 7 ) 333
1 59) R <TERHS> =Mt 311 <URHC> 939 •Ml ï l ) 333
r coi - <URME> 999 •111 311 9 »
( 611 «III 311 - <TERHE> S?» •Ht 3 1 1 933
( 621 » <T£MtE> îît •Ht 3 1 ) 933
1 631 • <TE*«E> 3Î3 •Ml 3 1 ) 933
f 641 R =Mt 401 •Ht 291 •Ht 401 93a •Ml 2 9 1 939
( 651 •HI 29) / =111 4 0 1 :ss «Ht 2 9 1 939
f 64) » =111 4 0 ) 933 •III £91 939
1 67) R =Ht «D *lll 41) £32 =111 4 S I 333
I «61 R >W 42) «NI 4 2 ) 399 =111 4 1 1 239
1 641 R 'NI 43) •IK 261 •III 431 ?» «HI 2 9 1 « 9
t 70) , Mil 4 3 1 553 «Ht £ 6 1 939
1 71) R =111 4 4 ) NUMERO «Ht 4 4 1 933 <ECJAT> 999
1 72) !
( 731 R =W 451 •m 45) «» «III 461 999
1 741

t 75 S '
75 S 1
75 5 IDENT
75 s txroce
75 5 EHTUR
75 S *Hl 411
75 S «Ht 4 2 )
751 S >ll( 4 5 )
( 76 S >HI 4 0 1
76) S «Ht 4 6 1
I 771
C 78 3 «III £91
70) 5 <1ERHE>
1 791
( 8DI 9 >HI 311
1 611 S >NI 26)
i e:»

1 631 9 1
1 641 t 2

r
1 151 I I t
1 «61 I0EIIT I | t
1 071 NOien t I u
1 «81
M» I I tRPM
i e» S 1
a? S FZI*CU
s >Hi i n
«»»»
e<i
»
S
«team
«III M l 3U1U0H | |
1 «»l nui» I I
i m 3 'NI 31I rouiiEX I I
i n» »• 1 I
i «> 3 J1CC9I
«ii 3 'III « I I
1 HI M*. I t 3 sin sal
1 » i 3 1
1 «41 niriu I I i

i n 3 sill 311
»ii 3 '111 I I I
1 «1

FEPtGHPROQRA>)] 3
- 321 -

Annexe D : DESCRIPTION DE LA TABLE TCONF1 ,


COMMUNE AUX PROGRAMMES DE COMPILATION.

1) numéro de la carte en cours de traitement.


2) Longueur da symbole courant.
3) Longueur du symbole suivant.
4) Valeur du pointeur colonne dans une carte.
5) Ordre du système et nombre de variables.
6) Dernière position occupée dans la table VALEUR des constantes
numériques.
7) Dimension maximale de la table VALEUR (102, par défaut).
8) Genre du symbole courant.
9) Genre du symbole suivant.
10) Numéro de l'équation traitée.
11) Dernière position attribuée dans la table 5 de sauvegarde des
éléments du Jacobien.
12) Compteur du nombre de parenthèses.
13) Nombre total de cartes du programme-source.
14) Indicateur de choix du message d*erreur choisi, avant d'appeler
le programme ERREUR! .
15) Dernière position occupée dans la table, NOKFONC, des fonctions.
16) Dernière position occupée dans la table, NOMXDENT, des noms
variables.
17) Dernière position occupée dans la zone des conflits de la table
mSlée HASHTAB (= 256, initialement).
- 322

18) Indicateur de premier appel au programme LINSCAN afin d'initiald


ser les tables de décodage par appel au programme MISETAB.
19) Dimension maximale autorisée pour la table NOMFONC, des fonctioi
(= 75).
20) Nombre d'enregistrements, sur le fichier DISERKE, écrits par le
programme ERREUR, à la phase d'analyse ou par le programme ERRFt
à la phase de synthèse.
21) Dernière position occupée dans la pile polonaise (POLO, POLT).
22) Dimension maximale autorisée pour la pile polonaise (600, par
défaut).
23) Dernière position occupée dans la table, HASHVAL, de chaînage
constantes-équations (TC0MP1(7) + 1, initialement).
24) Dimension maximale autorisée pour la table HASHVAL (5 * TC0MP1('
25) Indicateur LIN ou NLIN (LIN, par défaut).
26) Indice atteint lors du prétraitement des équations par CALDBRI
Exploité par le programme LINEDER.
27) Dernière position occupée dans la table, HASHNOM, de chaînage
variables-équations (TC0MP1(?) + 1» initialement).
28) Dimension maximale autorisée pour la table HASHNOM (7 * TCOMPl(.
29 a 32) Positions non utilisées.
33) Compteur du nombre de quadruplets du type 0 (équations).
34) Compteur du nombre de quadruplets du type 1 (équations).
35) Compteur du nombre de quadruplets du type 2 (équations).
36) Compteur du nombre de quadruplets du type 3 (équations).
37) Dernière position occupée dans les tables» CI, VT et SP, de
description de la matrice sous forme de tableau creux.
38) Indicateur d'option OBJET (si demandée = 1, sinon = 0 ) .
39) Indicateur d'option CHAINAGES (si demandée =* 1, sinon = 0 ) .
40) Indicateur d'option EDITION (si demandée = 1, sinon = O ) .
41) Compteur du nombre de quadruplets du type 3 (jacobien).
42) Compteur du nombre de quadruplets du type 5 (jacobien).
- 323 -

43) Compteur du nombre de quadruplets du type 6 (jacobien).


kk) Compteur du nombre de quadruplets du type 1 (fonctions d'erreur).
45) Compteur du nombre de quadruplets du type 2 (fonctions d'erreur).
46) Compteur du nombre de quadruplets du type 3 (fonctions d'erreur).
47) Hauteur des courbes ( = 30, par défaut ) .
48) Indicateur d'option COURBES (= 2) ou SORTIES (= 1).
49) Indicateur d'appel du programme TRTVARI. Retourne le rang de la
variable se trouvant dans IDENT.
50) Indicateur utilise par l'analyseur lexicographique (si fin nor­
male = 0, sinon <• 0).
- 325 -

BIBLIOGRAPHIE

(ÂlÔJ AHO, DENNING,-ULLMAN


Veak and Mixed Strategy Precedence Parsing
JACM 19:2 pp. 225-243 ( 1972 ).
fA1l] ABO, HOPCROFT, ULLMAN
Time and Tape Complexity of Pushdovn Automaton. Languages
Information and Control 13:3 PP-186-206 (1968).
(Âl2~) AHO, ULLMAN
The Theory of Parsing, Translation and Compiling
Vol. 1 : Parsing
Vol. 2 : Compiling
Prentice-Hall, Englewood Cliffs, N.J. (1972-1973).
[BIO] BASTON
The Organisation of Symbol Tables
CACM 8:2 pp. 111-112 (1965).
fB2Ô) BAUER, BECKER, GRAHAM
ALGOL V Language Description
Computer Science Department. Stanford University (1968).
FBZÎ] BAUER, BECKER, GRAHAM
ALGOL V Implementation
Computer Science Department. Stanford University (1968).
[B3O] BAZERQUE
Programmation des Systèmes Informatiques
Tome 2 ENICA (1970).

[B4O1 BERGE
Théorie des Graphes et ses Applications
DUNOD (1963).
(W) BERGE
Graphes et Hypergraphes
DUNOD (1970).
- 326 -

(Ë50) BROISE
^ Communication aux Journées sur l'Analyse Syntaxique
PARIS (1967).
[B51~) BROISE
^ Presentation d'un Jeu d'Algorithmes Permettant d'Effectuer
Commodément Quelques Opérations sur les Graphes dans le Cadre
de la Notation ALGOL
6ème Congrès de l'APIRO (NANCY 1°67)-
{Boo] BONNEMAY, DANSAC BON, MONSEF, NAKHLE, 3.0VX
NEPTUNIX, A Package For Continuous System Modeling.
Application to Nuclear Reactors
2nd International Symposium on Large Engeneering Systems
University of Waterloo, Ontario, Canada (May 1978).
fci 0] CHAUVIN
Conception et Mise au Point d'un Compilateur BASIC sur GE55
Université de Paris-Sud, Centre d'ORSAY
Thèse de Docteur-Ingénieur (1972).
fc2Ô] CHEATHAM
The Theory and Construction of Compilers
Computers Associates Inc., Wakefield Mass. (1967).
[C3Ô] CHOMSKY, SCHOETZENBERGER
The Algebraic Theory of Context-Free Languages
Computer Programming and Formal, Systems, North-Holland,
Amsterdam (1963).

Q331] CHOMSKY
Formal Properties of Grammars
Handbook of Mathematical Psychology, vol. 2, Wiley, N.Y. (196:
QjfcÔJ COURCELLE
Une Forme Canonique pour les Grammaires Simples Déterministes
RAIRO aème année R1 pp. 19-36 (197*0 •
(ï>1 S]) DEBRAINE
Machines de Traitement de l'Information
Tomes I et II. Masson et Cie (1969).
Q}1 î) DEBRAINE
Langages Formalisés et Analyse syntaxique
Notes de Cours (1974).
(pi2] DEBRAINE
Programmation Structurée
Compte-rendu de conférences (1976).
Q>-;ô] DIJKSTRA
A Discipline of Programming
Prentice-Hall, Englewood Cliffs, N.J. (1976).
[031") DIJKSTRA
Algol-60 Translation
Annual Review of Automatic Programming 3. Pergamon-Press Oxfoj
PP 329-356 (1963).
- 327 -

(p4o") DANSAC-BON
Modèle Mathématique d'un Générateur de Vapeur
Université de Paris-Sud, Centre d'Orsay, Thèse de Docteur
3ème Cycle (1978).
(Bio} EICKEL, BAUER, .SAMBLSON_"J
A Syntax-Controlled Generator of Formal Languages Processors
CACM 6:8 pp. 451-455 (1968).
(E2oJ EVANS
An Algol-60 Compiler
Annual Review in Automatic Programming, vol. 4, pp 87-124 (1964).
I*F10] FIELDMAN, GRIBS
Translator Vriting Systems
CACM 11:2 pp. 79-113 (1968).
(F2O) FLOYD
Syntactic Analysis and Operator Precedence
JACM 10:3 pp. 316-333 (1963).
(F2I1 FLOYD
An Algorithm for Coding Efficient Arithmetic Operations
CACM 4:1 pp. 42-51 (1961).
(K») FLOYD
A Descriptive Language for Symbol Manipulation
JACM 8:4 pp. 579-584 (1961).
(V30] F0S1ER
Automatic S y n t a c t i c A n a l y s i s
Mac Donald and CO., London ( 1 9 7 0 ) .
[F31] FOSTER
A Syntax Improving Program
C.J. 11 pp. 31-35 ( 1 9 6 8 ) .
(GIO] GEAR
Numerical Solution of Differential ^Equations at ,a_Remote_ Terminal
Proeedings ACM "National Meeting"pp. 43-49 ( 196.6).
[Gill GEAR
High Speed Compilation of Efficient Object Code
CACM 8:8 pp. 483-487 (1965).
[G2O] GRAU, BILL., LANGHAACE
Translation of Algol-60
Springer Verlog, Berlin (1967).

(Ô30] GRAY, HARRISON


Single Pass Precedence Analysis
IEEE Conf. Record of 10th Annual Symposium on Switching and
Automata Theory pp. 106-107 (1969).
(G4O] GRIES
Use of Translation Matrices in Compiling
CACM 11:1 pp. 26-34 (1968).
- 328 -

fG4ll GRIES
Compiler Construction for Digital Computer
Wiley & Sons (1972).
[GSO] GROSS, LENTIN
Notions sur les Grammaires Formelles
Collection Programmation, Gauthier-Villars Paris (1972).
(G6O] GANTMACHER
Théorie des Matrices (traduit par SARTHOU)
Tome 1 : Théorie Générale
Tome 2 : Questions spéciales et Applications
DUNOD, Paris (1966).
(HIC] HARARY
Graph Theory
Addison-Wesley Reading, Mass. (1969).
[HI il HARARY
Graph Theory and Theoretical Physics
Academic Press, London (1967).
(HIZ) HARARY, NORMAN, CARTWRIGHT
Introduction à la Théorie des Graphes
DUNOD, Paris (1968).
(H2O] HARRISON
Introduction to Switching and Automata Theory
Mac-Graw Hill N.Y. (1965).
(H3O1 HECHT, ULLMAN
Flow Graph Roducibility
SIAM Journal Computing 1 (June 1970).
[k l]
3 HECHT, ULLMAN
Analysis of a Simple Algorithm for Global Flow Problems
ACM Symposium, Boston, (October 1973).
[HW) HOPCROIT, ULLMAN
Formal Languages and Their Relation to Automata
Addison-Wesley, Reading, Mass. (1969).
(l1 0^ IBM Y20-0111 -0
System/360 Continuous System Modeling Program
( 360A-CX-16X).
[ill] IBM C 28-6514-5
Operating System : Assembler Language.
(l12] IBM SC 3 3 - 0 0 0 7 - 1
OS-PL/I Checkout Compiler : Programmer's Guide.
[l20] ICHBIAH, MORSE
Optimal Generation of FLOYD-EVANS Productions For Precedence
Grammars
Cil, Les Clayes-sous-bois (1969).
- 339 -

fl3o") INGERMANN
A Syntax-Oriented Translator
Academic Press, N.T. (1967).
(J10J JOHNSON, POKIER, À.CSLBX, ROSS
Automatic Generation of Efficient Lexical Processus Using Finite
State Techniques.
CACM 11:12 pp. 805-612 (1968).

\pÔ] KNDTH
Top-Down Syntactic Analysis
International Summer School on Advanced Programming Languages
Copenhague (1967).
(Kill KNDTH
The Art of Computer Programming
Vol. 1 Fundamental Algorithms (1968, 1973)
Vol. 2 Seminumerical Algorithms (1969)
Vol. 3 Sorting and Searching (1973)
Addison-Wesley, Reading, Mas.

[Ë12] KNUTH
On the Translation of Languages from Left to Right
Information and Control 8, p. 607 (1965).
[L1 0] LAPLACE
f
FORmac DEsk CALculator. Un outil de mise au point et d aide au
calcul formel sur ordinateur
Thèse Se. Math. Grenoble (1973).
(L20] LAPORTE, VIGNES
Algorithmes Numériques ; Analyse et Mise en Oeuvre
1- Arithmétique des Ordinateurs ; Systèmes Linéaires
Paris, TECHNIP (1974).

[M10] MACHER
An Improved Hash Code for Scatter Storage
CACM 11:1 pp. 35-38 (1968)-
[M2O] MCNAMEE
Algorithm 408. A Sparse Matrix Package
CACM 14:4 pp. 256-293 (1971 )•
fioo") MONSBF
Contribution à ia Résolution de Grands Systèmes Algébro-Oiffé-
rentiels.
Université de Paris-Sud, Centre d'Orsay
Thèse de Docteur Es-Sciences Physiques (1977).
[M31I HONSEF, ZVÎNGELSTEIN
Intégration des Equations Cinétiques d'un Réacteur Nucléaire par
le Programme Neptune. Comparaison avec les méthodes classiques.
CEA N/797 (1975).
- 330 -

[M4oJ Morven GENTLEMAN, GEORGE


Sparse Matrix Software
Sparse Matrix Computations (Ed. D.J. Rose, J.R. Bunch)
Academic Press Inc. N.Y. pp. 2^3-261 (1976).

(NI O] NEEL
Les Langages de Simulation des Phénomènes Continus.
IR1A (1971).
(NI i) NEEL
Contribution à l a Formalisation de l'Amélioration de Code par
Attributs Sémantiques
Thèse de Docteur Es-Sciences, Paris VI (1975).

[N20] NOTAT
T r a n s d u c t i o n d e s l a n g a g e s de Chomsky
A n n a l e s de l ' I n s t i t u t F o u r i e r 18 p p . 339-^56 (1968).

Q130] NAKHLE
Etude et Réalisation d'un Mini-Compilateur PL/1 pour la RésolL
tion des Réseaux Electroniques n o n Linéaires
I - Principes SES/PUB/SERF/74-130 (Juin 1974)
II - Programmation SES/POB/SERF/74-131 (Juin 1974)

[N3\] NAKHLE
Codes d ' E x é c u t i o n d ' u n Langage de S i m u l a t i o n Numérique Muni
d'une Dérivation Formelle
SES/INT./SERF/77-162 ( J u i l l e t 1977).

(N32J NAKHLE, ROUX


NEFl'UNiï, Manuel d e l ' U t i l i s a t e u r
SES/INTBRNE/SIR/77-276 (Novembre 1 9 7 7 ) .

(N33") NAKHLE, ROUX


Notice d'Exploitation de NEPTUNIX 1
SES/INTERNE/SIR/78-21 6 (Octobre 1 9 7 8 ) .

[N3Î] NAKHLE, RODX


Large Systems Real Time Simulation on Mini-Computers
(à paraître) M A C S Congress, Sorrento (September 1 9 7 9 ) .

(pi 0] PAIR
Trees, Pushdown-Stores and Compilation
RFTI - Chiffres 7:3 pp. 199-216 (1964).

(Vl 1] PAIR
L'Algorithme d'Analyse S y n t a x i q u e de P . Broise
RFIRO (1971).

(pi 2] PAIR
Sur des Notions Algébriques Liées à l'Analyse Syntaxique
RFIRO (1970).
- 331

frl 3) PAIR
Sur des Algorithmes pour les Problèmes de Cheminement dans les
Graphes Finis
THEORIE DES GRAPHES
DUNOD, Gordon-Breach pp. 271-300 (1966).
[pUj PAIR, DEENIAME
Problèmes de Cheminement dans les Graphes
DUNOD (1971)-
(PI5) PAIR, QUEHE
Définition et Etude des Bilangages Réguliers
Information and Control 13 pp. 565-593 (1968).

(RIO] RANDELL, RUSSEL


Algol-60 Implementation
Academic Press, N.T. (1964).

("RSO) ROSSIENSKY
Théorie et Construction des Compilateurs
Rapports DCE nos 316, 320, 328 CEA, Saclay.
fool ROSS
A Generalized Technique for Symbol Manipulation and Numerical
Calculation.
CACM 4 p. 147 (1961).
(il3ll ROSS
The AED Free Storage Package
CACM 10 p. 481 (1967).
(R40~) RUGGXU, AIGRAN
Description of APL Operators. Simplification and Interpretation
of APL expressions
APL Congress pp. 401-405 (1973).
(siol SAMELSON, BAUER
S e q u e n t i a l Formula T r a n s l a t i o n
CACM 3 PP. 76-83 ( I 9 6 0 ) .

(s2ol SCHOLZ
Control of Nuclear Reactors and Power Plants
Mc Graw Hill (1961).
fs3o") SIMONET
Une Grammaire Context-Free d'Algol-68
Congrès de l'AFCET, Paris (1970).

fn 0] TABODRIEOH
Compilateur ALGOL. Analyses Syntaxique et Sémantique
Thèse de Docteur 3ème Cycle. Université de Paris (1971).
[T20] TARJAN
Graph Theory and Gaussian Elimination
Sparse Matrix Computations (Ed. J.R. Bunch, D.J. Rose)
Academic Press Inc. N.Y. pp. 3-22 (1976).
- 332 -

[T3O] TOBEY, BAKER, CREWS, MARKS, VICTOR


PL/1-FORMAC Interpreter, User's Reference Manual
IBM-Boston Programming Center.
(Vio] VIGNES, LÀPORTE
Etude Statistique des Erreurs dans l'Arithmétique des Ordina-
teurs. Application au Contrôle des Résultats d'Algorithmes
Numérique 3.
Num. Math. 23 pp. 63-72 (1974).

fjmj VIGNES, LAPORTE


Evaluation de l'Incertitude sur la Solution d'un Système
Linéaire.
Num. Math. 23 PP- 39-47 (1973).
fin ol WEBER
A Microprogrammed Implementation of EULER on IBM 360/30
CACH 10 pp. 549-557 (1967).
(Vlll WIRTH, WEBER
EULER a Generalization of Algol and its Formal Definition
CACM 9:1 pp. 13-23 (1966)
CACM 9=2 pp. 89-89 (1966).
(V20l WALLACH
Study and Compilation of Computer Language
Gordon and Breach Science Publishers (1974).
fool WILKINSON
The Algebraic Egeinvalue Problem
Clarendic Press, Oxford (1965).
AICA
Proceedings of the Symposium "SIMULATION LANGUAGES FOR DYNAMIC
SYSTEMS"
London, England, September 8-10, 1975.

Mtnuxrit rwçu /f Î4 mti 1979


Achevé d'imprimer
par
le CEA, Service de Documentation, Saclay
Juin 1979

DEPOT LEGAL
2ème trimestre 1979
[

La diffusion des rapports et bibliographies du Commissariat à l'Energie Atomique


est assurée par le Service de Documentation, CEN-Saclay, B.P. n° 2,
91190 Gif-sur-Yvette /France)

Reports and bibliographies of the Commissariat à l'Energie Atomique are available


c
from the Service de Documentation, CEN-Saclay, B.P. n 2,
91190 Gif-sur-Yvette /France)
Edité par
te Senf're de Documentation
Centre d'Etudes Nucléaires de Sac/ay
Boîte Postaie n° 2
91190 - Gif-sur-YVETTE (France)

Vous aimerez peut-être aussi