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 » [CPLua] Brainfuck
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

[CPLua] Brainfuck

Posté le 09/06/2012 17:48

Bonjour. J'ai décidé, pour le concours de l'UCF, de faire autre chose que mon projet d'étude de mouvement.
Il s'agit de ...suspense...(Merde, c'est marqué dans le titre) : d'un éditeur/interpreteur brainfuck en CPLua

Ce programme utilise bien entendu l'interface utilisateur et la librairie ''io'', permettant d'enregistrer et d'ouvrir des fichier textes (entre autre)

Des captures décran viendront bientôt.

Sachez néanmois que j'ai prévu d'améliorer le langage, en ajoutant une sorte de boucle for (délimitée par {}), mais je réfléchis à la manière de fixer les bornes). J'hésite aussi à mettre un truc du genre (x) pour pouvoir entrer directement la valeur de x dans la case du pointeur.
Si vous avez des suggestions, idées, ... n'hésitez pas


Vebveb Hors ligne Membre Points: 791 Défis: 14 Message

Citer : Posté le 09/06/2012 17:53 | #


Ce sera précompilé ou lu petit à petit?
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 09/06/2012 17:56 | #


Lu petit à petit. Je ne pense pas qu'il y ait moyen de pré-compilé en CPLua (sinon je veux bien savoir comment

Ajouté le 09/06/2012 à 17:58 :
Par contre, je ne sais pas si c\'est de ça que tu veux parler, mais il y a moyen de transformer le code brainfuck en code executable par la machine, mais pour ça il faut aussi lire le code petit à petit
Vebveb Hors ligne Membre Points: 791 Défis: 14 Message

Citer : Posté le 09/06/2012 18:17 | #


Du précompilé sera plus rapide, et il doit être possible de le faire sur classpad:

tu lis le fichier à executer et dès que tu rencontre une variable tu la numérote, et tu numérote aussi les constantes.
Tu relis le fichier et tu repère les différentes fonctions et tu te fais un code rapide à lire pour ça, par exemple en lua c'est codé sur 4 octets, et ça indique la fonction(ajouter, assigner, appeler, ...) et le numéro de ses arguments.

Je ne sais pas combien de mémoire a la classpad, mais tu peut toujours contourner les problèmes de mémoire en écrivant dans un fichier petit à petit.
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 09/06/2012 18:36 | #


je pense avoir compris (enfin j'espère), mais ça va être lent (à transformer), non ? Le brainfuck, c'est plus en langage pour jouer que pour faire de vrais programme
Pour l'instant, je m'en sors avec un switch qui lit caractère par caractère et qui applique la fonction corresondante (si "+", alors data[ptr]=data[ptr]+1, ...)
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 09/06/2012 18:42 | #


@vebveb, on parle de brainfuck.

@Catrix, je ne vois pas trop l'intérêt d'ajouter des commandes au langage dont le but est justement d'avoir le moins de commandes possible.

Ce qui peut-être fait pour accélérer l'exécution c'est d'empiler la position du caractère d'ouverture de boucle lorsque tu entres dedans.

Tu me donnes envie de reprendre mon jeu de morpion
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 09/06/2012 18:54 | #


Pierrotll a écrit :
@Catrix, je ne vois pas trop l'intérêt d'ajouter des commandes au langage dont le but est justement d'avoir le moins de commandes possible.
Si j'ajoute qu'une demi-dizaine de commande, ça changera pas grand chose

Ce qui peut-être fait pour accélérer l'exécution c'est d'empiler la position du caractère d'ouverture de boucle lorsque tu entres dedans.
Merci, j'y avais pas pensé

Tu me donnes envie de reprendre mon jeu de morpion
En BrainFuck ?
Totoyo Hors ligne Membre d'honneur Points: 16076 Défis: 102 Message

Citer : Posté le 09/06/2012 23:58 | #


Pierrot avec déjà de son morpion en brainfuck, t'avais pas mis un mode deux joueurs ou une ia ?
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 10/06/2012 00:38 | #


2 joueurs uniquement. Je viens de l'améliorer, maintenant on peut entrer "a1" ou "1a" pour choisir la case, il faut encore que j'ajoute une sécurité pour qu'on ne puisse pas entrer les coordonnées d'une case qui n'existe pas (comme "d4")

Ce programme avait surtout pour but de tester l'utilisation d'un tableau, réussir à se déplacer jusqu'à une case X et à en revenir.
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 10/06/2012 11:49 | #


Tu donnera ton code une fois fini ?
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 10/06/2012 14:41 | #


Voilà, j'ai terminé la sécurisation de la saisie

Voici le code :
>++++[<++++++++>-]+++++++++[<[>>>+>+<<<<-]>>>[<<<+>>>-]<<[>>>>+<<<<-]>
>>>-]<[-]>+>+++++++++[>>>++++++++++.[>++++++++<-]>++++.<+++[>+++++++<-
]>.------.<+++[>-----<-]>.+++++++++++++.++.<+++[>-----<-]>.<+++[>+++++
++++<-]>.----------.[-]<++++++++++.[>+++<-]>++.[>+>+<<-]>>[<<+>>-]<<<+
++[>+++++<-]>++.>.<+.>.[-]<+.[<++>-]<------>++++++++++.>+++[<<+.>>[>+<
-]>[<<<<<<<<<<<+++>>>>>>>>>>+>-]<<<<<<<<<++++++++++++++[<+++++++++>-]<
--<-[>[<<<<+>>>>-]<-[<<<<+>>>>-]<<<<]<.>>.>>.<<.[-]>>>>>>.[>>>>]>>>>>>
.>-[>>++++[<++++++++>-]<.+++++++++++++.--.++.--.++.[-]<<.>[>+<-]]>[<+>
-]<]<[>++++++++<-]>.<<+++++++++.-----------.>++++[<++++++>-]<.>++++[<-
---->-]<.+++++++++++++.>>[<+>--]<--------.>++[<++++++++>-]<<<<<<[>>>>>
+>+<<<<<<-]>>>>>.>[<<<<<<+>>>>>->-]<----.------------.<---------.+++++
++++++.>+++++++.<-.>-------.<++++++.----------.++++++.---.>.<++.+.---.
----.>+.[-]<[-]++++++++++.>>>>+[<<<<<<,>,>+[,----------]>++++++++[<+++
+++>-]<[<-<-->>-]<<[>>+>+<<<-]>>>[<<<+>>>-]>>+++[<<<-[>>+<<[>+<-]]>[<+
>-]>>-]<<<[-]>>--[[-]<++++++++[<++++++>-]<[<<+>->-]<<[>>+<<-]>[<+>-]>[
<+>-]>>]<<<<[>>+>+<<<-]>>>[<<<+>>>-]>>+++[<<<-[>>+<<[>+<-]]>[<+>-]>>-]
<---[[+]<<[-]<[>+>+<<-]>>[<<+>>-]>>+++[<<<-[>>+<<[>+<-]]>[<+>-]>>-]<--
-[[+]>>-<<]]>>]<<<<[-]<<-[>>+++<<-]>[>+<-]<<<[>>>>>+>+<<<<<<-]>>>>>[<<
<<<+>>>>>-]>-[<+++++++++>-]++++++[<++++++++>-]<-[<<<<<<<<+>>>>>>>>-]<[
<<<<<<<<->>>>>>>>-]<<<<<<<<+++++++++[-[<<<<+>>>>-]>[<<<<+>>>>-]<<<<<]>
>++++[<<<-------->>>-]<<<[>>>+<<<[>+<-]]>>>-[<[<<+>>-]>+]<[>+<[-]]>[<+
<[<+>-]>>-]++++[<<<++++++++>>>-]>[<<[>>>>+<<<<-]>>>>>>]<<[>>>+>+<<<<-]
>>>>>>>+<<<-<-[>>>>-<<<<[>>>>>+<<<<<-]]>>>>[>++<-]>[<<<<<+>>>>>-]<<<<]

Et ça donne ça :


Bon plus sérieusement, le code commenté avec un interpréteur : tictactoe.zip
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 10/06/2012 14:53 | #


comment lance-tu un programme avec l'interpreteur ?
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 10/06/2012 14:57 | #


Drag 'n drop
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 10/06/2012 14:59 | #


C'est bon, j'ai trouvé
Bravo pour le code, ça a pas du être facile

Ajouté le 10/06/2012 à 15:13 :
Merci quand même
J\'ai avancé un peu ajd : l\'interpreteur fonctionne, l\'éditeur aussi (ouvrir, enregistrer (sous), nouveau, fermer, executer, ...). La moitié de l\'écran est composée d\'une textbox pour modifier le script et l\'autre moitié affiche la console (pour les entrées/sorties).
L\'interpréteur accepte les syntaxes brainfuck et pbrain (comme le brainfuck mais avec des fonctions)
Je vais tenter d\'implanter la syntaxe du segfaultprog ajd

Ajouté le 13/06/2012 à 15:11 :
Up : Dans mon interpreteur, j\'ai ajouté la possibilité d\'incrémenter le pointeur de X (au lieu de 1, si on met un nombre il augmente du nombre)
Selon vous, c\'est mieux de mettre comme écriture :
+\'X\'
ou
+_X

En sachant que si on met juste \'\'+\'\', il incrémente de 1, et que X est la valeur de l\'incrémentation.
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 13/06/2012 16:10 | #


En ajoutant des règles au langage, tu risque de rendre beaucoup de programmes incompatibles. Imagine qu'un programmeur ait utilisé cette syntaxe en guise de commentaire pour dire combien de + se suivaient, pour faciliter la lecture du code.

A propos, t'as pensé à limiter les variables à des entiers 8bits ? Il ne faudrait pas que [+] soit une boucle infinie
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 13/06/2012 17:41 | #


en fait, [+] ne sera pas une boucle infinie car si la valeur de la case pointée est supérieure à 255, alors on le remet à 0

J'y avais pas pensé pour les commentaires, va falloir que j'y réfléchisse (car j'aimerais que ça reste compatible, mais en même temps je trouve ça plus pratique de mettre un truc comme +_48. pour afficher 0 que de faire une boucle pour multiplier 6 par 8
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 13/06/2012 18:09 | #


Ouais, et ce serait aussi plus pratique en ajoutant des mots clés if then else
Dark storm Hors ligne Labélisateur Points: 11579 Défis: 176 Message

Citer : Posté le 13/06/2012 18:11 | #


et pourquoi ne pas mettre des boucles do{}while() et while(){} ? ou encore un switch
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 13/06/2012 19:22 | #


Il y a des boucles Dark storm. Alors que jusque là tu ne peux faire les conditions qu'avec des boucles.

Je suis absolument contre le fait d'ajouter des fonctions. Le BrainFuck a contenu, contient et contiendra toujours 8 instructions.
Dark storm Hors ligne Labélisateur Points: 11579 Défis: 176 Message

Citer : Posté le 13/06/2012 19:46 | #


(j'étais ironique )
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Cartix Hors ligne Membre Points: 2748 Défis: 98 Message

Citer : Posté le 13/06/2012 20:05 | #


Louloux a écrit :

Il y a des boucles Dark storm. Alors que jusque là tu ne peux faire les conditions qu'avec des boucles.

Je suis absolument contre le fait d'ajouter des fonctions. Le BrainFuck a contenu, contient et contiendra toujours 8 instructions.

Le brainfuck, oui, mais il existe des dérivées ...

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 - 2023 | Il y a 70 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