Voilà ! Mise à jour !
Petite liste des principaux changements :
Réécriture de la console, qui n'est plus un champ de texte Swing, mais un petit terminal ;
Gestion des erreurs encore améliorée, la ligne est désormais surlignée dans l'éditeur, y compris pour les erreurs de syntaxe ;
Ajout d'un système d'arborescence des exemples, pour les trier dans des dossiers ;
La portée du langage est désormais statique (lexicale), on peut utiliser des closures :-p ;
Maintenant, un bloc de parenthèses définit une portée (enfin, pas toujours : uniquement si le bloc contient des déclarations de variables, pour optimiser un peu)
Implémentation de l'arrêt forcé du script avec le bouton "stop", comme ça pas de souci avec les boucles infinies ;
Ajout numérotation des lignes (ça a l'air tout bête mais c'est l'un des trucs qui m'a pris le plus de temps) ;
Ajout instruction "finboucle", équivalent du "break".
A télécharger ici
Requiert Java 6 ou 7.
Notez que je ne l'ai pas testé sous Windows. Je préviens parce que j'ai déjà eu pas mal de "surprises"...
- Edité par antoine1023 24 juin 2013 à 19:58:02
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
// http://99-bottles-of-beer.net
var i = 99
tantque (i sup 0) (
var pluriel
si (i supegal 2)
pluriel = "s"
sinon
pluriel = ""
Console.ecrireLigne(i + " bottle" + pluriel + " of beer on the wall, " + i + " bottle" + pluriel + " of beer.")
Console.ecrire("Take one down, pass it around, ")
si (i egal 2)
Console.ecrire("1 bottle")
sinon
(
si (i egal 1)
Console.ecrire("no more bottles")
sinon
Console.ecrire((i-1)+" bottles")
)
Console.ecrireLigne(" of beer on the wall.")
Console.ecrireLigne()
i = i - 1
)
Console.ecrireLigne("No more bottles of beer on the wall, no more bottles of beer.")
Console.ecrireLigne("Go to the store, buy some more, 99 bottles of beer on the wall.")
Des opérateurs estun équivalent de instanceof ; et un unaire, classede, équivalent de Object.getClass(). Il va falloir que je décide niveau précédence.
La gestion du temps avec une classe Temps, je pense. (avec équivalents de Thread.sleep et System.getCurrentMillis)
Les sélections et copier-coller dans la console
Une classe Couleur équivalente de java.awt.Color ; pour colorer la console
Et des méthodes pour déplacer le curseur de cette console, histoire qu'on puisse au moins faire un pong :-)
Bon, j'ai encore de quoi m'amuser :-)
Faut juste que je passe l'oral du bac de français des épreuves anticipées, c'est le 28... Vraiment envie de me débarasser de ce truc.
EDIT: @metalm, tu peut faire comme ça pour le pluriel :
pluriel = (si (i sup 1) "s" sinon "")
... l'équivalent du ternaire cond ? a : b
- Edité par antoine1023 25 juin 2013 à 11:52:22
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Est-ce lisible ? Je ne sais pas, mais ton parseur marche plutôt pas mal !
// http://99-bottles-of-beer.net
var i = 100
tantque (i sup 1) (
var pluriel = (si ((i = i - 1) sup 1) "s" sinon "")
Console.ecrire(i " bottle" pluriel " of beer on the wall, " i " bottle" pluriel " of beer.\n")
Console.ecrire("Take one down, pass it around, " + (si (i egal 2) "1 bottle" sinon ( si (i egal 1)"no more bottles" sinon (i-1)+" bottles"))+" of beer on the wall.\n\n" )
)
Console.ecrire("No more bottles of beer on the wall, no more bottles of beer.\nGo to the store, buy some more, 99 bottles of beer on the wall.\n")
Ouais, il manque des `+` pour le tiens. Celui-ci marche :
/* Script smallFrench */
// http://99-bottles-of-beer.net
var i = 99
var pluriel
tantque (i sup 0) (
pluriel = (si (i sup 1) "s" sinon "")
Console.ecrireLigne(i " bottle" pluriel " of beer on the wall, " i " bottle" pluriel " of beer.")
Console.ecrireLigne("Take one down, pass it around, " + (si (i egal 2) "1 bottle" sinon (si (i egal 1) "no more bottles" sinon ((i-1) + " bottles") + " of beer on the wall.")))
Console.ecrireLigne()
i = i - 1
)
Console.ecrireLigne("No more bottles of beer on the wall, no more bottles of beer.")
Console.ecrireLigne("Go to the store, buy some more, 99 bottles of beer on the wall.")
... en fait, Console.ecrire et Console.ecrireLigne écrivent tous leurs paramètres un à un sur la console. Console.ecrire("23" 4) affichera "234". Par contre, une expression comme ("23" 4) ne vaudra pas "234", mais bien le nombre entier 4 : un bloc de parenthèses peut contenir plusieurs expressions, mais sa valeur sera la dernière d'entre elles.
La concaténation de chaînes ne peut se faire qu'avec l'opérateur +.
Ma version human-readable xD :
/* http://99-bottles-of-beer.net
*/
var chaineBouteilles = { i :
retour (
si (i egal 0) (
"no more bottles"
) sinon (
var s = i + " bottle"
si (i sup 1) (
s = s + "s"
)
s
)
)
}
var nombre = 3
var i = nombre
tantque (i supegal 0) (
var bottles = chaineBouteilles(i)
Console.ecrireLigne(bottles " of beer on the wall, " bottles " of beer.")
i = i - 1
si (i supegal 0)
Console.ecrireLigne("Take one down, pass it around, "
chaineBouteilles(i) " of beer on the wall.\n")
sinon (
Console.ecrireLigne("continue ? (y / n) ")
si (Console.lireCaractere() egal "y") (
Console.ecrireLigne("Go to the store, buy some more," +
"99 bottles of beer on the wall.\n")
i = nombre
)
)
)
EDIT:
... donc pas de problème de parseur :-) Par contre, problème de défilement horizontal avec les longues lignes. Je m'en suis aperçu avec ton exemple...
- Edité par antoine1023 25 juin 2013 à 16:29:51
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Ah Ok, parce que ça m'aurait vraiment pas étonné que tu aurais trouvé un bug dans le parser :-) Jusqu'à présent, je l'ai modifié fréquemment.
J'ai cloné hier soir le dépot de Linotte (marre de l'interface web), et j'ai profité pour découvrir Subversion. Moi qui suis habitué à Git, j'en ai gardé un plutôt mauvais souvenir : Il n'y a pas vraiment d'équivalent du .gitignore ? Pas de branches locales ? Mais c'est l'horreur ce truc !
Bref, en regardant vite fait sur internet, on trouve pas mal de "SVN is dead".
Fais comme tu veut, mais je ne doit vraiment pas être le seul à préférrer Git ou Bazaar ^^. Et les outils de migration de Google Code n'ont pas l'air mal.
... si tu veut, je pourrais peut-être te faire deux ou trois commits de temps en temps ...
Sinon encore bravo pour Linotte et Algoid :-)
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Vraiment ?
rhalalala décidément c'est un mythe que Java soit multiplateforme... J'en ai marre !
Bon ben désormais je testerais toujours sous Windows, avec Java 6 ou 7...
Je vais voir si la JVM d'Oracle tourne sous Wine parce que c'est énervant de rebooter.
Merci !
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Entre OpenJDK et JVM Oracle ? moi si : à part le bug de ma 0.0.1, j'ai déjà rencontré un autre problème quand je cherchait à obtenir un objet File d'un fichier dans un Jar : ça marchait sous Linux mais pas sous Windows... Ils feraient mieux d'être plus stricts et de refuser ce qui n'est pas portable à mon avis. Mais bon...
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Je m'aperçoit à l'instant que les NULL que j'ai mis dans la console vide s'affichent comme des petits rectangles blancs et non comme des espaces sous Windows, et que j'ai des problèmes d'encodage des fichiers... Promis, juré, craché : les prochaines fois, je testerait toujours sous Windows !
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
OK merci
J'ai pas mal regardé, je pense qu'il serait bien de mieux documenter les sources... c'est vrai pour mon smallFrench aussi !
Sinon tu veut que je t'ajoutes commiter pour smallFrench ?
- Edité par antoine1023 26 juin 2013 à 15:17:45
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
OK !
J'ai fait quelques commits (surtout du renommage de variables et de la javadoc). J'espère que je t'ai rendu service et que je n'ai pas fait de bêtises (pas l'habitude de SVN...) :-)
Voilà ! bugs d'encodage et de console sous Windows fixés. A par ça, il n'y a aucun changement niveau interface (j'ai rajouté des classes pour plus tard mais ce n'est pas implémenté) Téléchargez la version 0.1.3
Sympa ton petit forum :-) J'ai posté mes premiers messages.
Bon, il va falloir que je reprenne un peu AL sinon CyaNn va être jaloux
- Edité par antoine1023 26 juin 2013 à 21:44:19
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Vraiment ? J'ai essayé avec la JVM Oracle sous WinXP pourtant !
Mais OK c'est noté.
J'ai trouvé un bug sur Algoid sous Android hier. Je le poste tout de suite
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Ah les précautions de sécurité vis à vis de Java... C'est la vie, c'est comme ça !
J'imagine que c'est parce que mon JAR n'est pas signé. Bon, je me renseignerai, mais à mon avis c'est pas le plus important (peut-être que je me trompe, j'y connais pas grand chose en sécurité : sous Linux, pas d'antivirus, pas trop de pare-feux, pas de problème !)
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Oui, tout n'est pas encore au point : Le undo/redo revient caractère par caractère et tout... Il faudrait que je teste plus, c'est sûr.
Là je regarde pour simplifier 2-3 trucs dans le moteur.
Mais je verrais après-demain, parce que demain je passe l'oral du bac de français (oui, il est tard et le français ça ne me passionne pas !).
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
Ah là vous m'avez bien eus sur le français ! :-p
Sinon niveau avancement, je suis en train d'ajouter une classe Decimal pour les nombres décimaux à très grande précision, elle utilisera BigDecimal en fait. J'ai aussi ajouté les opérateurs estun et classede, le premier est l'équivalent de instanceof, le second est unaire et retourne la classe d'un objet : classede "abc" retourne la classe Chaine ; classede 2,3 retourne Flottant. Donc c'est un peu comme Object.getClass().
J'ai donné un petit coup de jeune au parser, en renommant pas mal de fonctions, en modifiant des commentaires. Et désormais, l'instruction si peut contenir des ousi, comme les else if en C ou les elif en Python :
J'ai ajouté deux petits jeux : un snake et un casse briques pas terrible mais bon.
A noter également, désormais j'embarque ma propre police monospace dans le JAR : Droid Sans Mono. Comme ça pas de problèmes.
- Edité par antoine1023 1 juillet 2013 à 18:44:50
Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.