Logo EPFL
LAMP
Ecole Polytechnique Fédérale de Lausanne
Compilation 2005/2006
French only

Afin que vous puissiez vous familiariser un peu plus avec le langage Zwei, nous vous fournissons un petit interpréteur. Son utilisation est très simple:

Unix $ zweiint MonFichier.zwei
DOS C:\> zweiint.bat MonFichier.zwei
Java > java -jar zweiint.jar MonFichier.zwei

Cet interpréteur se place avant le typage des programmes. Il se peut donc que certains programmes mal typés donnent lieu à des erreurs d'exécution. En revanche, les programmes bien typés ne devraient pas produire d'erreurs à l'exécution (si ce n'est peut-être des sélections ou des appels de méthode sur la valeur null ou des divisions par 0).

Le fichier Factorial.zwei que nous fournissons avec chaque phase du projet est bien typé.

Voici le résultat de son interprétation:

      $ zweiint Factorial.zwei
      120
      120
      120
      

L'expression suivante est un exemple de programme Zwei mal typé (la variable x n'est pas définie avant d'être utilisée) qui donne lieu à une erreur à l'exécution:

     $ cat Example.zwei
     x

     $ zweiint Example.zwei
     Exception in thread "main" java.lang.Error: unbound variable: x
        at scala.Predef$.error(Predef.scala:128)
        at zweic.Interpreter$.findEnv(Interpreter.scala:21)
        at zweic.Interpreter$.zweic$Interpreter$eval_expr$0(Interpreter.scala:144)
	[...]
    

Pour finir, voici l'exemple d'un programme Zwei mal typé (la méthode equal attend un objet de type B mais est utilisée avec un objet de type A mais A n'est pas un sous-type de B) qui ne produit pas d'erreurs à l'exécution:

     $ cat Example.zwei
     class A {
       Int x;
     }

     class B {
       Int x;
       Int equal(B that) {
         return this.x == that.x
       }
     }

     {
       printInt(new B(1).equal(new A(2)));
       printChar(10);
     }
     $ zweiint Example.zwei
     0