English
de 1984 à 1986 : Compilateur C V0
Langage CLe Système Pick Réalisation d'un Compilateur C pour un système atypique :
Le système IN-Pick.



Embauché à la sortie des études dans le service Base de données et Langages, et plus précisément dans le groupe langage, le premier projet auquel j'ai participé à été la réalisation d'un Compilateur C pour le système IN-Pick sur la gamme IN-500 IN-5000.

C'était un défi multiple à l'époque : à la fois prouver à la direction que la maîtrise du système allait beaucoup plus loin que sa seule maintenance, et aussi permettre le portage  d'applications externes sur notre système. Et ce fut une réussite: IN-Pick a été le seul système PICK à posséder un compilateur C .... le projet fut achevé en 1986

Le Compilateur C a été réalisé par une équipe de 2 personnes, plus le chef de service (à temps partiel.....)

Dans ce projet, j'ai réalisé le générateur de code, l'éditeur de liens, tout le runtime, ainsi que les fonctions de la bibliothèque standard (adaptées au sgf particulier du système Pick). j'ai aussi participé en collaboration avec le chef de service à l'analyse syntaxique. Une autre personne était en charge de l'analyse sémantique.

 

L'Analyse Syntaxique.

Comme son nom l'indique, l'analyse syntaxique, est la passe du compilateur, qui repère si le source qu'on lui donne à compiler est conforme à la syntaxe du langage.

exemples de code C non syntaxiquement correct: il manque un ;
ou for i=1 to 10 qui est du Basic et non du C, ou bien même le texte que vous êtes en train de lire

Dans ce projet, l'outil qui a été utilisé est l'outil présent dans le système qui était déjà utilisé pour le Basic : Meta

Je m'en suis inspiré pour développer à titre personnel mppksag : Un générateur d'Analyseur Syntaxique.

L'Analyse Sémantique.

Comme son nom l'indique, l'analyse sémantique, est la passe du compilateur, qui repère si le source qu'on lui donne à compiler est conforme à la sémantique du langage. elle se sert des résultats de la passe précédente: elle n'analyse que du code syntaxiquement correct, les différents éléments constitutifs de la syntaxe ont déjà été repérés. elle détecte entre autre la validité des opérations entre les différents types.

exemples de code C syntaxiquement correct et sémantiquement non correct

void main()
{
    int a;
    char *p = "coucou";
    char *q = "c'est nous";
    a = p+q;
}

on ne peut pas additionner 2 pointeurs pour donner un entier.

Cette passe se charge aussi de l'allocation des variables en fonction de leur taille.

Le Générateur de Code.

Cette passe consiste à générer le code dans le langage assembleur de la machine cible. Dans le projet en question, la difficulté venait de la structure de la machine Pick (partitions de 512 octets), ce qui obligeait a pas mal de gymnastique pour simuler une machine  a mémoire contiguë standard. de même la pile utilisateur étant limitée à 3 niveaux, il a là aussi fallu faire du développement spécifique.

L'éditeurs de liens.

C'est le module qui s'occupe de résoudre les références, entre les différents objets issus des différentes unités de compilation, ainsi qu'avec les fonctions de la bibliothèque standard.

Le Runtime.

C'est tout l'environnement nécessaire à l'exécution correcte d'un programme C: initialisation du contexte, allocation des différentes zones mémoire (tas, zone statique et globale, pile, paramètres, etc.)

Là aussi, la structure très particulière du système Pick a nécessité pas mal de développements spécifiques.

Les Fonctions de la Bibliothèque Standard.

Autre gros morceau: toute la bibliothèque standard telle que définie dans le "Kernighan & Ritchie"  printf scanf, fopen, etc . et comme d'habitude, implémenter ces fonctions en tenant compte des particularités du système Pick.

Sommaire
 

 
Rechercher