Dans cette première séquence, on considère le langage A6000 vu lors du cours d'ouverture.

L'objectif de la séquence est d'écrire un compilateur traduisant un programme A6000 en code assembleur MIPS, et appliquant au passage quelques optimisations du code.

Programme

  1. Représentations intermédiaires et génération de code assembleur : énoncé.
  2. Analyse lexicale et analyse syntaxique : énoncé.
  3. Analyse de flot de données et optimisations : énoncé.
  4. Coloration de graphes et allocation de registres : énoncé.

Vous travaillerez à partir du squelette de code disponible ici.

Vous pouvez maintenant également consulter un corrigé.

Langage A6000

Le langage comporte :

Un programme est constitué d'une unique fonction main prenant un paramètre entier x. Voici un exemple de code :
main(integer x) (
  var integer i;
  var integer j;
  var boolean continue;

  continue := true;
  i := 0;

  while continue (
    continue := false;
    j := 0;
    while j < x+1 (
      if i*i + j*j < x*x then (
        print(46);
	continue := true;
      ) else (
        print(35);
      );
      print(32);
      j := j+1;
    );
    print(10);
    i := i+1;
  );
)

Rendu

L'ensemble de votre travail pour cette séquence sera à rendre pour le 10 octobre environ. Détails à venir d'ici là.