Présentation

Article

1 - GÉNÉRALITÉS

  • 1.1 - Phase et passe
  • 1.2 - Notions de grammaires

2 - ANALYSE LEXICOGRAPHIQUE

3 - ANALYSE SYNTAXIQUE

4 - ADRESSAGE DES OBJETS

5 - MODÈLE D’EXÉCUTION

6 - GÉNÉRATION DE CODE

  • 6.1 - Langage cible
  • 6.2 - Générateur de code
  • 6.3 - Adressage des instructions

7 - CONCLUSION

| Réf : H3168 v1

Génération de code
Compilateurs

Auteur(s) : Bernard LORHO

Date de publication : 10 juin 1996

Pour explorer cet article
Télécharger l'extrait gratuit

Vous êtes déjà abonné ?Connectez-vous !

Sommaire

Présentation

Auteur(s)

  • Bernard LORHO : Professeur à l’Université d’Évry Val d’Essonne - Département d’informatique

Lire cet article issu d'une ressource documentaire complète, actualisée et validée par des comités scientifiques.

Lire l’article

INTRODUCTION

La compilation, c’est‐à‐dire la traduction automatisée d’un texte écrit dans un langage de programmation en un texte équivalent dans un autre langage de programmation, est née avec l’informatique. En effet, il est très vite apparu qu’il n’était pas raisonnable de programmer des applications d’une certaine taille et d’une certaine complexité dans les langages rudimentaires que sont les langages machines ou les langages d’assemblage. La raison de base de cette difficulté est simple : ces langages sont modelés sur la structure des machines et sur leur organisation, alors que les utilisateurs ont besoin de mécanismes d’expression qui soient du plus haut niveau possible et adaptés à la formulation de leurs problèmes.

De plus, la nécessité est vite apparue de viser une certaine portabilité qui permette d’écrire des programmes qui soient indépendants d’une machine donnée pour pouvoir les transporter facilement sur une autre machine. La portabilité est devenue une réalité économique forte condamnant la programmation de bas niveau. Celle‐ci n’a pas complètement disparu mais se cantonne à des domaines tout à fait spécialisés où il est indispensable de maîtriser le fonctionnement intime d’une machine.

On peut en fait dire qu’il y a nécessairement compilation dès qu’un programme est écrit. Cela implique que tout utilisateur de l’informatique compile, sans en être conscient dans la plupart des cas, comme M. Jourdain faisait de la prose...

Les langages de programmation ont commencé à se multiplier dès les débuts de l’informatique, certains se spécialisant dans des domaines d’application particuliers, d’autres essayant d’atteindre une certaine universalité. Tous ces langages « de haut niveau » constituent les langages que les compilateurs doivent être capables de traiter. Subsistent bien entendu les langages « de bas niveau » évoqués précédemment, qui sont incontournables car ce sont les seuls langages « natifs » des machines.

Le rôle des compilateurs est, en fait, à partir de programmes écrits dans un langage source, de les transformer en des programmes écrits dans un langage cible, qui peut être un langage de bas niveau ou un autre langage de haut niveau.

Ce processus de traduction doit satisfaire une contrainte très légitime qui est que les programmes cibles résultats de la compilation soient sémantiquement équivalents aux programmes sources, c’est‐à‐dire que leurs exécutions fournissent les mêmes résultats.

Arrêtons-nous un instant sur le fait qu’il peut paraître étrange de traduire un langage de haut niveau en un autre langage de haut niveau. Il y a d’excellentes raisons à une telle démarche : par exemple si, sur une machine donnée, on dispose d’un compilateur du langage C mais pas d’un compilateur d’un langage L et si l’on souhaite malgré tout prendre en compte des programmes écrits en L, il peut être plus facile d’écrire un compilateur de L vers C plutôt que d’écrire complètement un compilateur pour L.

On constate cette tendance croissante à considérer que le langage C (dont un compilateur est présent sur quasiment toutes les machines) constitue un langage cible privilégié pour de nombreux compilateurs car l’universalité de C permet de simplifier la compilation de nombreux langages. Cette démarche a l’avantage supplémentaire d’être indépendante de la machine support et donc de permettre la portabilité d’un compilateur sur plusieurs machines.

Cet article est réservé aux abonnés.
Il vous reste 94% à découvrir.

Pour explorer cet article
Téléchargez l'extrait gratuit

Vous êtes déjà abonné ?Connectez-vous !


L'expertise technique et scientifique de référence

La plus importante ressource documentaire technique et scientifique en langue française, avec + de 1 200 auteurs et 100 conseillers scientifiques.
+ de 10 000 articles et 1 000 fiches pratiques opérationnelles, + de 800 articles nouveaux ou mis à jours chaque année.
De la conception au prototypage, jusqu'à l'industrialisation, la référence pour sécuriser le développement de vos projets industriels.

VERSIONS

Il existe d'autres versions de cet article :

DOI (Digital Object Identifier)

https://doi.org/10.51257/a-v1-h3168


Cet article fait partie de l’offre

Technologies logicielles Architectures des systèmes

(238 articles en ce moment)

Cette offre vous donne accès à :

Une base complète d’articles

Actualisée et enrichie d’articles validés par nos comités scientifiques

Des services

Un ensemble d'outils exclusifs en complément des ressources

Un Parcours Pratique

Opérationnel et didactique, pour garantir l'acquisition des compétences transverses

Doc & Quiz

Des articles interactifs avec des quiz, pour une lecture constructive

ABONNEZ-VOUS

Lecture en cours
Présentation

6. Génération de code

Nous avons quitté la phase d’analyse après avoir construit un arbre. Nous avons vu ensuite l’adressage des objets qui peut se réaliser par un simple parcours de l’arbre avec comptabilisation de la taille et mémorisation de l’adresse relative de chaque objet. Il reste maintenant à décrire la phase de production de code (les Anglo-Saxons disent génération de code) où le compilateur construit le programme cible équivalent au programme source. Cette phase est souvent suivie d’une phase d’optimisation de code qui permet de réarranger et de compacter le code cible en lui conservant son équivalence. Nous n’aborderons pas ce point ici.

6.1 Langage cible

Nous faisons ici le choix d’un langage machine comme langage cible. Présenter un tel langage n’est pas facile car les langages machines sont modelés sur le fonctionnement et l’organisation des machines, et donc peu lisibles. Nous allons esquisser un tel langage, le lecteur intéressé trouvera dans la bibliographie des références plus détaillées.

Notre machine cible est une machine adressable par octets et dispose de n registres généraux R0, R1, ... , Rn-1. Nous avons vu dans l’environnement d’exécution que l’exécution a besoin systématiquement de trois registres d’adresse : le registre d’accès aux variables globales (RG), le registre d’accès aux variables locales de la fonction en exécution (RL), le registre sommet de pile (SP). On décide donc de spécialiser trois des registres généraux pour ces fonctions et on s’interdit de les utiliser pour quoi que ce soit d’autre. Par exemple, on prend les trois derniers mais ce choix n’est pas important.

Les instructions de notre machine sont de la forme générale :

op source, destination

op représente un code opération, source et destination représentent les opérandes sur lesquels l’opération s’effectue.

Parmi les codes opération op possibles, on trouve :

  • MOV (copier le contenu de source dans destination) ;

  • ADD (additionner le contenu de source au contenu de destination avec résultat dans destination) ;

  • SUB (soustraire le contenu de source au contenu de destination avec résultat dans destination) ;

  • MUL...

Cet article est réservé aux abonnés.
Il vous reste 95% à découvrir.

Pour explorer cet article
Téléchargez l'extrait gratuit

Vous êtes déjà abonné ?Connectez-vous !


L'expertise technique et scientifique de référence

La plus importante ressource documentaire technique et scientifique en langue française, avec + de 1 200 auteurs et 100 conseillers scientifiques.
+ de 10 000 articles et 1 000 fiches pratiques opérationnelles, + de 800 articles nouveaux ou mis à jours chaque année.
De la conception au prototypage, jusqu'à l'industrialisation, la référence pour sécuriser le développement de vos projets industriels.

Cet article fait partie de l’offre

Technologies logicielles Architectures des systèmes

(238 articles en ce moment)

Cette offre vous donne accès à :

Une base complète d’articles

Actualisée et enrichie d’articles validés par nos comités scientifiques

Des services

Un ensemble d'outils exclusifs en complément des ressources

Un Parcours Pratique

Opérationnel et didactique, pour garantir l'acquisition des compétences transverses

Doc & Quiz

Des articles interactifs avec des quiz, pour une lecture constructive

ABONNEZ-VOUS

Lecture en cours
Génération de code
Sommaire
Sommaire

BIBLIOGRAPHIE

  • (1) - AHO (A.), SETHI (R.), ULLMAN (J.) -   Compilateurs : Principe, techniques et outils.  -  InterEditions (1989).

  • (2) - FOSTER (J.M.) -   A syntax improving program,  -  Computer Journal, 11 : 1, 31-34 (1968).

  • (3) - JOHNSON (S.C.) -   Yacc – yet another compiler compiler.  -  ATT Report 32, Murray Hill (1975).

  • (4) - KNUTH (D.E.) -   On the translation of languages from left to right.  -  Information and Control, 8 : 6, 607-639 (1965).

  • (5) - KNUTH (D.E.) -   Semantics of context-free languages.  -  Math. Systems Theory, 2 : 2, 127-145 (1968).

  • (6) - KNUTH (D.E.) -   Top-down syntax analysis.  -  Acta Informatica, 1 : 2, 79-110 (1971).

  • ...

Cet article est réservé aux abonnés.
Il vous reste 93% à découvrir.

Pour explorer cet article
Téléchargez l'extrait gratuit

Vous êtes déjà abonné ?Connectez-vous !


L'expertise technique et scientifique de référence

La plus importante ressource documentaire technique et scientifique en langue française, avec + de 1 200 auteurs et 100 conseillers scientifiques.
+ de 10 000 articles et 1 000 fiches pratiques opérationnelles, + de 800 articles nouveaux ou mis à jours chaque année.
De la conception au prototypage, jusqu'à l'industrialisation, la référence pour sécuriser le développement de vos projets industriels.

Cet article fait partie de l’offre

Technologies logicielles Architectures des systèmes

(238 articles en ce moment)

Cette offre vous donne accès à :

Une base complète d’articles

Actualisée et enrichie d’articles validés par nos comités scientifiques

Des services

Un ensemble d'outils exclusifs en complément des ressources

Un Parcours Pratique

Opérationnel et didactique, pour garantir l'acquisition des compétences transverses

Doc & Quiz

Des articles interactifs avec des quiz, pour une lecture constructive

ABONNEZ-VOUS