Voici une page pour réfléchir à un langage simple à apprendre mais puissant.
J'ai débuté à programmer avec le langage BASIC sur un Amstrad CPC 6128. Actuellement, mon langage fétiche est le Java et souvent on commence de nos jours par celui-ci car il a la réputation d'être facilement abordable. Il existe aussi d'autres langages pour novice mais je trouve qu'ils restent un peu trop archaïques, on peut prendre par exemple le
VisualBasic? de Microsoft. Il existe aussi le Logo Tortue mais il nous laisse rapidement sur notre faim.
Si j'avais commencé par Java, je pense que j'aurais eu moins de plaisir à me lancer dans la programmation. Ces concepts sont trop évolués pour un débutant. Par contre, le langage Basic permet de se mettre dans le bain un peu plus doucement! Malheureusement, c'est un langage qui n'est pas parfait : pas de typage fort des variables, pas moyen de créer des méthodes, donc, impossible de structurer son code afin de le rendre plus facilement lisible.
C'est vrai qu'il faut commencer doucement mais il faut également partir sur de bonnes bases !
Mon but est de réfléchir à un langage très simple à apprendre avec des notions de programmation modernes et qui permettra aux courageux de partir facilement vers d'autres langages.
Pour qu'un langage soit formateur, il ne doit contenir que des commandes simples.
Fiche d'identité
*Nom du langage : [
http://fr.wikipedia.org/wiki/Cigogne Cigogne]
*Version spécification : 0.1
*Etat : spécification 0.1 en cours
*Création : Lundi 27 juin 2005
*Principes à reprendre du BASIC :
Les lignes ( on sait rapidement l'ordre du programme )
Il peut être interprété
GOSUB/RETURN, GOTO
FOR, WHILE
LIRE, ECRIRE dans un fichier seulement les types connus.
Pas de { ( [
Pas de paramètre dans les méthodes
Pas de notion de pointeur ou référence d'objet
*Principes à reprendre du Java :
Déclaration des variables.
Typage fort des variables.
Possibilité d'importer des librairies
*Autres principes :
variables en minuscule
commandes systèmes en majuscule
une commande par ligne
Être capable de faire du récursif
Facilement traductible dans une autre langue
Pas de notion d'objet ni de méthode. Seulement de programme.
Il se compile en XML. (extension .CIG)( XSL pour le mettre en java )
Notion de fichier invisible. on stocke les variables dans une bibliothèque
[Pas d'erreur]
La structure d'un programme Cigogne
PROGRAMME nom
[DECLARATIONS]
...
INSTRUCTIONS
...
Les balises
PROGRAMME et
INSTRUCTIONS sont obligatoires.
Un programme doit avoir un nom. Un fichier texte peut contenir plusieurs programmes.
A l'exécution, on commence par le premier programme du fichier appelé.
DECLARATIONS permet d'indiquer les variables qui vont être utilisées dans le programme.
Exemple :
DECLARATIONS
TEXTE variable1
NOMBRE variable2
Les types de base
TEXTE, pour stocker une chaîne de caractère.
: valeur par défaut, le texte vide
NOMBRE, pour stocker un nombre entier ou décimal.
: valeur par défaut, la valeur 0
DONNEES type ( c'est une structure de données), on ne peut stocker qu'un seul type de donnée par structure : TEXTE, NOMBRE ou DONNEES ( ça devient un tableau à n dimensions).
: valeur par défaut, une structure vide
Les commandes de base
AFFICHER
DEMANDER
SI condition ALLER VERS programme
SI condition ALLER VERS programme1 SINON ALLER VERS programme2
ALLER VERS programme
REVIENS
REM
COPIER
POUR CHAQUE iterateur ALLER VERS programme
CURSEUR
TAILLE
VIDE
VIDER
PRENDRE variable DE variable DANS
VIDER variable
AJOUTER AU DEBUT variable1 DANS variable2
AJOUTER A LA FIN variable1 DANS variable2
COUPER AU DEBUT variable1 DANS variable2
COUPER A LA FIN variable1 DANS variable2
CHOISIR LIBRARIE
FORMULE calcul DANS variable
[SI ERREUR ALLER VERS programme]
SI HORS STRUCTURE ALLER VERS programme
SI DIVISION NULLE ALLER VERS programme
UTILISER PROGRAMMES fichier.cig
Les conditions
NOMBRE, vrai si >0
CHAINE, vrai si taille>0
DONNEES, vrai si taille>0
Les iterateurs
NOMBRE, on prend la valeur entière de NOMBRE et on boucle autant de fois que cette valeur.
:Si <0 ou 0, ne boucle pas
:CURSEUR, valeur de la boucle
CHAINE, boucle sur tous les caractères.
:Si la chaîne est vide, on ne boucle pas.
:CURSEUR, caractère de la boucle
DONNEES, on boucle sur toutes les données du tableau.
:Si le tableau est vide, on ne boucle pas.
:CURSEUR, la donnée de la boucle.
Les variables
Une variable est considérée comme un fichier.
C'est à dire, si je stocke dans une variable un prénom, je dois pouvoir retrouver ce prénom dans un autre programme lancer dans un autre processus ou si je quitte mon programme et que je le réexécute :
:TEXTE monprenom "robert"
::crée la variable en mémoire et sauvegarde le prénom
:TEXTE monprenom
::crée la variable et va chercher dans la bibliothèque la valeur si elle existe.
:TEXTE monprenom VIDE
::crée la variable vide et efface la valeur si elle existe déjà.
On peut imaginer de stocker une structure de numéros de téléphone.
Comment affecter des valeurs à une variable :
: COPIER monprenom "robert"
: DEMANDER monprenom
: COPIER monprenom variable2
: COPIER monprenom VIDE
Pour effacer une variable de la mémoire permanente, il faut lui mettre la valeur par défaut.
Les librairies
Afin de classifier les variables, on définit une librairie :
:
CHOISIR LIBRARIE agenda
Chaque programme choisit sa librairie, il peut changer de librairie en cours d'exécution.
Une librairie peut être un répertoire sur le disque dur, dans un fichier texte, ou une base de données.
Cette gestion de variables persistantes permet de partager les données entre programmes qui peuvent être sur des machines différentes.
Une variable créée dans une librairie n'est pas visible dans une autre.
Manipulation et extraction des données
Ces commandes vont être les mêmes quelque soit le type de donnée :
* Ajouter :
::AJOUTER AU DEBUT variable1 DANS variable2
::AJOUTER A LA FIN variable1 DANS variable2
:Si variable1 est un NOMBRE et variable2, une structure de données de NOMBRE, on ajoute variable1 dans la liste variable2.
:Si variable1 est un NOMBRE et variable2, une structure de données autre que NOMBRE,
interdit pas le compilateur : problème de typage.
:Si variable1 est un NOMBRE et variable2, un NOMBRE, on additionne les deux nombres dans variable2.
:Si variable1 est un NOMBRE et variable2, un TEXTE, on ajoute dans variable2 les chiffres de variable1.
:Si variable1 est un TEXTE et variable2, une structure de données de TEXTE, on ajoute variable1 dans la liste variable2.
:Si variable1 est un TEXTE et variable2, une structure de données autre que TEXTE,
interdit pas le compilateur : problème de typage.
:Si variable1 est un TEXTE et variable2, un NOMBRE,
interdit pas le compilateur : problème de typage.
:Si variable1 est un TEXTE et variable2, un TEXTE, on ajoute dans variable2 les lettres de variable1.
:Si variable1 est une DONNEES et variable2, une structure de données de DONNEES, on ajoute variable1 dans la liste variable2.
:Si variable1 est une DONNEES et variable2, une structure de données autre que DONNEES,
interdit pas le compilateur : problème de typage.
:Si variable1 est une DONNEES et variable2, un NOMBRE,
interdit pas le compilateur : problème de typage.
:Si variable1 est une DONNEES et variable2, un TEXTE,
interdit pas le compilateur : problème de typage.
* Couper :
::COUPER AU DEBUT variable1 DANS variable2
::COUPER A LA FIN variable1 DANS variable2
:Si variable1 est un NOMBRE et variable2, une structure de données, on supprime de variable1 cellule dans la liste variable2.
:Si variable1 est un NOMBRE et variable2, un NOMBRE, on soustrait les deux nombres dans variable2.
:Si variable1 est un NOMBRE et variable2, un TEXTE, on supprime les variables1 caractères de variable2.
:Si variable1 est un TEXTE et variable2, une structure de données,
interdit pas le compilateur : problème de typage.
:Si variable1 est un TEXTE et variable2, un NOMBRE,
interdit pas le compilateur : problème de typage.
:Si variable1 est un TEXTE et variable2, un TEXTE, on ajoute dans variable2 les lettres de variable1.
:Si variable1 est une DONNEES et variable2, une structure de données,
interdit pas le compilateur : problème de typage.
:Si variable1 est une DONNEES et variable2, un NOMBRE,
interdit pas le compilateur : problème de typage.
:Si variable1 est une DONNEES et variable2, un TEXTE,
interdit pas le compilateur : problème de typage.
Les formules mathématiques
Est-ce qu'un langage doit savoir interpréter des formules mathématiques ? A priori oui, car ils le font tous... En Java, on peut affecter une variable en effectuant un calcul :
:int i = 1 + 1;
On va faire trois opérations en une ligne : une création de variable, une affectation et un calcul !
Dans un langage simple, on va partir du principe qu'il ne sait pas le faire. Ce n'est pas son job ! On passera par une commande
FORMULE pour interpréter les mathématiques. La syntaxe que va reconnaître la commande
FORMULE dépendra donc du compilateur...
:
COPIER calcul "1+1*(2+2)"
:
FORMULE calcul DANS variable
:
FORMULE "9+8" DANS variable
Si
variable est une structure, on ajoute la valeur à cette structure ( appel implicite à AJOUTER A LA FIN ).
Si
variable est une chaîne ou un nombre, on remplace la valeur à cette structure ( appel implicite à COPIER DANS ).
Héritage des variables dans un appel de programme
Il n'y a pas de passage de paramètre lors de l'appel d'un autre programme. Le programme appelé hérite des variables déjà créées.
Utiliser des programmes externes
UTILISER PROGRAMMES manipulation_chaine.cig
UTILISER PROGRAMMES formule_mathematiques.cig
<tt>monfichier.cig</tt> est un fichier compilé en XML. On peut appeler le programme directement par son nom comme s'il était présent dans le fichier. L'héritage des variables fonctionne identiquement.
Le compilateur doit valider l'existence des programmes appelés et renvoyer une erreur s'il ne les trouve pas.
Gestion des erreurs
L'exécution du programme ne doit pas générer d'erreur. Par contre, on peut surveiller son comportement. Par exemple, une division par zéro, une extraction dans une chaîne vide, etc...
*Voici la liste des comportements :
SI HORS STRUCTURE ALLER VERS programme
SI [
http://www.col-camus-soufflenheim.ac-strasbourg.fr/Page.php?IDP=81&IDD=0 DIVISION INFINIE] ALLER VERS programme
SI PROGRAMME INCONNU ALLER VERS programme
Une erreur stop le programme et l'affiche.
Par contre, si un :
:SI ERREUR ALLER VERS programme
est placé avant l'erreur possible alors, lors de l'erreur, on saute vers programme.
Exemple : HelloWorld?
REM HelloWord?
PROGRAMME hello
:DECLARATIONS
::TEXTE chaine "HelloWorld?"
:INSTRUCTIONS
::AFFICHER chaine
Exemple : HelloWorld2?
PROGRAMME hello2
:DECLARATIONS
::TEXTE chaine "HelloWorld?"
:INSTRUCTIONS
::POUR CHAQUE chaine ALLER VERS afficher
PROGRAMME afficher
:INSTRUCTIONS
::AFFICHER CURSEUR
::REVIENS
Exemple : sondage
REM Le programme principal
PROGRAMME sondage
:DECLARATIONS
::TEXTE chaine
::NOMBRE age
:INSTRUCTIONS
::AFFICHER "Bonjour"
::AFFICHER "Votre nom :"
::DEMANDER chaine
::AFFICHER "Votre age : "
::DEMANDER age
::SI age - 20 ALLER VERS vieux SINON ALLER VERS jeune
::AFFICHER "Fin du programme"
PROGRAMME jeune
:INSTRUCTIONS
::AFFICHER "Tu es jeune !"
::REVIENS
PROGRAMME vieux
:DECLARATIONS
::DONNEES TEXTE langages "Java" "C++" "Pascal"
:INSTRUCTIONS
::AFFICHER "Tu es vieux !"
::AFFICHER "Il existe d'autres langages : "
::POUR CHAQUE langages ALLER VERS afficher
::REVIENS
PROGRAMME afficher
:INSTRUCTIONS
::AFFICHER CURSEUR
:REVIENS
Exemple : stockage
PROGRAMME stockage
:''DECLARATIONS''
::TEXTE nom
:INSTRUCTIONS
::SI nom ALLER VERS affichernom
::AFFICHER "Pas de nom !"
::AFFICHER "Quel est ton nom"
::DEMANDER nom
::VA VERS affichernom
PROGRAMME affichernom
::TEXTE nom
:INSTRUCTIONS
::AFFICHER "Ton nom est :"
::AFFICHER nom
Exemple : Un agenda
REM Agenda électronique
''PROGRAMME'' agenda
''DECLARATIONS''
:TEXTE choix
''INSTRUCTIONS''
:CHOISIR LIBRAIRIE mon agenda
:AFFICHER "[r]rechercher ou [a]jouter ?"
:DEMANDER choix
:SI choix EGALE A "a" ALLER VERS ajouter
:SI choix EGALE A "r" ALLER VERS rechercher
:ALLER VERS agenda
''PROGRAMME'' ajouter
:DONNEES TEXTE informations VIDE
:TEXTE nom
:TEXTE telephone
:DONNEES DONNEES agenda
''INSTRUCTIONS''
:AFFICHER "Le nom :"
:DEMANDER nom
:AFFICHER "Le numéro de téléphone :"
:DEMANDER telephone
:REM On stoque les informations dans la structure.
:AJOUTER A LA FIN nom DANS informations
:AJOUTER A LA FIN telephone DANS informations
:AJOUTER A LA FIN informations DANS agenda
:REVIENS
''PROGRAMME'' rechercher
''DECLARATIONS''
:TEXTE argument
:DONNEES DONNEES agenda
''INSTRUCTIONS''
:AFFICHER "Quel nom voulez-vous rechercher ?"
:DEMANDER argument
:POUR CHAQUE agenda ALLER VERS analyse agenda
:REVIENS
''PROGRAMME'' analyse agenda
''DECLARATIONS''
:TEXTE nom
:TEXTE telephone
:TEXTE argument
''INSTRUCTIONS''
:PRENDRE 1 DE CURSEUR DANS nom
:PRENDRE 2 DE CURSEUR DANS telephone
:SI nom EGALE A argument ALLER VERS afficher
:REVIENS
''PROGRAMME'' afficher
''DECLARATIONS''
:TEXTE nom
:TEXTE telephone
''INSTRUCTIONS''
:AFFICHER "Enregistrement trouvé :"
:AFFICHER "Nom :"
:AFFICHER nom
:AFFICHER "Téléphone :"
:AFFICHER telephone
:REVIENS
Auteur du document
Ronan Mounès