You are on page 1of 4

Chap I : Structure d’un compilateur

I. Définition : Un compilateur est un programme qui prend en entrée un programme source et produit à la sortie un programme exécutable ; Prog source (Java, C++, C,..) Compilateur Prog exécutable

Un compilateur passe par les étapes suivantes :

II. Les phrases d’un compilateur : 1. Analyse lexicale (scan) : Elle consiste à couper le programme source en des lexèmes (un lexème est la plus petit entité qui a un sens dans le langage de programme, un lexème peut être une affectation, une comparaison, un identificateur...) Les AF permettent de mettre en œuvre cette étape. 2. Analyse syntaxique (parse) : Cette étape consiste à vérifier que les expressions écrite dans le programme source sont bien formés. Le parseur prend en entrée les lexèmes et vérifie les manières d’écriture sont conforme à

la grammaire du langage de programme source. Généralement la syntaxe des langages de programmation est décrite par une grammaire hors contexte. Remarque : Les étapes de « scan » et de « parse » se font en même temps. 3. Analyse sémantique : Permet de vérifier que l’expression a un sens dans le langage source généralement la sémantique d’un langage de programme est décrite par une grammaire sensible au contexte. Remarque : Les trois premières étapes précédentes sont appelés le « front-End » du compilateur. Elles sont généralement automatisées grâce à l’application des résultats du TLA. 4. Génération du code intermédiaire : A partir des instructions écrites dans le programme source le compilateur génère un code intermédiaire pour pouvoir l’exécuter. Exemple : Poste := initial + vitesse * 60 ; [id1] := [id2] [+] [id3] [*] [nombre] ;

5. Optimisation du code : Il s’agit d’éliminer les opérations inutiles dans le code intermédiaire générer Temps1 := [id3]*nb ; [id1] := [id2] +temp1 ; 6. Génération du code cible : Il s’agit de partir d’une représentation intermédiaire optimisé pour aboutir à un code assembleur ou directement du code binaire. Exemple : MOVF MULF id1, R3 #60, R3

MOVF id2, R2 ADDF R3, R1

MOVF R1, id3

III. L’environnement d’un compilateur :

IV. Outils logiciels : Plusieurs outils sont disponibles pour aider à construire des compilateurs : Par exemple : - Générateur d’analyseur lexicaux : ces outil engendre un analyseur lexical sous forme d’expression rationnel (Exemple : Flex, Lex) - Générateurs d’analyseurs syntaxiques : engendre des analyseurs syntaxiques à partir d’une grammaire (Exemple : Yacc, Boison) - Générateurs de traducteurs : engendrer un traducteur à partir de grammaire et de règle sémantique (Exemple : Yacc, Boison).

ChapII : Analyse lexicale

L’analyse lexicale permet de : -Eliminer les caractères inutiles tels que caractère de retour à la ligne, tabulation, commentaire. -Identifier et trouver les parties d’instructions qui sont destinés au compilateur tels que : #definie #include. -Identifier les symboles représentant les identificateurs, les constantes, les réels… -Identifier les mots clés du langage.