19.05.2004
Faculté des Sciences Economiques et Sociales
Exercices Série 6 (0.5pt.)
[TP par binômes A rendre avant le 28-05]
Exercice :
Écrivez une application Java qui vérifie si un texte est syntaxiquement correct par rapport à la
grammaire suivante :
instruction ::= affectation | impression
affectation ::= variable "=" expression
variable ::= lettre { lettre | chiffre }
expression ::= [ "-" ] terme { ("+" | "-") terme }
terme ::= facteur { ("*" | "/" | "%") facteur }
facteur ::= variable | nombre | "(" expression ")"
nombre ::= chiffre { chiffre }
impression ::= "imprime" expression
Méthode :
Utilisez la technique de la descente récursive pour écrire votre application (voir les
notes de cours).
Utilisez un analyseur lexical pour lire les symboles terminaux ou directement formés
de terminaux, comme variable et nombre. Vous pouvez reprendre l'analyseur que vous
avez écrit pour le TP4 ou bien utiliser l'analyseur AnalyseurLexical défini ci-
desous, qui est une extension de java.util.StreamTokenizer.
L'analyseur s'utilise de la manière suivante :
o Au début de l'application mettre : import java.io;
o Création d'un analyseur lexical pour la chaîne s :
AnalyseurLexical alx = new AnalyseurLexical(s);
o Lecture d'un lexème: int lx = alx.next()
Le résultat (ici lx) est le type du lexème (voir ci-dessous), l'objet alx contient trois
champs dans lesquels sont stockés les caractéristiques du lexème lu :
1. alx.ttype : le type du lexème
== alx.TT_EOF si on a atteint la fin du texte
== alx.TT_WORD si le lexème est un mot, c'est à dire une
lettre suivie de lettres et/ou de chiffres
== alx.TT_NUMBER si le lexème est un nombre
== '"' si le lexème est une chaine de caractères entre " et "
Al
orithmique et Structures de données /
Eté 2004
Gilles Falquet & El Mustapha El Atifi