La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Introduction : Compilation et Traduction Un compilateur est un programme qui prend comme donnée un programme écrit dans un langage source et le traduit.

Présentations similaires


Présentation au sujet: "1 Introduction : Compilation et Traduction Un compilateur est un programme qui prend comme donnée un programme écrit dans un langage source et le traduit."— Transcription de la présentation:

1 1 Introduction : Compilation et Traduction Un compilateur est un programme qui prend comme donnée un programme écrit dans un langage source et le traduit dans un langage appelé le langage objet. C etc. objet (bas niveau spécifique à chaque type de machine).

2 2 Interpréteurs et preprocesseurs Les interpréteurs sont des programmes qui traduisent directement le programme source en des commandes exécutables immédiatement : LISP, VB, Shell en UNIX. Les préprocesseurs qui effectuent une transformation simple d'un langage évolué dans un autre (ou une version simplifiée du même langage). Le compilateur C est muni d'un préprocesseur pour l'utilisation des commandes include et define.

3 3 programme source programme objet Messages derreur Compilateur

4 Les étapes de compilation 4

5 5 programme source Analyse lexicale Analyse syntaxique Analyseur sémantique Génération du code intermédiaire GestionGestion des tablesdes erreurs Optimisation du code Génération du code Programme objet

6 6 Exemple La traduction de linstruction : position = initial + rate * 60

7 7 Analyse lexicale Il s'agit d'analyser le programme source en y repérant les mots-clés, les identificateurs, d'étiquettes etc… Les caractères lus successivement sont regroupés en lexemes ("token") A certaines unités lexicales sont attachées des valeurs lexicales. Par exemple, quand on rencontre un identificateur, comme initial lanalyseur lexical produit un unité lexicale id et rentre le lexème initial dans la table des symboles, sil ny est pas déjà. La valeur lexicale associée à cette occurrence de id pointera vers lentrée de initial dans la table des symboles. Nous emploierons id1, id2, and id3 pour position, initial, and rate, respectively, de façon à mettre en valeur le fait que la répresentation interne dun identificateur est différente de la suite des caractères qui le forme. La representation de position = initial + rate * 60 après lanalyse lexicale dévient id1 = id2 + id3 * 60

8 8 position = initial + rate * 60 id1 = id2 + id3 * 60 = id1+ id2* id360 Traduction de linstruction Analyseur lexical Analyseur syntaxique Analyseur sémantique

9 9 = id1+ id2* id3inttoreal 60 temp1 = inttoreal (60) temp2 = id3 * temp1 temp3 = id2 + temp2 id1 = temp3 Générateur de code intermédiaire

10 10 Optimiseur de code temp1 := id3 * 60.0 id1 := id2 + temp1 Générateur de code MOVF id3, R2 MULF #60.0, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

11 11 Table des symboles position… initial… rate… …… …… La phase finale dun compilateur est la production du code cible, qui consiste normalement en du code machine translatable ou en code en langage dassemblage.

12 12 Important : L'analyseur lexical a la structure d'un automate fini. Un automate fini qui reconnaît des identificateurs lettre/chiffre lettredélimiteur

13 13 Analyseur syntaxique (parser) L'analyseur syntaxique prend comme source le résultat de l'analyseur lexical. Son résultat est l'arbre de dérivation du mot d'entrée (dont les lettres sont les lexèmes) relativement à la grammaire du langage de programmation. Il détecte en même temps les erreurs (par ex. non correspondance des { et des }).

14 14 Exemple : a * (b + c) expr expr *expr a( expr ) expr + expr b c Si la grammaire contient les règles : exp exp + exp | ( exp ) | id | exp * exp. Cette grammaire est ambiguë.

15 15 Génération du code intermédiaire Le langage intermédiaire est un langage simple du type du "code à trois adresses". Une instruction typique a la forme A := B op C où A, B, C sont des opérandes et op un opérateur binaire

16 16 Code optimisation(facultative) The code optimisation phase attempts to improve the intermediate code, so that faster-running machine code will result.

17 17 Génération du code La différence principale entre le langage intermédiaire et l'écriture finale en code machine réside dans l'utilisation des registres dans lesquels sont effectués les calculs et dans l'attribution d'adresses physiques en mémoire.

18 18 Gestion des erreurs Elle peut se produire à toutes les étapes de la compilation. Par exemple : l'analyseur lexical peut rencontrer des identificateurs mal orthographiés. l'analyseur syntaxique peut détecter une parenthèse manquante. le générateur de code peut détecter une incompatibilité de types entre les opérandes d'un opérateur. la procédure de gestion des tables peut rencontrer un identificateur déclaré plusieurs fois avec des valeurs contradictoires.


Télécharger ppt "1 Introduction : Compilation et Traduction Un compilateur est un programme qui prend comme donnée un programme écrit dans un langage source et le traduit."

Présentations similaires


Annonces Google