Analyse lexicale :
• Définir le lexique du langage source :
o mots-clés (while, if..)
o constantes (10, 0.5, “toto”)
o identifiants, ( x5, _toto, etc)
o signes de ponctuation(‘;’ ‘,’ ‘’.’)
=>spécifier des familles de lexème/unités lexicales
ID = Suites de lettres et de chiffres commençant par une lettre => x4
CST_INT= suites de chiffres entre {0,1,...,9} => 14
CST_DEC = suites de chiffres, un point, une suite non vide de chiffres => .01
Mot clé :
PLUS = {‘+’}|
MULT= {‘*’} | ? Distingués de l’analyse lexicale car il
DIV= {‘/’} | participe à la structure du programme
Première remarque :
• On spécifie ces lexèmes à l’aide de ce qu’on appelle des expressions régulières.
exemple :
o [0 - 9] les chiffres de 0 à 9
o [0 - 9]+ (= un ou plus) les suites non vides de chiffres
o [0 - 9]* (= 0 ou plus) les suites de chiffres éventuellement vide (éventuellement le mot qui contient aucune lettre)
o [0 - 9]*’.’[0 - 9]+ des constantes décimales
o [a-zA-Z][a-zA-Z 0 - 9]* une suite (une déf non ?) des identifiants
o “if” le lexème IF
• Une fois qu’on a définit l’ensemble des ces lexèmes un outil comme LEX permet de générer automatiquement un programme qui prend en entrée une chaîne de caractères et la découpe en lexème (si c’est possible)
exemple :
o x + y
• exemple d’erreur :
o x + 9y (la chaîne 9y n’est pas un mot autorisé dans le lexique)
Un compilateur peut effectivement détecter et afficher une erreur lexicale.
L’analyseur lexical est utilisé comme client de l’analyseur syntaxique. Car l’analyseur syntaxique va demander quel est le lexème et l’analyseur lexical va lui donner le lexème en question.
La compilation fait partie d’un domaine de l’informatique ou les programmes sont directement extrait des spécifications ? cela est vrai pour l’analyseur syntaxique et pour l’analyseur lexical mais cela peut se faire dans d’autre domaine comme par exemples :
• les jeux vidéos
• l’intelligence artificielle (on lui donne un jeu d’exemple et ensuite elle peut s'autogérer)
• les bases de données ( ? possibilité de créer le modèle entité relation puis de le donner à un SGBD pour qu’il crée les tables …)
L’informatique tend à devenir de plus en plus descriptive et moins spécifique et cela peut se faire grâce à la compilation.
Analyse lexicale :
• Définir le lexique du langage source :
o mots-clés (while, if..)
o constantes (10, 0.5, “toto”)
o identifiants, ( x5, _toto, etc)
o signes de ponctuation(‘;’ ‘,’ ‘’.’)
=>spécifier des familles de lexème/unités lexicales
ID = Suites de lettres et de chiffres commençant par une lettre => x4
CST_INT= suites de chiffres entre {0,1,...,9} => 14
CST_DEC = suites de chiffres, un point, une suite non vide de chiffres => .01
Mot clé :
PLUS = {‘+’}|
MULT= {‘*’} | ? Distingués de l’analyse lexicale car il
DIV= {‘/’} | participe à la structure du programme
Première remarque :
• On spécifie ces lexèmes à l’aide de ce qu’on appelle des expressions régulières.
exemple :
o [0 - 9] les chiffres de 0 à 9
o [0 - 9]+ (= un ou plus) les suites non vides de chiffres
o [0 - 9]* (= 0 ou plus) les suites de chiffres éventuellement vide (éventuellement le mot qui contient aucune lettre)
o [0 - 9]*’.’[0 - 9]+ des constantes décimales
o [a-zA-Z][a-zA-Z 0 - 9]* une suite (une déf non ?) des identifiants
o “if” le lexème IF
• Une fois qu’on a définit l’ensemble des ces lexèmes un outil comme LEX permet de générer automatiquement un programme qui prend en entrée une chaîne de caractères et la découpe en lexème (si c’est possible)
exemple :
o x + y
• exemple d’erreur :
o x + 9y (la chaîne 9y n’est pas un mot autorisé dans le lexique)
Un compilateur peut effectivement détecter et afficher une erreur lexicale.
L’analyseur lexical est utilisé comme client de l’analyseur syntaxique. Car l’analyseur syntaxique va demander quel est le lexème et l’analyseur lexical va lui donner le lexème en question.
La compilation fait partie d’un domaine de l’informatique ou les programmes sont directement extrait des spécifications ? cela est vrai pour l’analyseur syntaxique et pour l’analyseur lexical mais cela peut se faire dans d’autre domaine comme par exemples :
• les jeux vidéos
• l’intelligence artificielle (on lui donne un jeu d’exemple et ensuite elle peut s'autogérer)
• les bases de données ( ? possibilité de créer le modèle entité relation puis de le donner à un SGBD pour qu’il crée les tables …)
L’informatique tend à devenir de plus en plus descriptive et moins spécifique et cela peut se faire grâce à la compilation.