a commencé en 2014 et revient après une courte absence. Les fonctions actuelles permettent déjà de tester beaucoup de programmes Basic !
Krevo a écrit :Bonjour,
Dans la série "des nouvelles d'anciens projets qui reprennent" (comme je l'ai lu dans une récente revue des projets), j'aimerais vous présenter ou représenter mon projet "Casio Basic Interpreter", qui devrais être prochainement renommé "Casio Basic Web Interpreter".
En effet, il s'agit d'un interpréteur du basic Casio que j\'ai écrit en javascript (en partant de “JS/CC” pour le parser) qui se présente sous la forme d'une page web avec votre programme dans un grand textarea et un rectangle représentant l'écran de la calculatrice sur lequel vous verrez le résultat de l'exécution de vos programme.
Comme c'est un projet en cours, toutes les instructions ne sont pas encore supportées. Cependant, les quelques programmes d'exemple, ainsi qu'un lien vers une liste de ce qui est déjà implémenté vous aideront.
Parmi les buts du projet :
- faire revivre d'ancien programmes que j'avais écrit par le passé (quand j\'étais au lycée) à un moment où je n\'avais plus de calculatrice sous la main
- "just for fun" (ça c'est une très bonne raison !!)
- perfectionnement en techno web : javascript / canvas
- explorer un peu le monde des parser/compilateur/interpreteur
… et pourquoi pas rendre interactif les exemples des tutoriels / manuels sur le basic.
Si je vous présente ce projet aujourd'hui c'est parce que j'ai récemment repris le développement en ajoutant des choses comme :
la multiplication sans opérateur (style "2AB")
les boucles Do/LpWhile et While/WhileEnd
l'interprétation des symboles ≥,≤,≠,◢,⇒ et → (ce qui vous laisse le choix d'utiliser ces symboles ou leurs équivalents textuels respectivement >=, <=, <>, _, => et -> .... et accessoirement permet de copier/coller directement des exemples provenant de planete-casio)
un 2e choix de combinaison de couleur pour l\'interface : bleu sur fond vert (en plus du noir sur fond blanc déjà existant)
Tout cela est disponible sur
http://basic.crevola.org/
Beaucoup de choses restent encore à faire (instructions à supporter, interface à améliorer, ...), mais voilà le projet continue…
Krevo.
Citer : Posté le 12/11/2018 18:45 | #
Dans l'ensemble j'adhère à ton analyse, par contre ce n'est pas un bug ! C'est prévu pour faire efficacement des boucles. D'ailleurs Isz et Dsz sont dans le menu PRGM.JMP...
Citer : Posté le 13/11/2018 10:07 | #
Sinon, faut que je remodifie le parser un petit peu ... pour parser les lignes "While ..... " et "WhileEnd" séparemment. Je cogite je cogite .... je pense que ça doit être + comme Lbl/Goto (les compilateurs C et autre ne font rien d'autres que générer des sauts aux endroits voulus). Car sur les Goto, je saute bien l'instruction sur un Isz ou Dsz qui sort un 0. Et puis, ça devrais régler le problème de "survitesse" de mes boucles Do/LpWhile et While/WhileEnd. Il faut que je réflechisse calmement, bien tester tout ça.
Pour info, j'ai mis en ligne les "known problems", ainsi qu'un léger fix car qqun m'avait signalé qu'on ne pouvait pas répondre un nombre négatif sur un "?->A" par exemple (le "-" n'était pas accepter en frappe clavier).
Citer : Posté le 13/11/2018 10:36 | #
Une autre possibilité qui me vient à l'idée serait d'implémenter le jump pendant une passe de génération de code, mais je suppose que tu n'as pas de telle passe ? (Interpréter l'arbre de syntaxe est plutôt agréable en général)
Parce que comme Isz et Dsz sautent en fait la prochaine instruction bytecode, tout peut arriver, y compris sauter des Next, des conditions à la ⇒, des Break, des assignements normaux...
Citer : Posté le 13/11/2018 11:31 | #
Mais... le générateur de cours marche à nouveau ?
Je comprend plus rien...
Citer : Posté le 13/11/2018 18:52 | #
Cette version-là a toujours marché.