Évaluateur Mini-BASIC
Projet
2001-02
Nous avons vu en cours et vous avez implanté en TP une version
minimale d'un interpréteur du langage BASIC. Votre projet final
consistera à implanter l'extension obligatoire et au moins une des
extensions proposées ci-dessous.
Documents et fichiers annexes
Vous devrez remettre un petit document technique décrivant les
modifications que vous avez dûfaire subir àla version 0.0 pour
implanter les extensions.
Pour chacune des extensions, vous devrez avoir préparéun jeu de
tests montrant leur bon fonctionnement. Chaque test sera accompagnéd'un petit commentaire indiquant quel aspect de l'extension est visé.
Obligatoires
Pour chacune de ces extensions, vous devrez préparer un jeu de tests
montrant leur bon fonctionnement.
- Implantez l'ajout de l'instruction GOSUB sans oublier
son alter ego RETURN.
- Faites en sorte qu'aucune exception ne puisse àla boucle
principale.
Au choix
Nouvelle exception
L'utilisation d'une variable non définie provoque une erreur non
spécifiée et non spécifique. Le but de cette extension est
d'intégrer un mécanisme permettant une gestion plus appropriée
de ce genre d'erreur.
Pour cela, on peut rajouter au module Env la déclaration
d'une exception encapsulant le nom de la variable fautive. Cette
exception est déclanchélors d'une tentative d'accés àune
variable non définie dans l'environnement et interceptée par les
fonction d'évaluation.
Implantez cette solution.
Commandes enrichies
On veut enrichir les commandes RUN et LIST de
façon àpouvoir leur passer en argument des numéros de
ligne. Nous vous proposons les options suivantes :
- RUN num exécution du programme à partir
de la ligne num ;
- LIST num affichage de la seule ligne
num ;
- LIST num1-num2 affichage des lignes
dont les numéros sont compris entre num1 et num2,
inclusivement ;
- LIST num- affichage à partir de la ligne
dont le numéro est supérieur ou égal à num
jusqu'à la fin du programme ;
- LIST -num affichage à partir de la
première ligne du programme jusqu'à la ligne dont le numéro
est inférieur ou égale à num.
Un autre type de données
On veut pouvoir calculer aussi bien sur les entiers que sur les
nombres décimaux (les flottants).
Un nombre décimal est notécomme deux suites de chiffres
séparées par un point. L'une des deux suites peut être vide. Par
exemple 1.234, 123.4, 1234. et
.1234 sont des nombres décimaux. Les opérations
utilisées seront les mêmes que celles sur les entiers (addition,
soustraction, multiplication et division).
On interdira les conversions en cours d'opération : l'évaluation
de l'expression 1 + 2.3 doit provoquer une erreur (de type).
Le résultat de 3 / 2 est 1 et non pas
1.5, mais le résultat de 3.0 / 2.0 est bien le
flottant 1.5.
Le type des variables est fixélors de leur première affectation
(soit par LET, soit par INPUT). Ainsi, le programme
10 LET n = 2
20 LET n = 1.5
est incorrect. De même que le programme
10 LET n = 2
20 LET x = n * 0.5
Encore un autre type de données
Si l'on veut un peu sophistiquer les affichages lors de l'exécution
d'un programme, il est pratique de disposer d'outils de manipulations
de chaînes de caractères. Il faut donc que les chaînes
soient une valeur du langage, que l'on puisse lier ces valeurs àdes
variables.
L'extension ici proposée consiste à
- introduire le type des chaîne de caractères comme
nouveau type de valeur stockable dans un environnement.
- autoriser l'écriture d'expressions manipulant des chaînes en
ajoutant des opérateurs tels que la concaténation, la conversion
en entiers et chaîine, etc.
- autoriser l'utilisation de ces expressions dans l'affectation et
l'écriture de valeurs ; autoriser la lecture de telles valeurs.
This document was translated from LATEX by HEVEA.