:: Enseignements :: ESIPE :: E4INFO :: 2009-2010 :: Analyse syntaxique ::
[LOGO]

Analyse lexicale


Le but de ce TD est de manipuler des expressions rationnelles, puis de concevoir un ensemble de règles lexicales permettant de reconnaître les lexèmes d'un petit langage.

Exercice 1 - La commande grep

Taper une commande shell utilisant grep qui recherche dans la sous-arborescence de /etc:
  • les lignes contenant la chaîne de caractères IPV6 sans tenir compte de la casse ;
  • les lignes qui commencent par une variable en majuscule suivie de = ;
  • les lignes qui ne contiennent qu'une chaîne de caractères alphabétiques, éventuellement entourée d'espaces ou de tabulation.
La documentation des expressions rationnelles de grep est accessible à partir de l'URL suivant : http://www.gnu.org/software/grep/doc/grep_7.html#SEC7

Exercice 2 - Expressions rationnelles

Dans cet exercice, pour tester vos expressions rationnelles, vous utiliserez le programme visual regexp dont les expressions rationnelles ont une syntaxe rappelée par une aide succincte accessible via le menu View -> Show regexp help
Écrire des expressions rationnelles pour reconnaître:
  • les chaînes de caractères du C ;
  • les entiers (décimal, hexadécimal 0x... et octal 0...) (voir exemple) ;

Exercice 3 - Analyse lexicale

Dans cet exercice, nous souhaitons reconnaître les différents lexèmes des programmes écrits dans le petit langage illustré par l'exemple ci-dessous :
Les différents types de lexèmes (ou tokens) sont :
  • des variables: des séquences commençant par une lettre suivie optionnellement de lettres, chiffres et '_';
  • des mots-clés: print, if, else
  • des parenthèses: ( et )
  • des opérateurs arithmétiques : +, -, /, *
  • un symbole d'affectation : =
  • des comparateurs: >=, <=, ==, !=, >, <
  • une fin d'instruction: retour à la ligne
  • des doubles
Pour chaque lexème reconnu, l'analyseur devra indiquer son type. Par exemple, le token VAR1 sera reconnu comme variable.

Pour effectuer cette tâche, vous devrez utiliser un analyseur lexical se basant sur Tatoo.

  1. Télécharger et décompresser l'archive simple-lexer.zip.
  2. Lire le README et tester sans modifier les règles lexicales sur le fichier test.txt. Que fait cet analyseur?
  3. Modifier les règles lexicales dans le fichier simple-lexer.ebnf pour reconnaître les lexèmes définis ci-dessus. Vous trouverez de l'aide pour l'écriture des règles dans la documentation décrivant le fichier de spécification EBNF.
  4. Compiler l'analyseur.
  5. Lancer l'analyseur sur le fichier exemple_langage.txt.