CHAPITRE 4 : BASES DE LEX



Documents pareils
Interpréteur d algèbre relationnelle

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Introduction au langage C

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Les structures. Chapitre 3

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UE Programmation Impérative Licence 2ème Année

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

1 Introduction au codage

Informatique Théorique : Théorie des Langages, Analyse Lexicale, Analyse Syntaxique Jean-Pierre Jouannaud Professeur

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Exemple d application: l annuaire DNS Claude Chaudet

Compilation. Algorithmes d'analyse syntaxique

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Définitions. Numéro à préciser. (Durée : )

Calculabilité Cours 3 : Problèmes non-calculables.

TP 1. Prise en main du langage Python

Rappels sur les suites - Algorithme

L import massif introduit plusieurs nouvelles fonctionnalités, selon que l on importe un thésaurus, un ensemble de valeurs contrôlées ou un corpus.

Chap III : Les tableaux

Algorithmique et Programmation, IMA

Quelques éléments de compilation en C et makefiles

Évaluation et implémentation des langages

TD3 - Facturation avec archivage automatisé

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Bases de programmation. Cours 5. Structurer les données

Algorithmique des Systèmes Répartis Protocoles de Communications

Algorithmique et programmation : les bases (VBA) Corrigé

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Théorie des Langages

Fiche d utilisation du logiciel. 1 - Installation. J. Thioulouse & D. Chessel

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

STAGE IREM 0- Premiers pas en Python

Objets Combinatoires élementaires


Introduction à MATLAB R

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Université Paris-Dauphine DUMI2E 1ère année, Applications

Informatique Générale

Grammaires d unification

Les chaînes de caractères

Détection de fuite hélium Aspect Mesure

La reconquête de vos marges de manœuvre

Théorie de la Programmation

Programmation C. Apprendre à développer des programmes simples dans le langage C

PROGRAMME DETAILLE. Parcours en première année en apprentissage. Travail personnel CC + ET réseaux

Cours 1 : La compilation

Définition des Webservices Ordre de paiement par . Version 1.0

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Programme awk------introduction rapide

Optimisation de logiciels de modélisation sur centre de calcul

Annexe : La Programmation Informatique

Générer un analyseur avec Flex&Bison

IFT3902 : (Gestion de projet pour le) développement, (et la) maintenance des logiciels

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Fondements de l informatique Logique, modèles, et calculs

Analyse et programmation 1

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Introduction à PHP. Au sommaire de ce chapitre

Utilisation d objets : String et ArrayList

Environnements de développement (intégrés)

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

bbc Launch Pad Juillet 2011 Version 10.0

Traduction des Langages : Le Compilateur Micro Java

Programme et contenus Licence d'informatique de Lille, parcours MIAGE, en alternance ou en formation continue (13:40)

Rappels Entrées -Sorties

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Exercices - Polynômes : corrigé. Opérations sur les polynômes

1S Modèles de rédaction Enoncés

O b s e r v a t o i r e E V A P M. Taxonomie R. Gras - développée

Plateforme PAYZEN. Définition de Web-services

C f tracée ci- contre est la représentation graphique d une

Manuel de référence des commandes SMS Advisor Advanced

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation système I Les entrées/sorties

Mise en œuvre des serveurs d application

Licence Sciences et Technologies Examen janvier 2010

Plus courts chemins, programmation dynamique

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Java Licence Professionnelle CISII,

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

UE C avancé cours 1: introduction et révisions

Projet Matlab : un logiciel de cryptage

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Créer le schéma relationnel d une base de données ACCESS

Formula Negator, Outil de négation de formule.

Installation Serveur DNS Bind9 Ubuntu LTS

Recommandations pour la définition des appareils de mesures utilisés en protection cathodique

Systèmes en réseau : Linux 1ère partie : Introduction

Aide-Mémoire unix. 9 février 2009

Chapitre I Notions de base et outils de travail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Transcription:

CHAPITRE 4 : BASES DE LEX

Analyse lexicale (rappel) L analyse lexicale consiste à déterminer le, «statut» de chaque mot, c est-à-dire l unité lexicale (ou token) qui lui correspond. Les unités lexicales sont généralement définies par des expressions rationnelles. Le problème de base à résoudre est donc : Données : un mot w, un langage rationnel L (donné par une expression rationnelle) Question : w L?

Analyse lexicale (suite) Le problème plus général de l analyse lexicale est : Données : un (long) mot w (= le texte à analyser) Un ensemble de langages L 1, L 2,, L k définis par des expressions rationnelles. Problème : décomposer w en une concaténation de mots w 1 w 2 w n de sorte que chacun des w i appartient à un L j. Si une telle décomposition n est pas possible, le texte est lexicalement incorrect. Si la décomposition est possible, l analyseur effectuera une ou des actions pour chaque w i. (La décomposition doit être unique.)

Analyse lexicale : méthode Idée générale : construire un automate fini à partir de l expression rationnelle. (Rappel du théorème de Kleene : tout langage rationnel est reconnaissable.) Lex permet de programmer des analyseurs lexicaux en s affranchissant totalement des problèmes de création et de gestion des automates.

Lex : schéma d utilisation Programme source lex toto.l Compilateur lex $ lex toto.l Programme source C lex.yy.c Compilateur C $ gcc lex.yy.c -ll Programme exécutable $ a.out

Lex : généralités Histoire 1975 développé aux laboratoires Bell A l origine un outil de Unix, aujourd'hui aussi pour Windows A l origine pour C, Aujourd hui aussi pour Java Coopère généralement avec Yacc Versions actuelles flex version GNU de Lex (pour C) http://www.gnu.org/software/flex/ JLex version Java (avec légères différences dans la syntaxe) http://www.cs.princeton.edu/~appel/modern/java/jlex/ CsLex version C#, dérivé de JLex

Structure d un programme lex Déclarations %% Règles de traduction %% Fonctions auxiliaires

Structure d un programme lex Déclarations %% Règles de traduction Obligatoires pour séparer les trois parties. %% Fonctions auxiliaires

Partie 1 : Déclarations Cette partie peut comprendre des déclarations de variables et de constantes en C, délimitées par «%{«et «%}» (les délimitateurs sont toujours en début de ligne). des «définitions régulières» qui permettent de donner des noms à des expressions régulières qui seront utilisées dans les règles de traduction. (Cette partie peut aussi être vide.)

Partie 2 :Règles de traduction Elles sont de la forme suivante : m 1 {action 1} m 2 {action 2}... m n {action n} où les m i sont des expressions régulières lex et les actions sont des suites d instructions en C. Elles décrivent ce que l analyseur lexical doit faire lorsqu il reconnaît un lexème (un mot du texte) qui appartient au langage m i correspondant.

Expressions régulières en lex Alphabets: codes ISO, ASCII, etc Expressions régulières forme de Kleene via des méta-opérateurs (concaténation, le est omis ) (alternative) (répétition) ( ) exemple: les identificateurs C Id = (a b.. z A.. Z _) (a b.. z A.. Z _ 0.. 9)

Expressions régulières en lex Expressions régulières étendues méta-opérateurs [ ] - +? ^ " " \ exemples les entiers: [0-9]+ les identificateurs C: [a-za-z_] [a-za-z0-9_] les chaînes de caractères sans " : \" [^"] \" les commentaires lignes Java: "/ /"

Expressions régulières en lex Les caractères terminaux tous les caractères, sauf les spéciaux l espace est significatif les spéciaux doivent être protégés par " " ou \ Les caractères spéciaux (méta-)

Les expressions autorisées (rappel) Opérations rationnelles e? 0 ou 1 fois l exp e e* 0 ou n fois l exp e (n quelconque) e+ 1 ou n fois l exp e (n quelconque) e f l'exp e f e f l'exp e ou l'exp f e{n,m} l'exp e répétée entre n et m fois (e) l'exp e {D} l'exp obtenue par substitution de D (macro) Sensibilité au contexte e / f l'exp e si suivie de l'exp f ^e exp e en début de ligne e$ exp e en fin de ligne <E>e L'exp e si dans l'état E Caractères. tout caractère sauf \n \c le caractère c, même spécial "abc" la chaine de caractères abc [abc] le caractère a ou b ou c [^abc] un des caractères sauf a, b, c [a-c] le caractère a ou b ou c

Gloutonnerie et priorité Lex est glouton : il essaie toujours de reconnaître le mot le plus long possible. Lorsqu un même mot peut correspondre à deux expressions m i différentes, c est la première qui est prise en compte.

Partie 3 : Fonctions auxiliaires Ce sont des fonctions C qui sont utilisées pour l analyse syntaxique. En général, cette partie contient la fonction main(). Toutefois cette partie peut être vide. Dans ce cas, tout se passe comme si on y avait écrit : main() { yylex() }

Partie 3 : Fonctions auxiliaires La fonction yylex() est la fonction «standard» d analyse lexicale. Son rôle est de lire le texte en entrée standard lettre par lettre et d appliquer les règles définies dans la partie 2 du programme lex.

Exemple de programme lex %% [0-9]+ { } printf( Un entier : %s\n, yytext); [0-9] +. *0-9]* { } printf( Un réel : %s\n, yytext);. {} %%

Deux variables lex indispensables yytext : contient le lexème (le mot lu) qui correspond à l expression reconnue par lex. yyleng : longueur de yytext.

Variante du programme DIGIT [0-9] %% {DIGIT}+ { } {DIGIT} +. {DIGIT}* { } printf( Un entier : %s\n, yytext); printf( Un réel : %s\n, yytext);. {} %%

Commentaires en lex %{ /* ce programme lex reconnaît les entiers et les réels. */ %} DIGIT [0-9] %% {DIGIT}+ { } /* traitement d un entier */ printf( Un entier : %s\n, yytext); {DIGIT} +. {DIGIT}* { } /* traitement d un réel */ printf( Un réel : %s\n, yytext);. {} %%