Master M1 - SLPC - TP à rendre le 8 novembre 2013.


L'objectif de ce travail est d'implémenter un interpréteur pour le langage While (vu en cours).
Vous pouvez implémenter votre interpréteur en C, C++, Java, ADA ou OCaml. Nous fournissons la partie analyse syntaxique et construction de l'AST dans le cas d'une implémentation en C, mais notez qu'utiliser OCaml peut également grandement faciliter la programmation  ... 

Quelques contraintes pratiques :

Quelques ressources fournies
(si vous choisissez une implémentation en C !)
L'ensemble de ces fichiers est disponible dans l'archive suivante : WhileParser.tgz.

Comment utiliser ces ressources :
./while ex1.w      analyse le fichier ex1.w et affiche son AST
ou
./while                 analyse la séquence lue sur stdin (terminée par ^D), et affiche son AST.


Le langage  while

Grammaire concrète

(les symboles terminaux sont en  gras, un identifier est une séquence de lettres ou chiffres débutant par une lettre, un integer est une séquence de chiffres).
Notez que cette syntaxe concrète est légèrement différente de celle utilisée en cours et TD).

program ::= bloc 
bloc ::= declare declaration_list  begin instruction_list end
declaration_list ::= declaration | declaration_list ; declaration
declaration ::= var identifier | proc identifier (formal_param_list) is bloc
instruction_list ::= instruction | instruction_list ; instruction
instruction ::= identifier := e | while b do instruction od| if b then instruction else instruction | call identifier (effective_param_list)
formal_param_list ::= epsilon | identifier | identifier , formal_param_list
effective_param_list ::= epsilon | e | e , effective_param_list
e ::= e + t | t
t ::= t * f | f
f::=  ( e )| identifier | integer
b ::=  b /\ bb | bb
bb ::= e < e | e =  e | ^ bb | (b)

Arbre Abstrait (AST)


La structure de l'AST peut être déduite du code de la fonction  print_tree() du fichier tree.c
               
On suppose que les programmes sont bien typés (pas de vérification de types effectuées par l'analyseur).