Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Casio Basic Web Interpreter
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Casio Basic Web Interpreter

Posté le 29/08/2014 15:06

Je vous présente ici mon projet "Casio Basic Web Interpreter" qui a débuté en 2014 et dont le développement se poursuis encore actuellement.

Il s'agit d'un interpréteur pour le langage basic des calculatrices Casio.
Le truc c'est que c'est un interpréteur en mode web, le rendu (=écran de la calculatrice) se fait sur un canvas HTML5.

Donc c'est ici => Casio Basic Web Interpreter



ATTENTION : ce que je partage avec vous est dans une version "alpha", il manque encore beaucoup de choses...
J'ai mis pleins de programmes en exemple.

En vrac la liste des instructions supportées :

[color1] Plot
[color1] PlotOn
PlotOff
PlotChg
[color1] PxlOn
PxlOff
PxlChg
PxlTest
[color1] Line
[color1] [sketchMode2] F-Line
[color1] [sketchMode2] Horizontal
[color1] [sketchMode2] Vertical
[color1] [sketchMode2] Circle
Plot/Line-Color color1
S-L-Normal
S-L-Dot
S-L-Broken
S-L-Thick
S-L-Normal
S-L-Thin
Cls
ClrText
ClrGraph
BG-Pict
BG-None
StoPict
RclPict
AxesOn
AxesOff
LabelOn
LabelOff
Isz
Dsz
Lbl
Goto
Prog
Return
Stop
Mcl
Range
ViewWindow
Menu
Locate
Text
expr->variable
expr->variableStart~variableEnd
variable
"string"
?->variable
"string"?->variable
Ran#
RanInt#
GetKey
MOD(
Int
Intg
Frac
Deg
Rad
Grad
sin
cos
tan
Rec
Pol
Ans
+
-
*
/
=> (If)
If/Then/Else/IfEnd
<=
>=
=
<> (or !=)
<
>
And/Or/Xor/Not
(expr)
-expr
Do/LpWhile
While/WhileEnd
For/Next
Break

{1,2,3,4}->List n
List n->List m
List Ans
x->Dim List n
Dim List n
Filen
Seq(
x->List n[expr]
List n
List n[expr]
ClrList
ClrList n
Sum list
Prod list
Mean(list
Median(list
Max(list
Min(list
SortA(list
SortD(list
Fill(value,list)
Augment(list,list)
Cuml list
?List list
Percent list
RanInt#(min,max,nb)
RanList#(int)

[[1,2,3][4,5,6]...]->Mat n
Mat n
Mat Ans
{l,c}->Dim Mat n
Dim Mat i
x->Mat n[expr,expr]
Mat n[expr,expr]
Mat n->Mat m

1 color can be Black, Blue, Red, Magenta, Green, Cyan or Yellow
2 sketchMode can be SketchNormal, SketchThick, SketchBroken, SketchDot, SketchThin


Vous trouverez les sources sur GitHub.

A bientôt.
Krevo_


Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9 Suivante
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 08/09/2019 21:59 | #


Merci à @Lephe et @Corne2plum3 d'abord pour avoir tester, ensuite pour votre enthousiasme et enfin pour vos retours techniques qui seront investigués dès que possible. Pour celui du break, je pense que cela fait partie des soucis que j'ai avec les if / then / else... j'ai fait une branche pour une nouvelle implémentation du if mais comme je n'en suis pas totalement satisfait elle n'est pas encore prête. Entre temps, j'ai avancé sur par mal d'autres trucs (comme tout récemment pouvoir renvoyer des erreurs à l'execution avec bien sûr le numéro de ligne d'origine ... ce qui n'est pas immédiat.) On peut tester cette nouveauté par exemple en faisant un List->Mat( avec un numéro de liste qui n'existe pas ou avec des listes de taille différentes. Je dois ajouter petit à petit des erreurs d’exécution (souvent on se contente d'une valeur retour à 0) quand cela est pertinent.

Pour le clavier, oui il a besoin d'être plus complet pour pouvoir générer toutes les entrées que certains programmes attendent. En fait, là je crois que je suis surtout en recherche d'un design / organisation de l'écran qui soit pas trop confus. Je pense faire un clavier qui peut s'ouvrir / se fermer. Faut que je trouve une icône et une façon de faire qui "fonctionne", je veux dire esthétiquement / niveau UI.

Pour les chaines de caractères, oui il y a un soucis hors ascii. Le javascript est nativement utf-16 pour l'encodage de ses chaines, mais le compilateur ne reconnait pas les chaines. J'ai aussi des polices qui ne sont pas complètes. ça fait partie des choses pas finies.

Bon, j'ai quand même mis récemment un coup de boost pour finir les listes (... euh il manque les "opérations sur les listes") et pour ajouter les matrices (ce qui augmente considérablement le nombre de programme que l'on pourrais supporter). Bon, hélas dès que j'en teste un il manque toujours quelque-chose. Mais ça vient ... une chose après l'autre. Je suis également toujours en train d'apprendre et certaines choses avec la grammaire ne sont pas forcément évidentes.

(Pour les rapports de bug, on peut aussi créer des issues sur le github du projet pour ceux qui le souhaitent. Je devrais moi même en créer...)

Re-merci pour ces deux messages, qui font du bien au moral








Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 08/09/2019 22:08 | #


Content d'aider ! Le potentiel est immense. Si je peux me permettre, quelques conseils à récupérer selon tes envies sur l'interface :

• Personnellement je ne vois quasiment pas les numéros de lignes, gris sur bleu c'est chaud à lire.
• Un peu de CSS sur les boutons et exploiter la largeur des grands écrans ferait très professionnel !
• Il faut vraiment que tu autorises l'utilisateur à redimensionner la zone de texte.
• Fais vraiment gaffe à tes logs. Les activer consomme extrêmement vite toute la RAM disponible.
• Quelques raccourcis claviers ?

En debuggant un peu mon programme j'ai senti le potentiel quasi-IDE de l'outil, on peut vraiment faire des choses avec. J'ai le sentiment qu'en facilitant l'édition (zone de texte plus grande) et l'exécution (raccourcis claviers) on peut gagner facilement sur l'ergonomie.

Quoi que tu décides de faire, bon courage !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 08/09/2019 22:48 | #


A une époque on pouvais redimensionner... je crois que ça a disparu avec l'utilisation du 'jquery-lined text area' (pour les numéros de ligne). Je pense tester et passer à CodeMirror. Tu as raison les numéros de ligne ne sont pas très visibles actuellement.

Ajouté le 09/09/2019 à 13:47 :
Ok, uploadé une modif css pour que les numéros de ligne soient bien visibles !

Ajouté le 11/09/2019 à 13:18 :
Uploadé la modif qui consiste à utiliser CodeMirror (au lieu de jquery-linedtextarea) pour la partie éditeur de code source avec numéro de ligne.
(Ctrl + reload dans le navigateur au cas où ...)

Du coup, j'ajoute la mise en évidence de la ligne en erreur, quand il y en a une. Et parmi ce qui devient possible à l'avenir : la coloration syntaxique, ... et d'autres trucs "qui déchiiire" mais chuuuut je dis rien car j'ai pas le temps de tout faire...

Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 11/09/2019 15:38 | #


Je ne sais pas si je suis le seul, mais j'ai un problème de certificat avec ton site. :o
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 11/09/2019 15:57 | #


Idem que Lephé "Non sécurisé".
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 11/09/2019 16:09 | #


Oui, mais ça va se résoudre à la prochaine regen des certificats Let's Enscrypt. A moins que je demande au support si ça peut se faire avant.

Sinon, vous y allez en http et c'est ok.

Ajouté le 11/09/2019 à 16:12 :
Et sinon le nouvel éditeur avec la ligne en rose sur une syntax error ?
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 11/09/2019 17:04 | #


Ben écoute j'ai tenté de faire apparaître des erreurs de syntaxe et j'ai trouvé plein de résultats surprenants. Par exemple...

1**2=0
1*/2=0
1/*2=Infinity
1//2=Infinity
1/***//*/*/2=NaN
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 11/09/2019 19:44 | #


'Infinity' (et 'NaN') c'est typique des calcul en javascript. Je ne contrôle pas assez en amont de l'opération ... d'où les résultats étranges. Je rajoute au fur et à mesure des 'check' surtout depuis que je peux renvoyer des erreurs durant l'exécution...et ce depuis quelques jours seulement. Je vais corriger tout ça et ensuite mettre ces exemples de calcul dans mes tests unitaires.

Merci pour être re-retourner voir.

(Une erreur de syntaxe facile tu prends un mot clefs genre 'Goto' et tu mets à la place 'Gata', ...)


Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 11/09/2019 20:40 | #


Oui t'inquiète, c'est ton parser qui doit avoir quelques effets bizarres, voilà tout.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 12/09/2019 12:49 | #


Krevo_ a écrit :
Oui, mais ça va se résoudre à la prochaine regen des certificats Let's Enscrypt. A moins que je demande au support si ça peut se faire avant.


Le support a forcé la regen du certificat ssl. Tout est donc ok en Https maintenant.

Ajouté le 12/09/2019 à 13:15 :
Lephenixnoir a écrit :

1**2=0


Le parseur a reconnu :
(1 * undefined ) * 2
.. et moi pour "1 * undefined" je renvoie 0. Je vais modifier pour renvoyer syntax error.
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Redcmd Hors ligne Membre Points: 380 Défis: 7 Message

Citer : Posté le 12/09/2019 22:40 | #


isn't the double ** mean to the power of?
3**2 = 3^2 = 9?
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 12/09/2019 22:54 | #


Not in this Basic language, exponentiation is ^ only
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 22/10/2019 21:28 | # | Fichier joint


Très occupé en septembre, puis très occupé par l'épreuve de tracé, etc...
Voici enfin un peu de nouveautés sur le projet.

Quelques commits récents (il n'y en avait pas eu depuis le 11 septembre) :
- Display generic javascript error
- Scroll to the highlighted line of code
- Add some accentued letter to console font hires
- Fix char replacement on paste (was broken since CodeMirror added). Add replacement for "i" complex


Il y a aussi d'autres choses + ou - liés à la publication du programme ATLEMU (du concours de rentrée - épreuve en langage Basic), qui arrivent .... car en l'état le programme n'est pas exécutable par le Casio Basic Web Interpreter.... et il risque de ne pas l'être à temps. Mais, en tout cas, ... cela fera progresser le projet.

Par exemple, une fois mis en commentaire quelques trucs non encore supportés, j'ai :

.. ce qui est moyen

Par contre, du coup j'ai appris des trucs en regardant le code (Etudier le code des autres, je vous le dit c'est très instructif !). Là par exemple, je sais que j'ai une modification à faire sur le paramètre "Xdot" (et sa relation avec Xmin et Xmax).


Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 22/10/2019 21:34 | #


Les programmes de Critor sont généralement assez tricky. Si tu arrives à le reproduire au moins dans les grandes lignes, ce sera déjà très bon !

Bon courage !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 22/10/2019 21:48 | #


Exactement, c'est assez "tricky" et je vois des choses que je n'avais jamais vu ailleurs ... mais c'est bien !
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 23/10/2019 13:09 | # | Fichier joint


Aujourd'hui j'ai :


... ce qui est un peu mieux.

Je poursuis mes travaux.... par exemple, avec cette instruction Menu dont les labels sont des lettres.

Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Lephenixnoir Hors ligne Administrateur Points: 24563 Défis: 170 Message

Citer : Posté le 23/10/2019 13:35 | #


Déjà un bon progrès !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 23/10/2019 13:41 | #


Ok, j'ai ajouté le support des labels qui sont des lettres pour l'instruction Menu.
Exemple tiré du jeu :
Menu "Mode simulation", "Manuel", M, "A partir liste", L, "Quitter", Q

Les Goto et les Lbl étaient déjà ok avec des lettres. Et j'ai bien dit des lettres, ce qui est différent d'une variable qui serait lue/interprétée !! (

J'ajoute aussi le support des "sketchmode" (en + du support de la couleur) devant l'instruction Text , bien que d'après moi, les textes sont toujours écrits de la même façon quelque-soit le mode (SketchThin, SketchThick, ...). Exemple tiré du jeu :
Blue SketchThin Text 1 + 3H, Xmax - 16 - 32V, "[EXE]"


ça avance .... mais par contre faut pas se leurrer, le support des nombres complexes n'est pas pour tout de suite ....
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Sentaro21 Hors ligne Membre Points: 878 Défis: 0 Message

Citer : Posté le 24/10/2019 14:34 | #


In ATLEMU, complex numbers only represent coordinate values, so they can be replaced to real numbers.
Je continue à développer C.Basic. (Il est compatible avec Basic Casio.)
Overclocking utilitaire Ftune/Ptune2/Ptune3 est également disponible.
Si vous avez des questions ou un rapport de bogue, n'hésitez pas à me le faire savoir.
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 24/10/2019 19:59 | #


Well, complex numbers are not my priority.

Anyway, by studiing this program, I have made progress in several areas...
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 24/10/2019 20:09 | # | Fichier joint


J'ai rajouté une démo draw sin/cos qui utilise quelques trucs implémentés récemment (GridOn/GridOff, Affectation/lecture des variables Xmin/Xmax/Ymin/Ymax/....., Revu dessin des axes et ajout des graduations).



voir le site web

J'espère bientôt dessiner un truc du genre cycloïde en implémentant GraphXY()
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 146 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd