INF564 - TD 4 - Typage statique de mini-C (en Java)

L'objectif de ce TD est de réaliser le typage statique de mini-C.

Les règles de typage sont décrites dans le sujet du projet (distribué en cours).

Code fourni

On fournit l'analyseur syntaxique : parser-java.tar.gz

Une fois cette archive décompressée (par exemple avec tar zxvf parser-java.tar.gz), vous obtenez un répertoire mini-c/. Vous pouvez lancer Eclipse dans le répertoire où se trouve mini-c/ avec eclipse -data . puis créer un projet mini-c (en décochant l'option Use default location). La bibliothèque java-cup-11a-runtime.jar qui est contenue dans le sous-répertoire lib/ doit être ajoutée au projet (avec Java Build Path -> Libraries -> Add JARs).

Le code fourni compile. Le programme principal se trouve dans Main.java. Il accepte sur sa ligne de commande un fichier portant le suffixe .c et les options --debug, --parse-only et --type-only. Si aucun fichier n'est spécifié, le fichier test.c (fourni) est utilisé, afin de faciliter les tests.

Si une erreur lexicale ou syntaxique est détectée, elle est signalée et le programme termine avec le code de retour 1.

Si l'analyse syntaxique est effectuée avec succès et que l'option --parse-only est spécifiée, alors le programme termine avec le code de retour 0.

Travail demandé

Réaliser le typage dans le fichier Typing.java. Il s'agit d'un visiteur qui est appliqué à une valeur de type Pfile (l'arbre issu du parseur, défini dans Ptree.java) et construit une valeur de type File (l'arbre issu du typage, défini dans Ttree.java).

En cas d'erreur de typage détectée, elle sera signalée en levant l'exception Error, avec comme argument le message choisi. Cette exception est ensuite rattrapée dans Main.java et affichée sous la forme

     error: ... le message de votre choix ...
et le programme termine avec le code de retour 1.

Indications

Il est fortement conseillé de procéder construction par construction, en testant systématiquement. On peut se donner comme premier objectif de typer un programme aussi simple que
int main() { return 0; }
c'est-à-dire en se limitant aux constantes pour les expressions et à return pour les instructions.

Tests

Des tests sont fournis : tests-v1.tar.gz. Cette archive contient
retour à la page du cours