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] 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/CompilationRéférences
Compilateurs : techniques, principes & outilsA. Aho, M. Lam, R. Sethi et J. UllmanFlex & 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 2Modalité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/3Les 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, %eaxleave 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 6De la nécessité de traduire
Analyseur
(parser)MoteurDonnées
Conifiguration.....Cours de compilation - Nicolas Bedon - Page 7Programmation 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)CompilateurReprésentation
intermédiaireAnalyseur (parser)MoteurDonnées
.....Géné-rateurProcesseurphysique
➢ 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èteEntrée (ex: prog. lisp)Interprète
Représentation
intermédiaireAnalyseur (parser)MoteurDonné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 10Du 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 12Du code source au code exécutable :
exemple du C (gcc sous linux) #includeint main(void) { printf("Hello world !\n"); return EXIT_SUCCESS;}# 1 "hello.c"# 1 "
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 14Du code source au code exécutable :
exemple du C (gcc sous linux) as hello.s -o hello.onm 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 15Du 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