Page 2 sur 6

Re: [Projet] Underbasic

Message non luPosté: 19 Sep 2015, 17:10
de Hayleia
Clément.7 a écrit:Quand je parle du 'compilateur' je parle du programme qui transcrit l'UnderBasic en un autre langage... Je ne comprends pas bien ta remarque.

Je parle de la même chose et ma remarque est valide.

Re: [Projet] Underbasic

Message non luPosté: 19 Sep 2015, 17:22
de Clément.7
Alors peut-être que je me suis mal exprimé.
Ce que je dis c'est que comme je ne sais pas programmer en asm z80 je ne peux pas faire un convertisseur UnderBasic -> asm.

Re: [Projet] Underbasic

Message non luPosté: 20 Sep 2015, 10:33
de Wistaro
Très beau projet ! Bon courage :)

Re: [Projet] Underbasic

Message non luPosté: 21 Sep 2015, 11:18
de Clément.7
J'ai commencé a créer le projet et le repo GitHub. La première version en alpha-test sera disponible sous quelques jours si j'ai accès a mon ordi. Sinon ce sera ce week-end.

Re: [Projet] Underbasic

Message non luPosté: 21 Sep 2015, 16:44
de Wistaro
Pourrait-on avoir le lien du repos?

Re: [Projet] Underbasic

Message non luPosté: 21 Sep 2015, 17:42
de Clément.7
Il est actuellement vide mais je vais bientôt le remplir
https://github.com/ClementNerma/UnderBasic

Re: [Projet] Underbasic

Message non luPosté: 23 Sep 2015, 19:56
de Clément.7
J'ai (enfin) commencé le projet et pour l'instant on peut nommer les variable (Str1 devient "name" par exemple), les espaces inutiles sont tronqués et je suis en train d'implémenter le système de fonction. Il est également possible d'appeler une fonction avec des parenthèses ou sans.

Je mettrais en ligne le repo quand j'aurais un peu plus avancé.

P.S. : Je viens de me rendre compte qu'il est impossible de savoir qui a voté dans le sondage, donc le champ "j'aimerais prendre part au projet" ne sert à rien. Que la personne qui a coché cette case me le signale. Merci !

Beta v0.3

Message non luPosté: 25 Sep 2015, 17:14
de Clément.7
Voilà voilà, le projet est fin prêt pour être utilisé !

Voici un petit résumé des modifications que le projet a subi, ou pour ceux qui n'ont pas lu le début du sujet :

Le langage UnderBasic est un langage de programmation pour les débutants ou pour les programmeurs qui souhaitent se simplifier la vie. Ce langage propose notamment un système de fonctions qui permets de réutiliser plusieurs fois un bout de code sans le réécrire à chaque fois.

Voici à quoi ça ressemble (j'ai pris la suite de Fibonacci) : (NOTE : la syntaxe a été modifiée pour être plus simple et accessible aux utilisateurs)

Démonstration

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
i : A
suite : _SUITE

suite = [0, 1]
for(i, 3, 18) {
    suite[i] = suite[i - 2] + suite[i - 1]
    print suite[i]
}


ce qui nous donne en TI-Basic (les "L" correspondent au petit L de liste sur les TI) :

Code: Tout sélectionner
{0, 1}->LSuite
For(A,3,18)
LSUITE(A-2)+LSUITE(A-1)->LSUITE(A)
Disp LSUITE(A)
End


Actuellement, on est est à ce stade là :

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
#library alias

i : A
suite : LSUITE

suite = {0, 1}
for(i, 3, 18)
    suite[i-2]+suite[i-1]->suite[i]
    print suite[i]
End


il reste donc encore un peu de boulot (mais le plus gros est fait !)


Explications

1. "#library" permets d'inclure une bibliothèque stockée sur le serveur. Actuellement, il n'en existe qu'une, à savoir "alias". D'ici peu de temps il y aura aussi "short-alias", "alias-fr" et "generic", mais j'y reviendrais plus tard. La bibliothèque "alias" permets d'avoir accès à des fonctions comme "disp", "print", "input", etc. Elle sert également à vous permettre de coder avec moins d'erreur, mais nous verrons ça un peu après.
2. "i : A" sert à indiquer au compilateur que, lorsque l'on utilisera la variable "i", on fera en fait référence à la variable "A" de la calculatrice. Cela vous permets de nommer vos variables. Par exemple, on pourra appeler "Str1" avec le nom "nomDeFamille" par exemple, pour améliorer la clareté du programme.
3. La fonction "print" est une fonction définie dans la bibliothèque "alias" qui a été incluse au début. Elle permets d'afficher du texte à l'écran.

Définir une fonction

Voici une autre petite démonstration pour montrer comment on définit une fonction :

Show/Hide spoilerAfficher/Masquer le spoiler
Code: Tout sélectionner
function hello (nom) {
   print "Bonjour "+nom
}

hello("Michel")


ce qui donnera

Code: Tout sélectionner
Disp "Bonjour "+"Michel"


Prototypage

Dans l'objectif de coder mieux en faisant moins de fautes, j'ai mis en place un système (optionnel) de prototypage.
En gros, cela permets de dire qu'une fonction n'acceptera comme argument qu'une chaîne de caractères et un nombre.
Par exemple, si vous utilisez une fonction pour faire un calcul avec deux nombres, et que vous passez une chaîne de caractères sans faire attention, le programme plantera. Le temps de vous rendre compte de votre erreur et de la corriger, vous aurez perdu une minute. Multipliez ça par le nombre d'erreurs potentiels que vous pouvez faire en oubliant un guillemet, une virgule...

Il est également possible d'exiger qu'un argument soit un pointeur. En d'autre termes, la fonction n'acceptera pas que vous lui passiez en argument "Salut !" mais une chaîne de caractères, comme Str1. Petit exemple : si j'ai une fonction qui fait des calculs puis stocke le résultat dans une variable, et que je lui passe en paramètre le nombre "2", on va se retrouver avec un truc du genre :

Code: Tout sélectionner
2*7*sin(8)+B->2


Bim ! Erreur de syntaxe. Là, vous ne ferez pas l'erreur car le compilateur refusera tout simplement de convertir votre code tant que vous n'aurez pas passé un pointeur à la fonction.
Vous pouvez également mixer les deux. Prenons l'exemple de la fonction "input" dans la bibliothèque "alias". Elle se présente sous cette forme :

Code: Tout sélectionner
function input(string text, string *name) {
    \Input {{text}},{{name}}
}


(NOTE : Le "\" signifie que le compilateur ne doit pas tenter d'interpréter cette ligne comme un appel à une fonction)

Ici, il faut passer en paramètre à la fonction une chaîne de caractère et une autre chaîne de caractère sous la forme d'un pointeur. Autrement dit, les lignes suivantes ne fonctionneront pas :

Code: Tout sélectionner
input 2,"Salut"
input "Salut","Nom"
input "Nom",[A]


il faudra obligatoirement mettre quelque chose du style :

Code: Tout sélectionner
input "Nom",Str1


ou

Code: Tout sélectionner
nom : Str1
input "Nom", nom


Voilà !

Pour conclure...

Le plus gros et le plus difficile du travail est enfin terminé. Les fonctions sont supportées, tout comme les noms de variables.
Notez qu'il est possible d'appeler une fonction avec des parenthèses :

Code: Tout sélectionner
// Ceci
input "nom",Str1
// équivaut à
input("nom", Str1)
// ou à
input "nom"  ,        Str1


P.S. : J'ai ajouté la traduction en français pour les anglophones ;)

Donnez-moi vos impressions !

Re: [Projet] Underbasic

Message non luPosté: 25 Sep 2015, 18:43
de Adriweb
Intéressant :)
A partir de GitHub, tu devrais rendre le contenu directement disponible en ligne/démo (cf. GitHub Pages), ça serait pratique pour tester ;)

Re: [Projet] Underbasic

Message non luPosté: 25 Sep 2015, 19:13
de Epharius
Cool, c'est bien fait ;)

Si tu veux je peux faire passer ça en assembleur (même si je ne sais pas si je vais être capable de reproduire toutes les fonctions).
Dis moi ce que t'en pense !