WikiNotte

CigogneSpec01

PagePrincipale :: ParametresUtilisateur :: Vous êtes ec2-18-119-143-4.us-east-2.compute.amazonaws.com
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
Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]