Vous êtes sur la page 1sur 2

Basé sur les TPs de Compilation de l’Université de Caen UCA - Licence Informatique

Compilation - N3, S5
TP 1 : Mise en Main de Antlr

L’objectif de ce TP c’est
1. se familiariser avec un analyseur lexical et syntaxique. Nous avons choisi ANTLR qui utilise
Java.
2. Votre ami pour la documentation de ANTLR :
https ://github.com/antlr/antlr4/blob/master/doc/index.md

Question. Commencez d’abord par télécharger le fichier installations.txt et suivez les instruc-
tions pour installer ANTLR.

Voici une grammaire attribuée qui permet de reconnaître les expressions arithmétiques avec
addition et produit. Nous mettons l’axiome start en premier, et les non terminaux commencent
tous par des minuscules. Nous terminons l’axiome de départ par le jeton système EOF qui permet
de terminer une expression et produit automatiquement par le lexer à la fin de la lecture du fichier
d’entrée.

grammar Calculette;

// règles de la grammaire
start
: expr EOF;

expr
: expr ’*’ expr
| expr ’+’ expr
| ENTIER
;

// règles du lexer. Skip pour dire ne rien faire


NEWLINE : ’\r’? ’\n’ -> skip;
WS : (’ ’|’\t’)+ -> skip;
ENTIER : (’0’...’9’)+;
UNMATCH : . -> skip;

Question. Rappelez pourquoi cette grammaire est ambigüe.

Question. Créez le fichier Calculette.g4 qui contiendra la grammaire ci-dessus et compilez la


(voir installations.txt).

Question. Vous pouvez utiliser l’outil grun pour visualiser l’arbre syntaxique produit par l’ana-
lyseur (voir fichier installations.txt pour savoir à quelle commande il correspond). La commande
pour lancer grun :

grun Calculette ’start’ -gui


Quel est le résultat avec les entrées :
42
24+ 24- 6
5*8+2* 1
5+2 * 8+ 3
6 *4 / 5+38

Question. On peut utiliser les grammaires attribuées pour évaluer une telle expression. Pour
cela, on associe à chaque symbole une valeur, qui sera considérée comme un attribut. Par exemple,
si on veut faire l’addition à chaque fois que l’on rencontre le ’+’,
expr returns [int val]
: a=expr ’+’ b=expr {$val=$a.val +$b.val;}
Complétez pour qu’à la fin le résultat de l’évaluation de l’expression soit affiché.

Question. Que se passe-t-il si on permute l’ordre dans la règle de expr entre l’addition et la
multiplication ? Testez les deux versions avec l’expression 5 + 2 ∗ 8 + 3.

Question. Enrichir la grammaire pour inclure les division, soustraction binaire, unaire et ex-
pressions parenthésées. Testez votre grammaire avec les expressions suivantes (Vous remarquez
quoi sur ces expressions ?). On va supposer, comme pour la suite, que chaque instruction est ter-
minée par un saut de ligne, mais vous pouvez enrichir la grammaire en permettant que l’on puisse
non seulement terminer une instruction par un saut de ligne, mais aussi avec un autre caractère
comme par exemple un ’ ;’ que vous encapsulerez dans une règle.
42
24+24-6
5*8+2*1
6*4/5+38
42+1+2+-3
5*8+2*-1/-1
(5*6*7*11 + 2)/11*5-1008
(5*6*7*11 + 2)/(11*5)
(5*6*7*11 + 2)/11/5
(5*6*7*11 + 2)/(11/5)-1114

Question. Ajoutez à la grammaire de votre calculatrice les règles pour évaluer des expressions
booléennes. On acceptera les opérateurs suivants : and, or et not, ainsi que des expressions paren-
thésées. Rappelons les priorités not > and > or. Testez avec les expressions suivantes :

true and false or true and not true


true or false and false
true or (false or false)
false or (true and not false)
(not true and false) or (true and not false)

Vous aimerez peut-être aussi