Définition d'un langage impératif avec test de positivité
Le but du projet est de définir un autre langage de programmation,
légèrement différent de celui utilisé en cours.
- Le langage des expressions arithmétiques sera nommé eexpr,
- Le langage des instructions sera nommé exo,
- Les expressions arithmétiques contiendront également une multiplication
et une soustraction,
- Il n'y aura pas d'expressions booléennes,
- L'instruction while ne sera pas présente dans le langage (et c'est
tant mieux puisqu'il n'y a pas d'expressions booléennes),
- En revanche on trouvera deux instructions de contrôle, basées sur la
positivité d'un argument numérique:
- while e positive i end loop
- if e positive i otherwise i'
Il faudra fournir tous les éléments suivants:
-
définir la sémantique naturelle de ce langage sous forme d'un prédicat
nommé sn' (dans le même
style que la sémantique naturelle donnée comme référence pour les expressions
expr et les instructions instr)
- Un traducteur de aexpr vers eexpr devra être fourni,
- Un traducteur de instr vers exo devra être fourni,
- Une preuve que le traducteur est correct, au moyen d'un énoncé
qui aura la forme suivante:
forall (p:exo)(r r':env), exec r (translate p) r' <-> sn' r p r'
- Un analyseur syntaxique pour le nouveau langage
Je conseille d'organiser ce travail comme une
extension de celui
que l'on peut trouver en suivant
ce lien.
Yves Bertot
Last modified: Fri Nov 5 08:47:48 MET 2004