ingenieur
Projet de programmation
Mini-compilateur Java 1 première partie : analyse syntaxique à rendre avant le lundi 7 octobre 2013, 17h00 mise à jout le 30/09/2013 :
– attribution de la version originale du sujet mise à jour le 25/09/2013 :
– certains non-terminaux instr étaient marqués instruction
– la syntaxe du instanceof était éronnée
Le langage considéré dans ce projet est « Deca », un sous-ensemble de Java. Vos fichiers pourront être compilés aussi bien par votre compilateur que par le compilateur
Java standard.
Notation Dans la suite, les symboles « », « + » et « ? » indiquent la répétition du symbole les précédant (zéro fois ou plus pour « », zéro ou une fois pour « ? » et une fois ou plus pour « + »). Attention de ne pas confondre « » et « + » avec « * » et « + » qui sont des symboles du langage Java.
1
Analyse lexicale
Espaces, tabulations et retour-chariots constituent les blancs. Les commentaires peuvent prendre deux formes :
– débutant par /* et s’étendant jusqu’à */, et ne pouvant être imbriqués ;
– débutant par // et s’étendant jusqu’à la fin de la ligne (ou du fichier s’il s’agit de la dernière ligne).
Les identificateurs obéissent à l’expression régulière ident suivante : chiffre alpha ident ::= 0–9
::= a–z | A–Z
::= ( alpha | _) ( alpha
| _ |
chiffre )
Les identificateurs suivants sont des mots clés : boolean class else extends false for if instanceof int new null public return static this true void Les constantes entières obéissent à l’expression régulière entier suivante : entier ::=
chiffre +
1. Ce projet est largement inspiré d’un projet similaire donné par Jean-Christophe Filliâtre dans le cadre de son cours de compilation à l’École Normale Supérieure http://www.lri.fr/~filliatr
1
et ne peuvent représenter que des entiers signés sur 32 bits.
Les chaînes de caractères littérales sont des séquences de caractères dont le code ASCII est compris entre 32 (espace)