[PDF] [PDF] Introduction à la compilation - Département dinformatique de l

La configuration de flex est décrite dans un fichier texte (extensions l ou lex) ➢ Flex traduit L'analyseur lexical le plus court recopie le flot d'entrée sur le flot de sortie : Cours de l'analyse reprend avec les autres expressions rationnelles



Previous PDF Next PDF





[PDF] Générer un analyseur avec Flex&Bison - ENIB

Générer un analyseur avec Flex&Bison Généralités Analyse lexicale avec Flex Analyse syntaxique avec Bison Association de Flex et Bison Fabrice Harrouet



[PDF] Chapitre 6 : Outil danalyse lexicale : Flex - Pr ABDELMAJID

Description de Flex Quelques exemples simples Format d'un fichier Flex Prof Abdelmajid Dargham Chapitre 6 : Analyse lexicale avec Flex 



[PDF] Analyse lexicale

Outils automatiques: Flex Révision hiver 2018 p 7 Interface avec l'analyseur lexical entrée analyseur lexical (Lien avec l'horizon de l'analyseur lexical )



[PDF] L3 Informatique Compilation TP01 - ANALYSE LEXICALE 1 Objectif

L'objectif de ce TP est de programmer un analyseur lexical pour le langage L symboles h avec flex, vous pouvez inclure symboles h dans votre fichier flex



[PDF] Thème 1 Analyse Lexicale, Analyse Syntaxique - Laure Gonnord

1 1 Un peu de cours 1 1 1 Analyse Lexicale avec flex Le but de l'analyse lexicale est de transformer une suite de symboles en terminaux (un terminal peut être



[PDF] lex et yacc

lexicales, afin qu'elles puissent être partagées par l'analyseur syntaxique et l' analyseur lexical $ flex calc l produit le fichier : lex yy c qui contient le code en c de 



[PDF] Travaux Pratiques Compilation no1 - IGM

Compiler l'analyseur lexical avec flex tp1-ex1 l, ceci engendre un fichier lex yy c — Compiler le fichier C obtenu avec gcc, puis tester l'exécutable a out obtenu



[PDF] Chapitre 1 Construction dun analyseur lexical : scanner - Free

Après l'analyse syntaxique, on récupère un ensemble de tokens Il s'agit de voir Type 1, grammaire context sensitive avec des règles de type uAv → uwv Reconnu Comment spécifier les tokens lorsqu'on les définit dans flex ? L'idée est 



[PDF] Introduction à la compilation - Département dinformatique de l

La configuration de flex est décrite dans un fichier texte (extensions l ou lex) ➢ Flex traduit L'analyseur lexical le plus court recopie le flot d'entrée sur le flot de sortie : Cours de l'analyse reprend avec les autres expressions rationnelles

[PDF] flex et bison pdf

[PDF] analyseur syntaxique avec flex et bison

[PDF] exercice flex avec correction

[PDF] lex yacc exemple

[PDF] allocution bienvenue association

[PDF] fin de la démocratie athénienne

[PDF] l'apogée d'athènes

[PDF] fondation d'athènes

[PDF] apogée d'athènes date

[PDF] auteurs francophones connus

[PDF] liste des auteurs africains et leurs oeuvres pdf

[PDF] auteurs francophones contemporains

[PDF] littérature francophone est elle une littérature française

[PDF] auteurs francophones africains

[PDF] littérature francophone définition

09/03/22Introduction à la compilation

Nicolas Bedon

Cours de L3

Université de Rouen

https://dpt-info-sciences.univ-rouen.fr/~bedonnic/ puis Enseignement/Compilation

Références

Compilateurs : techniques, principes & outilsA. Aho, M. Lam, R. Sethi et J. Ullman

Flex & Bison : text processing tools J. Levine

Manuels de Flex et Bison

Cours de C

Cours de théorie des langages

Des notions de programmation fonctionnelle et de

programmation objet sont bienvenuesCours de compilation - Nicolas Bedon - Page 2

Modalités20h CM, 12h TD, 18h TP

Contrôle :

-Examen terminal E1 -Un partiel Pa et un projet Pr

-Le projet est obligatoire : il compte pour un tiers de la note ifinale. Sa note Pr est déifinitive.

-Note de session 1 = 2/3*Ecrit + Pr/3

écrit = (E1+Pa)/2

-Examen terminal E2 de seconde session -Note de session 2 : 2/3 E2 + Pr/3

Les notes E1 et Pa ne sont plus prises en compte

La note Pr de projet reste (elle ne se rattrape pas!)Cours de compilation - Nicolas Bedon - Page 3 Sur la nécessité de traduire .section .rodata .LC0: .string "Bonjour !" .text.globl main .type main, @function main:.LFB2: pushq %rbp.LCFI0: movq %rsp, %rbp

.LCFI1: subq $16, %rsp.LCFI2: movl %edi, -4(%rbp) movq %rsi, -16(%rbp) movl $.LC0, %edi

movl $0, %eax call printf movl $0, %eax

leave ret➢ Proche du langage du processeur➢ Impossible pour un être humain non informaticien➢ DiiÌifiÌicile même pour un informaticien

Principes élémentaires: registres adresses routinesCours de compilation - Nicolas Bedon - Page 4

Sur la nécessité de traduire .section .rodata.LC0: .string "Bonjour !" .text .globl main .type main, @functionmain: .LFB2: pushq %rbp.LCFI0: movq %rsp, %rbp.LCFI1: subq $16, %rsp.LCFI2: movl %edi, -4(%rbp) movq %rsi, -16(%rbp) movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax leave retint main(int argc, char *argv[]) { printf(" Bonjour ! »); return EXIT_SUCCESS;}

Notions élémentaires (C): types variables fonctions structures de contrôles évoluéesMais aussi (C++, Java) classes objets méthodesOu encore (ML) pattern-matchingOu encore (Prolog) résolution de contraintes...Cours de compilation - Nicolas Bedon - Page 5

De la nécessité de traduire

Intérêt des langages de haut niveau:

meilleure facilité d'expression séparation des concepts • un concept -> un cadre d'utilisation • un cadre d'utilisation -> un moyen formel de contrôler les erreurs • plus de contrôles = moins d'erreurs meilleure lisibilité • développement en équipe facilité • maintenance facilitée Développement facilité = coûts réduitsCours de compilation - Nicolas Bedon - Page 6

De la nécessité de traduire

offf = "../../resources/mmbox/icon/dvd.1.png" x = "86" y = "50">DVDPlayer

index = "1" on = "../../resources/mmbox/icon/audiocd.2.png" offf = "../../resources/mmbox/icon/audiocd.1.png"

x = "86" y = "50">menuid_01
Application

Analyseur

(parser)Moteur

Données

Conifiguration.....Cours de compilation - Nicolas Bedon - Page 7

Programmation et traductions en chaîne

Langage de haut niveau (ex: AspectJ = Java + aspects)

Traduction

Langage de niveau intermédiaire (ex: Java)

Traduction

Langage de bas niveau (ex: byte-code Java)

Traduction

Langage de la machine (processeur) destinationCours de compilation - Nicolas Bedon - Page 8 Catégories de traducteurs en programmation: compilateur Entrée (ex: prog. C)Sortie (ex: prog. assembleur)Compilateur

Représentation

intermédiaireAnalyseur (parser)Moteur

Données

.....Géné-rateur

Processeurphysique

➢ Analyse de l'entrée➢ Représentation intermédiaire➢ Génération sortie➢ Exécution déléguée au processeur physiqueExemples: gcc javac asCours de compilation - Nicolas Bedon - Page 9

Catégories de traducteurs en programmation: interprète

Entrée (ex: prog. lisp)Interprète

Représentation

intermédiaireAnalyseur (parser)Moteur

Données

.....Processeurphysique

➢ Analyse de l'entrée➢ Représentation intermédiaire➢ Le moteur simule l'action des instructionsdans une implantation d'un modèle de calculExemples: lisp ML javaReprésentation

interne d'un modèle de calculCours de compilation - Nicolas Bedon - Page 10

Du code source au code exécutable

"squelette" de programme source programme cible en langage d'assemblagepréprocesseur code relogeableprogramme source pré-traitécode machine absolu compilateurassembleurchargeur

éditeur de liens

Liens avec l'éditeur et le débogueurbibliothèqueCours de compilation - Nicolas Bedon - Page 11

Du code source au code exécutable :

exemple du C (gcc sous linux)"squelette" de programme source programme cible en langage d'assemblagepréprocesseur code relogeableprogramme source prétraitécode machine absolu compilateurassembleurchargeur

éditeur de liens

Liens avec l'éditeur et le débogueurbibliothèque.c .i .s.oa.out .a .socpp cc1 cc1asldcollect2Cours de compilation - Nicolas Bedon - Page 12

Du code source au code exécutable :

exemple du C (gcc sous linux) #include #include

int main(void) { printf("Hello world !\n"); return EXIT_SUCCESS;}# 1 "hello.c"# 1 ""# 1 ""# 1 "/usr/include/stdio.h" 1 3 4...# 1 "/usr/include/features.h" 1 3 4# 374 "/usr/include/features.h" 3 4# 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4...typedef unsigned char __u_char;...extern int printf (const char *__restrict __format, ...);...# 3 "hello.c" 2

int main(void) { printf("Hello world !\n"); return 0;}cpp hello.c -o hello.i

Les #include sont remplacés par lecontenu des ifichiersLes macros sont remplacées par leurvaleurDes informations sont ajoutées pourpermettre au compilateur d'avoirdes messages d'erreurs signiificatifsCours de compilation - Nicolas Bedon - Page 13

Du code source au code exécutable :

exemple du C (gcc sous linux) gcc -fpreprocessed hello.i -S (produit un ifichier texte : hello.s).ifile"hello.c" .section.rodata.LC0: .string"Hello world !" .text.globlmain .typemain, @function main:.LFB2: .cifi_startprocpushq%rbp.cifi_def_cfa_offfset 16 .cifi_offfset 6, -16movq%rsp, %rbp.cifi_def_cfa_register 6 movl$.LC0, %edicallputs movl$0, %eax popq%rbp.cifi_def_cfa 7, 8ret.cifi_endproc .LFE2:.sizemain, .-main.ident"GCC: (Debian 4.9.2-10) 4.9.2" .section.note.GNU-stack,"",@progbitsCours de compilation - Nicolas Bedon - Page 14

Du code source au code exécutable :

exemple du C (gcc sous linux) as hello.s -o hello.o

nm hello.o0000000000000000 T main U puts Symbole dans la section de texte (code)

Symbole non déifini

Valeur du symbole

➢ Produit un ifichier binaire (chaque instruction assembleur a été traduite en son code opératoire)

➢ Les noms symboliques (variables, routines) des objets déifinis dans l'unité de compilation ont des adresses relatives ➢ Les autres pas encoreCours de compilation - Nicolas Bedon - Page 15

Du code source au code exécutable :

exemple du C (gcc sous linux)

ld -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o

/usr/lib/gcc/x86_64-linux-gnu/4.9/crtbegin.o hello.o -lc

/usr/lib/gcc/x86_64-linux-gnu/4.9/crtend.o /usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crtn.o

➢ Ajoute le code nécessaire à l'exécution du processus ➢ Résout les liens entre les diffférents ifichiers objets ➢ Spéciifie comment doivent être résolus les autres liens (ici, chargement dynamique) ➢ Recalcule les adresses en prévision de la création du processus

➢ Créé l'exécutable a.outCode d'initialisation du processus, de la libc, depréparation de argc et argv,et d'appel à main(argv, argv)Code de réalisation de l'édition de lien dynamique

Code de terminaison de la libc et du processusUtilise la bibliothèque C (libc)Cours de compilation - Nicolas Bedon - Page 16

Du code source au code exécutable :

exemple du C (gcc sous linux) nm a.out

0000000000400358 T _init0000000000600668 t __init_array_end

0000000000600660 t __init_array_start0000000000400550 R _IO_stdin_used

w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable

0000000000600670 d __JCR_END__

0000000000600670 d __JCR_LIST__ w _Jv_RegisterClasses

0000000000400540 T __libc_csu_ifini

00000000004004d0 T __libc_csu_init

U __libc_start_main@@GLIBC_2.2.500000000004004b6 T main

U puts@@GLIBC_2.2.5

0000000000400430 t register_tm_clones00000000004003c0 T _start

0000000000600890 D __TMC_END__0000000000600890 B __bss_start0000000000600890 b completed.6661

0000000000600880 D __data_start0000000000600880 W data_start

00000000004003f0 t deregister_tm_clones0000000000400470 t __do_global_dtors_aux

0000000000600668 t __do_global_dtors_aux_ifini_array_entry0000000000600888 D __dso_handle

0000000000600678 d _DYNAMIC0000000000600890 D _edata

0000000000600898 B _end

0000000000400544 T _ifini

0000000000400490 t frame_dummy

0000000000600660 t __frame_dummy_init_array_entry0000000000400658 r __FRAME_END__

0000000000600850 d _GLOBAL_OFFSET_TABLE_

w __gmon_start__Cours de compilation - Nicolas Bedon - Page 17

Structure interne d'un compilateur

programme ciblegestion de la table des symbolesprogramme source analyseur lexical gestion des erreursanalyseur syntaxique analyseur sémantique générateur de code intermédiaire optimiseur de code générateur de code cibleCours de compilation - Nicolas Bedon - Page 18

Analyse lexicale

quotesdbs_dbs13.pdfusesText_19