LeeWee Simple Syntaxe par Lhoumaud David
Chapitre 1 le pourquoi du comment LeeWee n'as pas toujours eu ce nom. Pourquoi commencer ce livre avec cette phrase? Je ne saurais vous dire, si ce n'est que c'est la première chose qui m'est venue à l'esprit. LeeWee est à l'origine un projet qui m'a permit de dire à tous ceux qui ont fait de longues études en informatique «Moi aussi je peux faire parti du délire avec vous...». Ma thèse en gros...la thèse d'un peintre en bâtiment qui a dû arrêter l'école au collège en 5ième pour être franc avec vous. Comment apprendre la programmation informatique avec zéro connaissance dans ce domaine. Le seul moyen que j'ai trouvé est de me créer mon propre langage ou plutôt devrais-je dire mon propre pseudo langage. Suite à de nombreuses recherches sur internet et bien entendu de nombreux cassages de dents par des internautes peu compréhensifs, j'ai réussi à trouver un moyen de me faire çà de la façon la plus simple possible. Avant de commencer à vous expliquer la logique que j'ai utilisée je vais d'abord faire un petit tour historique. Comme je le disais dans la toute première phrase LeeWee n'a pas toujours eu ce nom, quand j'ai eu l'idée de créer mon langage je l'avais d'abord nommé Level++ mais après à peine une semaine je me suis vite rendu compte que ce diminutif été vraiment prétentieux pour un langage qui n'avait pas d'existence réelle. A savoir qu'au moment où cette idée m'est venue, j'étais en pleine migration entre le système d'exploitation Microsoft Windows et GNU/Linux, donc à partir de là j'avais décidé de le nommé LinWin. Mais je me suis rendu compte que je n'avais pas envie ou plutôt plus envie de développer pour Microsoft Windows pour un tas de raisons éthiques et économiques. Après quelques jours de réflexion j'ai fini par le nommer LeeWee avec comme logo la représentation de mon chat «Akira» que j'ai vu naître et surtout que personne ne voulait tellement il était rachitique. Aucune connaissance dans le domaine...oui, donc il a fallut y remédier très 2
rapidement pour me mettre à la tâche. J'ai commencé à développer sur la plateforme Microsoft Windows XP en langage Delphi avec l'ide de chez Borland. Mais bon un langage libre développé avec un langage propriétaire ça le fait pas trop donc je me suis vite redirigé vers le langage FreePascal avec l'ide Lazarus qui a le mérite d'évoluer de façon exponentielle ce qui n'est pas le cas de certains...enfin cela n'appartient qu'à moi. Suite à une toute petite auto-formation je me suis lancé pleinement dans mon projet. «Ahahah!!!» me cracherons certains, car quand je dis auto-formation je vous avouerais ne mettre formé que sur les chaines de caractères et sur certaines bases fondamentales de la programmation dit orienté objet. 3
Chapitre 2 Une histoire de logique Avant toutes choses j'ai décidé d'en faire un langage interprété pour une meilleure ouverture et non un langage compilé. Cela permet de pouvoir modifier n'importe quel code avec un simple éditeur de texte sans avoir recours à un compilateur, et franchement cela m'aurait alourdi la tâche déjà pas simple au premier abord. Interprété comme le langage Python, Perl, Shell et j'en oublie... Simple, efficace et surtout libre à tous points de vue, tout ce que j'aime dans la programmation. Pendant un bout de temps je me suis mis à réfléchir à comment m'y prendre pour interpréter un code. Devant moi s'offrent deux possibilités l'interpréteur li le code soit grâce à des blocs soit ligne par ligne. Je dois avouer que la seconde possibilité m'a paru plus simple à mettre en œuvre pour le peu de connaissances que j'avais. Un simple fichier texte qui est lu ligne par ligne et qui interprète chaque ligne suivant les arguments de celle-ci, comme on le ferait pour lire un bouquin. Donc me voici dans le vif du sujet...il me faudra créer une boucle qui analyse mon fichier texte ligne par ligne. Extrait de code PROCEDURE Traitement; begin code.beginupdate; Try for Numero_de_la_ligne_en_cours := Numero_de_la_ligne to code.count -1 do begin end; finally code.endupdate; end; end; // Analyse de la ligne en cours de lecture 4
L'extrait de code présenté ci-dessus n'est pas fonctionnel en l'état car je n'est pas déclaré les variables : Numero_de_la_ligne_en_cours, Numero_de_la_ligne, code. pour des raisons de lisibilité. Toutefois le procédé utilisé dans LeeWee est le même. Notre boucle créée nous pouvons maintenant nous attaquer à la phase interprétation de la ligne en cours de lecture. Là on peu se lâcher car plusieurs méthodes d'analyse sont faisables. Pour ma part je vais avant tout déterminer le premier mot de la ligne actuelle. Je nomme cette méthode «Analyse par mots clé». Ensuite je n'ai plus qu'à récupérer les arguments pour pouvoir les interpréter. Pseudo code SI à gauche du premier espace de la ligne actuelle = au mot 'fenêtre' ALORS Nom_de_la_fenetre = à droite du premier espace Création de la fenêtre Nom_de_la_fenetre SINON SI à gauche du premier espace de la ligne actuelle = au mot 'bouton' ALORS Nom_du_composant = entre le premier espace et le mot 'dans' Nom_de_la_fenetre = à droite du mot 'dans' Création du bouton dans la fenêtre Nom_de_la_fenetre Extrait d'un code LeeWee Fenêtre fen01 Bouton btn01 dans fen01 Voilà la logique que j'ai utilisée pour développer mon pseudo langage LeeWee. Je l'ai nommé «Logique brute». 5
Chapitre 3 Mais où va t'on? Malgré une petite histoire, une simple logique, je n'avais pas trouvé de spécificité à LeeWee. Pourtant la majorité des langages de programmation ont leurs points forts et bien entendu leurs points faibles plus ou moins variés... Comme je vous l'avez expliqué dans le premier chapitre l'idée de me créer un langage de programmation m'est venue dès le début de mon apprentissage dans le développement informatique, une thèse rien de plus...oui, mais bon, au final avoir fait tout ça dans un simple but égocentrique serait du gâchis à mon sens. Lors d'un remaniement de la syntaxe je me suis permis de partager le début du travail remanié à la communauté Française d'ubuntu via la mailing liste. Là, comme d'habitude les retours se font ressentir assez rapidement. Ce que certains considèrent comme critique, moi je le prend comme future évolution. Dans ces critiques l'une d'elles m'a paru plus pertinente que les autres «Pourquoi ton langage à une syntaxe en langue française?». Oui effectivement j'avais basé la syntaxe de LeeWee sur ma langue maternelle, ce qui aurait pu être un avantage devient un inconvénient plus que désagréable. Là j'avais ma spécificité, le petit truc qui ferait de mon pseudo langage un véritable petit langage à par entière. «De quoi il parle là le Crafty?». Bein c'est pas compliqué, pourquoi ne pas développer un langage qui aurait la particularité d'utiliser comme syntaxe la langue maternelle de n'importe qui dans le monde? Voir allez plus loin, pourquoi ne pas permettre à quiconque de remanier la syntaxe comme bon lui semble. Un véritable petit langage modulable à volonté. Ce qui permettrait à monsieur et madame tout le monde habitant en Angleterre de créer un code en anglais et qui me permettrait à moi petit gaulois de le remanier, le mettre à jour, avec une syntaxe Française. Voilà je tiens ma spécificité entre les doigts. Maintenant il ne me reste plus qu'à le mettre en place. Sur les systèmes d'exploitation GNU/Linux, je me suis rendu compte que je n'avais pas besoin de sélectionner la langue à utiliser pour telle ou telle application, car si le travail est bien effectué on utilise une librairie de fonctions existantes sur tous OS dignes 6
de ce nom, son nom justement 'GETTEXT'. Au début j'avais peur que cette librairie de fonctions ne soit pas disponible dans mon langage de prédilection c'est à dire le FREEPASCAL, mais à ma grande surprise je me suis rendu compte que celle-ci existait et fonctionnait à merveille. 7
Chapitre 4 Les Composants, évènements et fonctions paramétriques. Je vais vous présenter les différents composants, mais avant tous, qu'est-ce qu'un composant? Bein c'est tout simplement un bouton, un champ de texte...tous se qu'il va faire de votre interface un véritable programme graphique. Enfin véritable il nous manque encore quelques trucs avant de pouvoir dire véritable... Commençons notre listing des composants : LA FENÊTRE: window nom_fenetre afficher fermer dimension largeur hauteur position x y visible activer titre Évènements disponibles : fermer clique double clique 8
LE BOUTON: button nom_bouton in nom_parent dimension largeur hauteur position x y titre activer visible Évènements disponibles : LE LABEL: label nom_label in nom_parent dimension largeur hauteur position x y titre activer visible Évènements disponibles : LE ÉDITION: edit nom_edit in nom_parent dimension largeur hauteur 9
position x y texte activer visible Évènements disponibles : LE ZONE: zone nom_zone in nom_parent dimension largeur hauteur position x y activer visible Évènements disponibles : L' IMAGE: label nom_label in nom_parent dimension largeur hauteur position x y activer visible étirer proportionel 10
Évènements disponibles : LE CHRONO: chrono nom_chrono in nom_fenetre Évènements disponibles: Fonctions paramétriques : AFFICHER: display nom_fenetre FERMER: close nom_fenetre Disponible pour: DIMENSION : dimension type_composant.nom_composant (largeur, hauteur) bouton étiquette édition zone image POSITION: position type_composant.nom_composant (x, y) bouton étiquette 11
édition zone image ALIGNEMENT: alignment type_composant.nom_composant (top bottom right left) bouton étiquette édition zone image TITRE: title type_composant.nom_composant (''title'') bouton étiquette TEXTE: text type_composant.nom_composant (''text'') édition ACTIVER: activate type_composant.nom_composant (true false) bouton étiquette édition zone image VISIBLE: 12
visible type_composant.nom_composant (true false) bouton étiquette édition zone image Évènements : CLIQUE : Disponible pour: 13