Niveau 3 - Les 4gl -     Page 2

 

Index
Enduser4gl Projet
EndUser4gl Objectifs
Enduser4gl  Presentation
Niveau 1 - Les EndUser4gl -
Niveau 2 - Les User4gl -
Niveau 3 - Les 4gl : Open Source - Page 1
EndUser4gl Telechargement
EndUser4gl Sponsor
EndUser4gl Recherche
EndUser4gl Contribution
EndUser4gl FAQ
EndUser4gl Participation

 

 

 

 

  Rappel

Liste de la compilation Enduser4gl : Les programmes de l'interpréteur

Liste de la compilation EndUser4gl : Tokens

Liste de la compilation EndUser4gl : Mots clés

Liste de la compilation EndUser4gl : Lexicaux

Liste de la compilation EndUser4gl : Règles

Liste de la compilation EndUser4gl : bloc Relation

Liste de la compilation EndUser4gl : Codes éxécution

Liste de la compilation EndUser4gl : execute.cpp

 

 

 

 

codes de l'interpreteur

 

Depiler   Alnum:

Depiler   String

Depiler   Long

Depiler   Double

Depiler   Float

 Depiler   Integer 

 

 

 Attention :

Toutes nouvelles instructions

créées par vous même ne

sont valables que sur votre

ordinateur

 Vous n'avez aucun droit de commercialisation de

EndUser4gl même en cas

de

réplication du pgm

EndUser4gl.exe

sous un autre nom .

 

 

 Si vous souhaitez

publier

 

vos instructions :

Contactez :

bergoux@wanadoo.fr

 

 Level 4gl : Page 1

 Level 4gl : Page 3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   Level 4gl : Page 1 >  Level 4gl : Page 3


 PAGE 2  :    PARTICIPER A L'EVOLUTION DE ENDUSER4GL

 

Le chemin du projet OPEN SOURCE : c:\EndUser4gl\4gl\bin\OpenSource\Enduser4gl\EndUser4gl.dsw

 

Le programme EndUser4gl.exe est dans le répertoire c:\EndUser4gl\4gl\bin\EndUser4gl.exe. C'est obligatoire

A chaque nouvelle compilation de vos codes éxécutions, vous devez transférer le nouveau programme c:\endUser4gl\4gl\bin\OpenSourcel\Enduser4gl\debug\EndUser4gl.exe

dans le répertoire c:\EndUser4gl\4gl\bin\EndUser4gl.exe.

 

Autre Exemple : Utilsation de la librairie statique : ENDUSER4GL.LIB (regroupe tous les pgms sources du standard )

c:\EndUser4gl\4gl\bin\User4gl\Enduser4gl\EndUser4gl.dsw

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 Niveau 3: Les Spécialistes 4gl: Mise en oeuvre

A vous de réaliser ...... . Allons aux explications les plus simples pour comprendre

 

Le compilateur

 

../FichierCommun/Sysdict.txt

../FichierCommun/Systoken.txt

 

 

Le compilateur EndUser4gl a 2 cycles :

Cycle 1 : C' est la lecture du programme de l' utilisateur  *.Eu4glExe et création de la table des

symboles, analyseur syntaxique etc..

Vous pouvez développer des codes exécutions pour créer des variables, contrôler des instructions etc..

1)Ces codes exécutions possibles sont compris dans la tranche de 20000 à 21000  :

création des variables de type uniquement : integer,char,string, float,double

2)Ces codes exécutions possibles sont compris dans la tranche à 21001 à 32500 :

création de contrôles ou autres

Cycle 2 : C' est la relecture du programme de l' utilisateur  *.Eu4glExe et exécution de vos actions à

travers vos codes exécutions.

La tranche de numéro des codes exécutions doit être > à 32500 jusqu' à 2,147,483,647

(c' est un type long)

 

Instructions

 ../FichierCommun/EndUserRules.txt

 

C' est pratiquement l' exercice le plus difficile:

Réflexion sur la création d' une instruction : son objectif, son utilité, son optimisation.

EndUsergl a pour vocation d' être un langage OPTIMUM sans être restreint. Il existe suffisamment de

langage informatique sur le marché capable de stafisfaire nos informaticiens en cas de programmation

complexe.

EndUser4gl : C'est l'art de maitriser la synthèse d'une fonction ou plusieurs fonctions à travers une

instruction .......

RESUME :

 

ENDUSERCOMPIL.CPP

 

OPCCODEX.H

 

ENDUSERGL.H

EXECUTE.CPP

 

* créer votre token : EndUserCompil.cpp : #TOKEN xxxxx

* créer vos instructions et ou mots clés :EndUsercompil.cpp: #DEFINE-INST  <identifiant pour la

règle>   suivi <mot clé du langage> ou #DEFINE-MCLE  <identifiant pour la règle>   suivi <mot clé

du langage>

* créer votre règle syntaxique : EndUsercompil.cpp :

T_INSTRUCTION :    ",

"                 T_DECLARE_PROCFUNC   ",

"               |  M_BEGIN  T_INST_LIST M_ENDBEGIN    ",

* créer vos codes exécutions :  EndUsercompil.cpp + opccodex.h

"#define CodeCreateVarInteger   20000",

+ votre source cpp : Créer la fonction qui sera appelée par EXECUTE.CPP

* Ajouter dans la Classe ENDUSER4GL.H : votre nouvelle fonction

 

* Ajouter dans EXECUTE.CPP : fonction :

  EndUser4glApp::OPCExecute_user(long OPCcodeExe) :

  votre code exécution en y ajoutant la fonction crée ci dessus

 

 

 

Les fonctions du

compilateur

Type de la variable :

P_INTEGER

P_FLOAT

P_DOUBLE

P_STRING

P_ALNUM

P_NAMEVAR : Nom de la variable

../FichierCommun/Opcsysh.txt

../FichierCommun/Opcdefineh.txt

Voir les fonctions Depile au dessus

Mettre à jour la table des symboles  :   Ex :   a := b;  

OPC_Update_TableSymbole(Nom de la variable (a), &adresse de la valeur) ../FichierCommun/Excalculcpp.txt

OPC_Update_TableSymboleString(Nom de la variable , &adresse de la valeur) ../FichierCommun/Exmovecpp.txt

OPC_CreateGlobalVar_TableSymbole(P_INTEGER,zone1,(int)NULL);

 OPC_CreateLocalVar_TableSymbole(P_INTEGER,0,zone1,(int)NULL);   ../FichierCommun/Exvarcpp.txt

void OPC_ReturnValuesTabSymbole(\ short int , /* type : P_FLOAT,P_STRING etc... */ short int, /* local : LOCAL ou GLOBAL ou CONTEXTE */ char *, /* Nom de la variable */ short int *, /* Taille de la structure : type P_STRUCT, */ short int *, /* nombre d'élément : type P_TABLE */ short int *, /* offsetDebut de la variable dans la structure : type P_STRUCT, */ short int *, /* offsetFin de la variable dans la structure : type P_STRUCT, */ short int *, /* longueur decimale de la variable */ short int *, /* longueur de la variable */ void *); /* ./FichierCommun/Excalculcpp.txt

Récupérer l'index une boite de dialogue :

NumDialog = OPC_Return_NumDialog(zone1);../FichierCommun/Exewinob.txt

Récupérer l'indesx une fenêtre d'une boite de dialogue :./FichierCommun/Exewinob.txt

Dialog[NumDialog].TabCoordWin[Ival].hWnd

nstruction EndUser4gl :  M_SETNEWPARENTWIN  M_PO L_WIN M_2PP L_WIN   M_PF   { CodeExeSetNewParentWin } ",

case CodeExeSetNewParentWin :

                                OPCF_Pile_Depile( P_NAMEVAR, (void *)zone1 );

                                OPCF_Pile_Depile( P_INTEGER, (void *)&Ival )  ;

                                NumDialog  = OPC_Return_NumDialog(zone1);

                                OPCF_Pile_Depile( P_NAMEVAR, (void *)zone2 );

                                OPCF_Pile_Depile( P_INTEGER, (void *)&Ival2 )  ;

                                NumDialog2 = OPC_Return_NumDialog(zone2);

                                        OPC_Depile_All();

        SetParent(Dialog[NumDialog2].TabCoordWin[Ival2].hWnd,

                Dialog[NumDialog].TabCoordWin[Ival].hWnd);// child,new parent

Vider les piles de variables : OPC_Depile_All();

Après chaque exécutiond'un code , la pile doit être vide .a utiliser en cas de précaution...

 

Codes Sources

 

calcul.cpp : calculette ordinaire

if.cpp

move.cpp

sql.cpp

ExeSynListView.cpp

ExeWinOb.cpp   etc....

les codes éxécutions de EnUser4gl ( non compris exewin.cpp,sql.cpp,query.cpp,gif.cpp,grid.cpp....)

 Exemple de mise en oeuvre :

Création d'une instruction :    CycleCompilerEndUser4gl :  <L_STRING>

 Objectif de cette instruction : Démonstration des 2cycles de EndUser4gl : Ex : C:\ENDUSER4GL\EXAMPLECYCLEENDUSER4GL.EU4GLEXE

Cycle1 : Test de la valeur <L_string> et affichage d'une boite de dialogue. Rappel : le cycle 1 permet

de créer la table des symboles, analyse syntaxique et vérifications souhaitées par l'informaticien.(notre exemple)

Cycle 2 : Lecture de  la chaine de caractère , concatènation avec "http:\\" et accès à internet.

Ce sont les actions des codes éxécutions de EndUser4gl.

 

Ce qui faut dévélopper pour cette démonstration :

Dans le programme source EndUserCompil.cpp :

1°) Création du token : #TOKEN  T_4GL

2°) Création du mot clé : #DEFINE-MCLE          M_CYCLECOMPILERENDUSER4GL                 CYCLECOMPILERENDUSER4GL

3°) Ajout du token : T_4GL  à la fin du Token T_INSTRUCTIONS et développemet de l'instruction CycleCompilerEndUser4gl :

Extrait de Endusercompli.cpp :

"                        |  T_4GL ;",

// *****************************************************

// PARTICIPATION 4GL : specialist

// ***************************************************

" T_4GL       :       M_CYCLECOMPILERENDUSER4GL M_2PP L_STRING   ",

"                      { CodexDemoCycle1 }   ",

"                      { CodexDemoCycle2 }  ; ",

4°) Toujours dans EndUserCompil.cpp, création des codes exécutions :

" #define CodexDemoCycle1 20600",

" #define CodexDemoCycle2 70000",

 

5°) Déclarations C/CPP Dans le fichier entête OPCCODEXE.H

 #define CodexDemoCycle1 20600

#define CodexDemoCycle2 70000

 

6°) Rattachement des 2 codes éxécutions ci-dessus dans le programme source : EXECUTE.CPP

Extrait de execute.cpp :

 long  EndUser4glApp::OPCExecute_user(long OPCcodeExe)

{   MSG msg;      

/* ************** ***************************************** */

/* DEMO ENDUSER4GL COMPILER                               */

/************** ***************************************** */

    if((  OPCcodeExe == 20600)  ||  ( OPCcodeExe ==  70000)  )

    return OPCExecute_DemoEndUser4gl(OPCcodeExe) ;

 

7°) Développement de la fonction ci-dessus : OPCExecute_DemoEndUser4gl(OPCcodeExe)  au sein d'un programme source ExedemendUser.cpp

Développement des cdes éxécutions  :

Extrait de exedemoenuser.cpp :

long EndUser4glApp ::OPCExecute_DemoEndUser4gl(long OPCcodeExe)

{       char valeur1 [MAXBUFLENSTRING] = "\0";

        char url [MAXBUFLENSTRING] = "\0";

    char zone1[C_CMP_TAILLE_NOM_DICT] = "\0";

    switch( OPCcodeExe)

   {   case CodexDemoCycle1  : //            20600 see you: EndUsercompil.cpp/Opccodex.h

                                OPCF_Pile_Depile( P_NAMEVAR, (void *)zone1 ); // ***NULL

                                OPCF_Pile_Depile( P_STRING, (void *)valeur1 ) ;

                                   OPC_Depile_All();

                                  printfEU("Cycle 1 Enduser4gl Compiler : Action %s ",valeur1);STOP();STOP();

                        OkMsgBox("Enduser4gl Compiler     ","Waiting...%s",valeur1);        break;

    case CodexDemoCycle2  : //            70000 see you: EndUsercompil.cpp/Opccodex.h

                                OPCF_Pile_Depile( P_NAMEVAR, (void *)zone1 ); // ***NULL

                                OPCF_Pile_Depile( P_STRING, (void *)valeur1 ) ;

                                   OPC_Depile_All();

                  printfEU("Cycle 2 Enduser4gl Compiler : Action %s ",valeur1);STOP();STOP();

                                lstrcpy(url,"http://"); lstrcat(url,valeur1);

                                   ShellExecute(NULL,_T("open"),url,_T(""),NULL,0);

8) Création de votre fichier texte avec l'extension *.Eu4glExe :

c:\endUser4gl\exampleEndUser4lgLib.Eu4glExe.

 


Bergougnoux Consulting

14 rue Jean Moulin 37550 St Avertin, Tours FRANCE.

Copyright (c) 2001-2005 ENDUSER4GL

Tous droits réservés.  All rights reserved

fax : 00 33 8 71 22 59 46

contact@enduser4gl.com