Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Langage] Petit langage impératif

... français et open-source

    24 juin 2013 à 19:57:00

    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

    • Partager sur Facebook
    • Partager sur Twitter
    Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
      24 juin 2013 à 21:20:21

      Bravo. J'y regarde dés que j'ai un moment.

      Cool la portée lexicale.

      • Partager sur Facebook
      • Partager sur Twitter
      Découvrez Algoid le langage pour apprendre à programmer.
        25 juin 2013 à 9:57:55

        ça se fête !

        // 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.")



        -
        Edité par metalm 25 juin 2013 à 11:29:51

        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2013 à 11:46:17

          +1 metalm x)
          Promis, j'apprends Linotte !
          Sinon, niveau améliorations futures, j'ajouterais :

          • 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

          • Partager sur Facebook
          • Partager sur Twitter
          Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
            25 juin 2013 à 15:14:16

            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")

            -
            Edité par metalm 25 juin 2013 à 16:54:15

            • Partager sur Facebook
            • Partager sur Twitter
              25 juin 2013 à 16:21:00

              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

              • Partager sur Facebook
              • Partager sur Twitter
              Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                25 juin 2013 à 16:45:51

                en fait, je voulais dire que ton parseur marchait très bien. J'ai même raccourci l'exemple !

                http://www.siteduzero.com/forum/sujet/langage-petit-langage-imperatif?page=3#message-84466510

                EDIT : c'est noté pour les espaces avec Console.ecrire et Console.ecrireLigne

                -
                Edité par metalm 25 juin 2013 à 16:49:41

                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2013 à 10:19:45

                  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 :-)

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                    26 juin 2013 à 11:14:33

                    boahhhh, pour la version 0.1.2.jar, il me dit que le jar est corrompu lorsque j'essai de le lancer.

                    Dommage, je voulais tester les récursives.

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Découvrez Algoid le langage pour apprendre à programmer.
                      26 juin 2013 à 11:36:36

                      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 !

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                        26 juin 2013 à 12:49:01

                        Bof, j'ai jamais eu de problème !
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Découvrez Algoid le langage pour apprendre à programmer.
                          26 juin 2013 à 13:29:45

                          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...

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                            26 juin 2013 à 13:59:51

                            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 !

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                              26 juin 2013 à 14:49:51

                              SVN, pour mes besoins, il me convient très bien ! Je passerai un jour à Git juste par curiosité.

                              Pas de souci pour les commits, d'ailleurs, je t'ai ajouté comme commiteur !

                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 juin 2013 à 15:15:31

                                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

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                  26 juin 2013 à 15:38:14

                                  Je me suis ajouté une tâche pour commenter mon code... https://code.google.com/p/langagelinotte/issues/detail?id=96

                                  Bah je veux bien. A l'occasion, je pourrai venir participer et apporter ma petite pierre !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 juin 2013 à 21:41:06

                                    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

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                      27 juin 2013 à 10:19:26

                                      Disons que j'ai perdu mon meilleur contributeur....

                                      Ca me manque de ne plus tester tes petits jeux, et le forum est vide.

                                      D'ailleurs je suis en train de re-coder le jeu snake avec des petits sprites....

                                      De toutes façon, c'est bientôt les vacances !!!! Donc je suis en mode "plus rien n'a d'importance"....

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Découvrez Algoid le langage pour apprendre à programmer.
                                        27 juin 2013 à 10:27:27

                                        Au fait. Ca ne marche toujours pas sous windows. Toujours la même erreur.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Découvrez Algoid le langage pour apprendre à programmer.
                                          27 juin 2013 à 11:28:12

                                          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

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                            27 juin 2013 à 14:03:12

                                            Bon ! Cherche pas plus loin !

                                            Je viens de lancer un de tes jar plus ancien, qui fonctionnait pourtant, il me fait la même histoire.

                                            Visiblement il doit y avoir un nouveau filtre au boulot, on a constaté pas mal de problème.... big brother is watching us ;-)

                                            Bref je regarderais depuis la maison.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Découvrez Algoid le langage pour apprendre à programmer.
                                              27 juin 2013 à 14:26:24

                                              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 !)

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                                27 juin 2013 à 21:49:07

                                                Non je ne pense même pas que cela vienne de la signature, mais plutôt d'un vilain proxy douteux....

                                                Dit voir, ou as tu trouvé ces jolis icônes pour ton hmi ?

                                                -
                                                Edité par CyaNn 27 juin 2013 à 21:49:18

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Découvrez Algoid le langage pour apprendre à programmer.
                                                  27 juin 2013 à 22:13:34

                                                  "Unofficial Tango", sur le site de Gnome
                                                  J'adore, surtout en 32 * 32, ça peut paraître, un peu gros, mais maintenant les écrans sont grands !

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                                    27 juin 2013 à 22:57:31

                                                    Excellent, merci.

                                                    J'ai testé un peu ton app. Il y a des bugs lorsque l'on charge un exemple, de temps en temps et lorsqu'on utilise undo / redo.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Découvrez Algoid le langage pour apprendre à programmer.
                                                      27 juin 2013 à 23:31:57

                                                      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 !).

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                                        1 juillet 2013 à 12:51:35

                                                        antoine1023 a écrit:

                                                        oui, il est tard et le français ça ne me passionne pas !.

                                                        Quoi ! Toi qui veut créer un langage en français ? :)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          1 juillet 2013 à 13:15:27

                                                          Pas étonnant qu'il l'ait appelé SmallFrench !!!! lol

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Découvrez Algoid le langage pour apprendre à programmer.
                                                            1 juillet 2013 à 18:43:56

                                                            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 :

                                                            si (a) instruction
                                                            ousi (b) instruction
                                                            ousi (c) instruction
                                                            sinon instruction
                                                            

                                                            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

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Arius, vraiment le plus puissant de l'ancienne Ligue des Super Zéros !
                                                              1 octobre 2013 à 16:23:21

                                                              J'ai remarqué que tu utilises JUnit pour tester ton moteur... pas mal...
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [Langage] Petit langage impératif

                                                              × 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.
                                                              • Editeur
                                                              • Markdown