Previous Up Next

2  Comment ça se passe

D’abord, je vous recommande de travailler sous Linux. N’importe quelle version devrait faire l’affaire. Toutes les versions de Caml ou OCaml ≥ 2.04 devraient aussi faire l’affaire. Si vous voulez travailler sur un autre système d’exploitation (Windows par exemple), c’est votre choix. Sachez cependant que, même avec Cygwin sous Windows, vous vous exposez à des complications. Allez-y si vous avez une âme de hacker.

Ensuite, vous devez récupérer l’archive du projet. Décompressez-là avec gunzip et désarchivez le tout avec tar. Vous pouvez faire le tout en une seule étape en tapant tar -xvzf projet.tgz.

Vous devriez obtenir un répertoire MiniC et les fichiers suivants:

drwxr-xr-x goubault/lsv 0 2006-10-16 19:20:49 ProjetMiniC2/ -rw-r--r-- goubault/lsv 63297 2006-10-16 19:20:49 ProjetMiniC2/ctab.ml -rw-r--r-- goubault/lsv 13163 2006-10-16 19:20:49 ProjetMiniC2/clex.mll -rw-r--r-- goubault/lsv 2752 2006-10-16 19:20:49 ProjetMiniC2/error.ml -rw-r--r-- goubault/lsv 2078 2006-10-16 19:20:49 ProjetMiniC2/Makefile drwxr-xr-x goubault/lsv 0 2006-10-16 19:20:49 ProjetMiniC2/Exemples/ -rwxr-xr-x goubault/lsv 7593 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc1 -rw-r--r-- goubault/lsv 839 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc2.c -rw-r--r-- goubault/lsv 173 2006-10-16 19:20:49 ProjetMiniC2/Exemples/ordre.c -rw-r--r-- goubault/lsv 1454 2006-10-16 19:20:49 ProjetMiniC2/Exemples/cat.s -rw-r--r-- goubault/lsv 9391 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc1.s -rw-r--r-- goubault/lsv 459 2006-10-16 19:20:49 ProjetMiniC2/Exemples/cat.c -rw-r--r-- goubault/lsv 2554 2006-10-16 19:20:49 ProjetMiniC2/Exemples/fact.s -rwxr-xr-x goubault/lsv 8077 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc3 -rw-r--r-- goubault/lsv 10504 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc2.s -rw-r--r-- goubault/lsv 2064 2006-10-16 19:20:49 ProjetMiniC2/Exemples/sieve.c -rwxr-xr-x goubault/lsv 7935 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc2 -rw-r--r-- goubault/lsv 7388 2006-10-16 19:20:49 ProjetMiniC2/Exemples/sieve.s -rw-r--r-- goubault/lsv 917 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc3.c -rw-r--r-- goubault/lsv 739 2006-10-16 19:20:49 ProjetMiniC2/Exemples/fact.c -rw-r--r-- goubault/lsv 727 2006-10-16 19:20:49 ProjetMiniC2/Exemples/ordre.s -rw-r--r-- goubault/lsv 725 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc1.c -rw-r--r-- goubault/lsv 11072 2006-10-16 19:20:49 ProjetMiniC2/Exemples/exc3.s -rw-r--r-- goubault/lsv 246214 2006-10-16 19:20:49 ProjetMiniC2/clex.ml -rw-r--r-- goubault/lsv 1041 2006-10-16 19:20:49 ProjetMiniC2/genlab.ml -rw-r--r-- goubault/lsv 1254 2006-10-16 19:20:49 ProjetMiniC2/ctab.mli -rw-r--r-- goubault/lsv 14023 2006-10-16 19:20:49 ProjetMiniC2/ctab.mly -rw-r--r-- goubault/lsv 1859 2006-10-16 19:20:49 ProjetMiniC2/top.ml -rw-r--r-- goubault/lsv 2198 2006-10-16 19:20:49 ProjetMiniC2/main.ml -rw-r--r-- goubault/lsv 936 2006-10-16 19:20:49 ProjetMiniC2/verbose.ml -rw-r--r-- goubault/lsv 9464 2006-10-16 19:20:49 ProjetMiniC2/cparse.ml -rw-r--r-- goubault/lsv 643 2006-10-16 19:20:49 ProjetMiniC2/depend -rw-r--r-- goubault/lsv 981 2006-10-16 19:20:49 ProjetMiniC2/compile.mli

Votre travail consiste à écrire le fichier manquant compile.ml. Vous pouvez y écrire ce que vous voulez, l’important est de définir la fonction dont le type est spécifié dans le fichier d’interface compile.mli:

val compile : out_channel -> Cparse.var_declaration list -> unit;;

Cette fonction prend un canal de sortie en premier argument, appelons-le out, et un programme C--, appelons-le π, et imprime sur out un texte en assembleur x86 qui code le programme π. Ce texte en assembleur ressemblera donc au texte de l’introduction (voir le fichier cat.s).

Lorsque vous aurez écrit le fichier compile.mli, compilez le tout en invoquant make. Comme Emmanuel et moi vous l’avons expliqué, ceci va appliquer un certain nombre de commandes dans un ordre défini par les dépendances exprimées dans le fichier Makefile.

Le résultat sera un programme, qui s’appellera mcc et sera dans le répertoire ProjetMiniC2. Vous pourrez tester ce programme en tapant ./mcc suivi du nom d’un fichier C-- à compiler.

Par exemple, si vous tapez (en partant du répertoire ProjetMiniC2):

cd Exemples ../mcc cat.c

Ceci devrait produire un fichier assembleur cat.s, que vous pourrez consulter, et un fichier exécutable cat, que vous pourrez tester en tapant (sous le répertoire ProjetMiniC2/Exemples):

./cat cat.s

Il est évidemment plus que probable que le code assembleur que vous produisiez, au moins au début, ne soit pas de la meilleure qualité. Notamment, mcc appelle le compilateur gcc pour compiler le code assembleur que vous aurez produit vers un vrai exécutable. Si votre code assembleur n’est pas syntaxiquement correct, ceci échouera. Il se peut aussi que vous obteniez un exécutable, mais qu’il plante (message Segmentation fault, typiquement).

Dans tous les cas, vous pouvez:


Previous Up Next