est cr´e´e. C’est la classe principale du parser (analyseur syntaxique). La classe Lanceur1.java per-
met de l’ex´ecuter.
La seconde ´etape est de compiler les sources avec la commande : javac *.java Puis on peut
ex´ecuter le parser par la commande : java Lanceur1
public class Lanceur1 {
public static void main (String args[]) throws ParseException {
Exercice1 parser = new Exercice1(System.in);
parser.start();
}
}
Fig. 2 – Fichier Lanceur1.java
Exercices
1. Taper les mots aa,aaa,aaaaa,b... Que constatez vous ?
2. Taper le mot a. Est-il accept´e ? Remplacer dans le fichier .jj la ligne <ALETTER: "a"> par la
ligne <#ALETTER: "a">. Que constatez-vous ? A pr´esent, l’analyseur syntaxique Exercice1.jj
reconnaˆıt les mots du langage correspondant `a l’expression r´eguli`ere (a)+.
3. Ecrire les r`egles lexicales et syntaxiques permettant de reconnaˆıtre les langages suivants :
(a+b)+,a∗|b+,a.(b+).a.
4. La r`egle lexicale suivante permet de reconnaˆıtre un chiffre :
<DIGIT: [0-9]>
Int´egrez-la dans votre parseur. Puis, en vous inspirant de ce mod`ele, ´ecrivez les r`egles lexicales
permettant de d´ecrire un nombre entier <INT> , une chaˆıne de caract`eres <STRING>, une
chaˆıne de caract`eres en majuscules, une chaˆıne de caract`eres commen¸cant par "a".
2 Analyse syntaxique
Les expressions r´eguli`eres ne permettent pas de reconnaˆıtre des langages alg´ebriques tels que
L2={an.c.bn|n≥0}.
Pour reconnaˆıtre ce genre de langages, il faut utiliser des r`egles syntaxiques. Par exemple, la
grammaire du fichier Exercie2.jj (reproduit dans la figure 3) reconnaˆıt le langage L2.
2.1 Utilisation des r`egles syntaxiques
Le but de cet exercice est de construire un parser pour une structure if ... then ... else `a l’aide
de r`egles syntaxiques.
1. D´efinir dans le lexer la reconnaissance des mots du langage.
2. D´efinir les r`egles syntaxiques pour reconnaˆıtre le langage suivant :
if (<STRING>) {<STRING>} else {<STRING>}
o`u <STRING> reconnaˆıt une chaˆıne de caract`eres quelconque.
3. Transformer votre grammaire afin d’autoriser l’utilisation d’une autre structure if imbriqu´ee.
Par exemple, cette grammaire doit engendrer
if ( a) { if (b){c} else {d} } else {e}
2