Page 1 sur 7

Outils communautaires de programmation fx-92 SC+

Message non luPosté: 06 Oct 2019, 01:29
de Lephe
La fx-92 Scientifique Collège+ possède un menu Algorithmique fort sympathique pour programmer dans un style Scratch. Cependant le seul moyen de tester des programmes avec est de les entrer à la main dans une fx-92 SC+ ou son émulateur, avec le risque de tout gâcher en appuyant par malheur sur ON. Ce n'est pas très pratique.

Plusieurs outils se sont donc présentés pour pallier à ces difficultés :


---

Pour la partie qui me concerne (l'interpréteur indépendant), ça se joue sur PC avec Python et le module PySDL2. Le programme peut lire des URLs wes.casio.com et de l'hexa, mais aussi des scripts textuels avec une syntaxe simple. Voici un des programmes de test, par exemple :

Code: Tout sélectionner
setvar 0, A

repeat 6
  goto -35,16-7A
  pendown
  goto x+3A+3,y+5
  penup
  goto x+A+3,y
  pendown
  goto x-3A-3,y-5
  penup
  setvar A+1, A
repeat_end

line-patterns.png
line-patterns.png (6.32 Kio) Vu 4320 fois


Pour ce qui est des fonctionnalités, je supporte quasiment toutes les constructions du menu Algorithmique (il manque juste quelques I/O) et une bonne partie des expressions que l'on peut taper sur la calculatrice. Une liste détaillée se trouve sur le dépôt.

À cause du format de nombre qui est différent de celui de la fx-92 (flottant versus décimal), on pourrait s'attendre à des surprises, mais en pratique ça marche très bien car les scripts ne sont pas assez violents pour que les différences ne se voient. :D

Merci au passage à Pavel qui n'a pas attendu pour envoyer une PR! o/

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 06 Oct 2019, 07:30
de Adriweb
Beau travail, félicitations!

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 06 Oct 2019, 09:33
de grosged
Très belle initiative !

A propos du fichier txt contenant l'url casio, doit-il être enregistré d'une certaine façon (utf8 ou autre ...) ?
Je demande ça car j'ai ces messages d'erreur :

Code: Tout sélectionner
sh-4.4# python3 fx92.py -u url.txt
[urlparser] URL includes protocol, will start after '+E-'
[lexer] Unknown opcode 0x2e
[lexer] Unknown opcode 0x2e
[lexer] Unknown opcode 0x2e
[lexer] Unknown opcode 0x2e
[lexer] Unknown opcode 0x2e
[lexer] Unknown opcode 0x2e
[urlparser] Expected one of ['CONST'], got FUN (at token 445)
Traceback (most recent call last):
  File "fx92.py", line 111, in <module>
    sys.exit(main())
  File "fx92.py", line 93, in main
    ast = parser.parse_program()
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 54, in parse_program
    return self.program()
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 90, in program
    stmt = self.stmt(optional=True)
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 99, in stmt
    st = self.stmt2(optional=optional)
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 146, in stmt2
    prg = self.program()
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 90, in program
    stmt = self.stmt(optional=True)
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 99, in stmt
    st = self.stmt2(optional=optional)
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 117, in stmt2
    return Node(N.FORWARD, self.arg())
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 178, in arg
    e = self.expr()
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 191, in expr
    f = [self.factor()]
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 205, in factor
    atom = self.atom()
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 222, in atom
    factors.append(self.const())
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 254, in const
    const = self.expect(T.CONST).args[0]
  File "/mnt/mmcblk0p1/fx92-interpreter/fx92/parser.py", line 79, in expect
    raise Exception("Syntax error: " + err)
Exception: Syntax error: Expected one of ['CONST'], got FUN (at token 445)
sh-4.4#

(testé sous puppy linux)

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 06 Oct 2019, 09:59
de Lephe
Ah, désolé, c'est un problème dans ma grammaire. La syntaxe avec la multiplication implicite est un peu casse-pieds, et j'ai oublié les cas de la forme `+f(x)` ou `-f(x)` quand j'ai écrit le parser. ^_^"

Au passage il y a des virgules à des endroits où le lexer ne les comprend pas encore -- normalement il ne doit y en avoir que dans des constantes. Si tu en as ailleurs, je veux bien un exemple de ligne pour améliorer ça. ;)

J'ai poussé un nouveau commit avec une correction et un test unitaire pour le problème de syntaxe.

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 06 Oct 2019, 10:18
de grosged
En effet, la fx-92 SC+ accepte de drôles de syntaxes. :p

On peut, par exemple, respectectivement affecter les valeurs 0 0,1 et 1 de cette manière :

Code: Tout sélectionner
,→A
,1→A
1,→A

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 06 Oct 2019, 10:51
de Lephe
Je vois ! J'ai modifié la détection de constantes pour autoriser tout ça. Le code commence à être un peu moche, je referai une passe plus tard. En tous cas c'est poussé ^^

J'ai un test unitaire pour la version texte et j'en ajouterai un également pour la version Bitcode, que j'ai testée à la main. :)

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 07 Oct 2019, 18:13
de critor
Merci.

Le dernier participant utilise le PGCD, dont le token est actuellement commenté dans le lexer :
https://gitea.planet-casio.com/Lephenix ... 2/lexer.py

Et donc on a besoin aussi du séparateur de paramètres, qui est ; sur ce modèle.

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 08 Oct 2019, 11:17
de critor
Il faudrait également l'opérateur puissance ^ nouvellement utilisé dans la dernière participation reçue.

Merci.

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 08 Oct 2019, 19:33
de Zocipal
Bonsoir,
J'ai toujours SDL is not defined...
Pourtant j'utilise un des scripts de test fourni.
Une idée ?
Merci d'avance,

Re: Interpréteur fx-92 SC+ pour PC

Message non luPosté: 08 Oct 2019, 21:33
de Lephe
Voilà Critor, j'ai ajouté les PGCD, PPCM, et puissances (hexa seulement pour les puissances).

J'ai toujours SDL is not defined...

Quel est le message d'erreur complet ? Peut-être que tu n'as pas le module SDL pour Python que j'utilise, ou qu'il y a une erreur d'import dans le code qui ne se voit pas chez moi. ^^