Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Better Basic Casio : Un langage intermédiaire pour le peuple
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Better Basic Casio : Un langage intermédiaire pour le peuple

Posté le 05/05/2020 11:37

Bonjour J'ai une nouvelle idée de projet que j'aimerai mettre en route : un "traducteur" d'une syntaxe custom vers le Basic Casio de nos chères calculatrices. J'aime beaucoup programmer en Basic Casio, mais je pense que changer sa syntaxe un poil sans impact sur la performance et le résultat final serait bon pour le futur du langage

Ce que j'aimerai faire :
Des fichiers textes .bc pour l'ordinateur écrits avec une meilleure syntaxe que le Basic Casio.
Un "convertisseur" de fichiers BC (Better/Basic Casio) vers .g1m en ligne de commande pour plus de liberté côté utilisateur.
Compabilité complète ou presque.
Raccourcis utiles pour augmenter la lisibilité. (tels que +=, -=...)

Pour la syntaxe, j'ai déjà quelques idées :
Remplacer la flèche → par le signe =.
Inclusion d'autres fichiers avec INCLUDE (voir plus bas).
Appel d'autres fichiers avec DO (voir plus bas).

Le projet n'est pas encore en cours, je note tout ici pour garder une trace !

Voici à quoi pourrait ressembler un code .bc et son output (exemple) :
//main.bc
#name PICKABOO
#pass HEHE
List 1 = {5, 6, 7}
B = 0
For A = 1 To 5 Step 2
Locate A, 1, A
B += 1
Next
#INCLUDE "example.bc"

//example.bc
Locate 1, 2, B

//PICKABOO.g1m (exemple)
{5,6,7→List1
0→B
For 1→A To 5 Step 2
Locate A,1,A
B+1→B
Next
Locate 1,2,B


Je noterai les changements ici, je vais me renseigner sur les .g1m.
Si vous avez des remarques, idées, suggestions... je suis tout ouïe

J'espère que j'aurai été clair ^^'


Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 06/05/2020 09:40 | #


Note bien que si tu restes au niveau lexical/regex sans parser toute une classe de modifications de syntaxe sera inaccessible. Après tant que ça suffit, tu fais comme tu veux...
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 06/05/2020 10:05 | #


Oui je m'en suis rendu compte hier. J'y ai réfléchi, faudra bien passer par ça pour obtenir tout ce que je souhaite ^^'
Question : le préprocesseur agit avant toute la machinerie que tu as décrite plus tôt ou durant ?
Je suppose avant mais avec un gros doute.
Merci encore
Time is running out
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 06/05/2020 10:13 | #


Hmm, le préprocesseur agit conceptuellement avant. En pratique, le préprocesseur contient un lexer pour faire son job. Mais oui, il agit avant.

Dans ton cas, tu n'as pas l'air d'avoir besoin de préprocesseur.
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 06/05/2020 10:22 | #


Si ça agit avant alors je peux le remettre à plus tard
Merci, je vais me concentrer cette semaine à choisir les outils que j'utiliserai.

Ajouté le 07/05/2020 à 12:22 :
Je noterai le progrès que je fais au jour le jour pour éviter de laisser tomber le projet

Merci Lephé pour l'aide, cela m'est très utile
Le lexer fonctionne bien (merci PLY), la syntaxe ressemble à cela pour le moment :
list 1 = {-53, 8, 9}

for i = 1 to 5
  locate 1, i, "Bonsoir Paris !"
next


Je demande votre avis sur la syntaxe, pensez-vous qu'il serait mieux d'avoir une majuscule au début des commandes ? d'autres suggestions ?

L'Odyssée de l'Espace
Time is running out
Zezombye En ligne Rédacteur Points: 1743 Défis: 13 Message

Citer : Posté le 07/05/2020 12:36 | #


Il faudrait des parenthèses avec chaque fonction, pour la consistance.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Tituya Hors ligne Rédacteur Points: 1793 Défis: 16 Message

Citer : Posté le 07/05/2020 12:43 | #


Pas de majuscule selon moi c'est pas vraiment utile.
La syntaxe me semble plus correcte comme ça ! Une syntaxe plus C pour les conditions ? Genre :

list 1 = {-53, 8, 9}
A = 6

for i = 1 to 7
{
    if i != 7
    {
        locate 1, i, "Bonsoir PC !"
    }
    else
    {
       locate 1, 1, "i trop grand !"
       break
    }
}


C'est peut-être plus clair que de devoir mettre des if, ifEnd / For, Next ou While, WhileEnd comme en Basic ?

Après je sais pas, on peut penser à une gestion de l'indentation à la python, comme ça pas besoin d'accolades et le code est quand même clair. Tout en enlevant les IfEnd etc

Une idée pour les variables, en Basic on a un nombre de variable maximum. Travailler avec des If A=5 dans un code assez long, on peut facilement perdre la signification derrière celle-ci.
Pouvoir mettre un texte à la place d'une variable, qui va être (après compilation) changée vers une lettre possible ça peut être sympa ! Je m'explique :

variable = 5
if variable = 6
{
}
del variable


Après compilation va donner
5→A
If A=5
Then
IfEnd
0→A


C'est peut être étrange, mais pourquoi pas ?
Après c'est mon avis ! Le principe c'est d'essayer de rendre ça le plus simple possible non ?
Bretagne > Reste du globe
(Et de toute façon, vous pouvez pas dire l'inverse grâce à Bzh)



Zezombye En ligne Rédacteur Points: 1743 Défis: 13 Message

Citer : Posté le 07/05/2020 12:46 | #


Des macros donc
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 07/05/2020 13:15 | #


Zezombye a écrit :
Il faudrait des parenthèses avec chaque fonction, pour la consistance.

+1. +2. +3. C'est tout.

KikooDX a écrit :
Je demande votre avis sur la syntaxe, pensez-vous qu'il serait mieux d'avoir une majuscule au début des commandes ? d'autres suggestions ?

À mon avis si tu veux décoller pour de vrai du Basic Casio tu dois introduire une notion de fonctions utilisateur. Et dans ce cas le nommage deviendra un problème, et je suggérerai de garder les noms originaux des fonctions Basic Casio autant que possible, casse comprise.

Tituya a écrit :
Pouvoir mettre un texte à la place d'une variable, qui va être (après compilation) changée vers une lettre possible ça peut être sympa !

Attention ce problème cache une allocation de registres qui est un truc très sympa à étudier mais qui devient compliqué quand il y a beaucoup de variables dans un programme. Ça devient plus facile si tu demandes explicitement au programmeur de dire où chaque variable est stockée (des « macros » comme dit Zezombye), mais c'est hyper pas pratique.

Mon avis à deux balles : commence par définir la sémantique de ton langage. La sémantique c'est toutes les fonctionnalités du langage indépendamment de la syntaxe, comme :
• Y a-t-il des fonctions utilisateurs ?
• Peut-on nommer les variables autrement que A-Z ?
• Si oui, doit-on spécifier manuellement la correspondance avec A-Z ou le compilo en trouve-t-il une tout seul ?

Plus tu vas t'éloigner du Basic et plus tu auras besoin que ce soit fait proprement. Le seul défaut que je trouve à C.Basic c'est d'avoir une sémantique pas hyper claire, ce qui fait que beaucoup de fonctionnalités s'expriment par des rajouts successifs sur la syntaxe qui finissent par être un peu difficiles à contrôler.
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 07/05/2020 14:04 | #


Zezombye a écrit :
Il faudrait des parenthèses avec chaque fonction, pour la consistance.

Je suis plutôt d'accord.
Tituya a écrit :
Une syntaxe plus C pour les conditions ? Genre :

list 1 = {-53, 8, 9}
A = 6

for i = 1 to 7
{
    if i != 7
    {
        locate 1, i, "Bonsoir PC !"
    }
    else
    {
       locate 1, 1, "i trop grand !"
       break
    }
}


C'est peut-être plus clair que de devoir mettre des if, ifEnd / For, Next ou While, WhileEnd comme en Basic ?

Après je sais pas, on peut penser à une gestion de l'indentation à la python, comme ça pas besoin d'accolades et le code est quand même clair. Tout en enlevant les IfEnd etc

Je n'aime pas trop, les délimiteurs sont importants en Basic, je préfère les laisser tel quels.

Tituya a écrit :
Une idée pour les variables, en Basic on a un nombre de variable maximum. Travailler avec des If A=5 dans un code assez long, on peut facilement perdre la signification derrière celle-ci.
Pouvoir mettre un texte à la place d'une variable, qui va être (après compilation) changée vers une lettre possible ça peut être sympa ! Je m'explique :

variable = 5
if variable = 6
{
}
del variable


Après compilation va donner
5→A
If A=5
Then
IfEnd
0→A

J'aime bien l'idée, mais pas sous cette forme. Je préférerai définir des aliases pour les variables, et peut-être quelques temporaires qui fonctionneraient de la façon que tu décris
À voir.

Lephenixnoir a écrit :
À mon avis si tu veux décoller pour de vrai du Basic Casio tu dois introduire une notion de fonctions utilisateur. Et dans ce cas le nommage deviendra un problème, et je suggérerai de garder les noms originaux des fonctions Basic Casio autant que possible, casse comprise.

Ça me semble intéressant, je suppose que ce serait basé sur Prgm ? Je vais rétablir la casse.

Lephenixnoir a écrit :
Tituya a écrit :
Pouvoir mettre un texte à la place d'une variable, qui va être (après compilation) changée vers une lettre possible ça peut être sympa !

Attention ce problème cache une allocation de registres qui est un truc très sympa à étudier mais qui devient compliqué quand il y a beaucoup de variables dans un programme. Ça devient plus facile si tu demandes explicitement au programmeur de dire où chaque variable est stockée (des « macros » comme dit Zezombye), mais c'est hyper pas pratique.

C'est toujours en réflexion là-dessus.

Lephenixnoir a écrit :
Mon avis à deux balles : commence par définir la sémantique de ton langage. La sémantique c'est toutes les fonctionnalités du langage indépendamment de la syntaxe, comme :
• Y a-t-il des fonctions utilisateurs ?
• Peut-on nommer les variables autrement que A-Z ?
• Si oui, doit-on spécifier manuellement la correspondance avec A-Z ou le compilo en trouve-t-il une tout seul ?

Plus tu vas t'éloigner du Basic et plus tu auras besoin que ce soit fait proprement. Le seul défaut que je trouve à C.Basic c'est d'avoir une sémantique pas hyper claire, ce qui fait que beaucoup de fonctionnalités s'expriment par des rajouts successifs sur la syntaxe qui finissent par être un peu difficiles à contrôler.

Je vais réfléchir à ça.
On en discute sur la shout, pour le moment ce serait un mélange d'auto et de manuel →
//Mix de mon idée et celle de Zezombye :
compteur : A //compteur est lié à `A`
compteur : auto //variable assignée automatiquement
compteur //en implicite
nom : Str 10 //nom est lié à `Str 10`
nom : Str auto //string assignée automatiquement
nom : Str //implicite

Time is running out
Ne0tux Hors ligne Membre d'honneur Points: 3494 Défis: 265 Message

Citer : Posté le 07/05/2020 22:12 | #


Pour ma compréhension du projet, quel est son apport quand on a BIDE pour coder en Basic sur PC (Open Source), un SDK si on veut un langage plus poussé comme le C, qu'on peut coder sur CASIO ou qu'on a C.Basic pour avoir du Basic performant avec une syntaxe un peu différente ?

Si c'est purement un défi technique je comprends !
Mes principaux jeux : Ice Slider - CloneLab - Arkenstone

La Planète Casio est accueillante : n'hésite pas à t'inscrire pour laisser un message ou partager tes créations !
Zezombye En ligne Rédacteur Points: 1743 Défis: 13 Message

Citer : Posté le 08/05/2020 03:46 | #


C'est un langage de haut niveau pour le basic, qui du coup se compile en basic, et n'a donc pas de dépendance supplémentaire à installer (au contraire de cbasic).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 08/05/2020 09:25 | #


Accessoirement, au niveau méta cela donne un précédent sur le forum à la façon propre de jouer avec des langages (peu importe ce que KikooDX choisira de faire), qui n'est pas totalement évidente mais bien "réglementée".
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 08/05/2020 10:37 | #


Comme l'a dit ZZ, c'est un langage qui compilera vers du Basic Casio "pur". Le but est de faciliter le développement en Basic Casio pour les gros projets (qui deviennent très durs à gérer sur le long terme).
Edit : on peut aussi considérer cela comme un défi technique, mais je me suis lancé pour le but utilitaire.

Ajouté le 08/05/2020 à 11:19 :
Pour la syntaxe, je pense partir là-dessus niveau définition de variables :
List stats_joueur
Str nom_joueur
Var xp
Var x(X), y(Y)
Var key
Var play
Mat map

x = 11
y = 4
play = 1 #true

While(play)
  key = Getkey()
  If key == KEY_EXIT Then play = 0 IfEnd
WhileEnd

del play #free the assignated Var

Les parenthèses permettent de forcer une assignation. Ça me semble bien ? Il n'y aurait pas de constantes, je pense que les macros suffiront.
Pour les fonctions, je suis à moitié convaincu par les majuscules (j'ai tapé if then la première fois).
Vous pourriez remarquer le KEY_EXIT, ça me semble assez essentiel d'avoir des aliases sur le long terme. Mais ce n'est qu'un exemple.
Ici, la condition fait une ligne. Je suppose que ce serait réduit à ⇒ en pratique.
Time is running out
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 08/05/2020 11:33 | #


Ça a l'air pas trop mal. Tu auras besoin d'une sorte d'allocation de registres pour associer automatiquement des variables aux noms que tu as définis, mais tu peux toujours faire le truc naïf et pas t'embêter.

Un petit résumé des changements sémantiques ?
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 08/05/2020 11:44 | #


Qu'est-ce qui sépare la sémantique de la syntaxe ? Que comporte la sémantique ? J'ai essayé mais j'ai du mal à voir ce que je dois expliquer et à quel niveau.
Time is running out
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 08/05/2020 14:13 | #


La sémantique, c'est les fonctionnalités du langage. La syntaxe, c'est la forme que prend le texte qui utilise ces fonctionnalités.

Par exemple, "conditions" c'est de la sémantique, "If .. Then .. IfEnd" c'est de la syntaxe.

Autre exemple, "nommer des alias de variables" c'est de la sémantique, "Var x(X)" c'est de la syntaxe.

De même, "nommer des variables assignés automatiquement à A..Z" c'est de la sémantique, "Var x" c'est de la syntaxe.
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 08/05/2020 14:20 | #


Compris merci
J'essaierai de récapituler cela demain.
Time is running out
Sentaro21 Hors ligne Membre Points: 862 Défis: 0 Message

Citer : Posté le 17/05/2020 14:18 | #


@Kikoodx
This is a very useful project for building Basic Casio (including C.Basic) programs on the PC.
I hope that this will make progress.


@Lephenixnoir
I think the lack of clarity in the semantics of C.Basic was not a good language design from the beginning.
In the beginning, it was a fast compatible language than the genuine Basic Casio.
I think it lost that clarity as we expanded the features one after the other later on.
Now it's basically a language that's not much different from assembler.
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.
Lephenixnoir Hors ligne Administrateur Points: 21030 Défis: 143 Message

Citer : Posté le 17/05/2020 15:27 | #


Sentaro21 a écrit :
I think the lack of clarity in the semantics of C.Basic was not a good language design from the beginning.
In the beginning, it was a fast compatible language than the genuine Basic Casio.
I think it lost that clarity as we expanded the features one after the other later on.
Now it's basically a language that's not much different from assembler.

This is a fair analysis. By nature Casio Basic is not a very powerful language since it lacks functions, local storage, and actual data structures such as arrays (which makes many things such as bitmaps and VRAM access basically impossible). So it's expected that you would stray away from it.

Have you considered writing a tutorial on how to use advanced C.Basic features? I think C.Basic users mainly write Casio Basic programs, so they do not use the full power of your interpreter. Having translated the manual, I have a rough idea of the features, but it's not an easy read for someone who justs wants to make their game faster.
Zezombye En ligne Rédacteur Points: 1743 Défis: 13 Message

Citer : Posté le 17/05/2020 15:36 | #


Vous pourriez remarquer le KEY_EXIT, ça me semble assez essentiel d'avoir des aliases sur le long terme. Mais ce n'est qu'un exemple.


hmm

Les parenthèses permettent de forcer une assignation.


Pourquoi pas juste faire var x=1, y=2 ?

Les parenthèses ça devrait être réservé pour les fonctions.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Kikoodx Hors ligne Labélisateur Points: 2768 Défis: 11 Message

Citer : Posté le 17/05/2020 15:44 | #


Tu as mal compris la partie sur les parenthèses, Var ma_valeurassigne(A) assigne ma_valeur à A par exemple.
Time is running out

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 v42 © créé par Neuronix et Muelsaco 2004 - 2021 | Il y a 63 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