Niveau 3 - Les 4gl : Open Source - Page 1

 

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

   

Publient EndUser4gl

  

 Level 4gl : Page 2

 Level 4gl : Page 3

 

 L'Editeur de EndUser4gl

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Level 4gl : Page 2   >   Level 4gl : Page 3

  


   

 

 

 

Open Source EndUser4GL : Détail des programmes :

Voir le projet : EndUser4gl.DSW (Visual C++ 6.0)

Dans le répertoire C:\EndUser4gl\4gl\bin\OpenSource\EndUser4gl

Ancien répertoire : C:\EndUser4gl\4gl\bin\User4gl\EndUser4gl

 

 Tous les programmes sources sont livrés avec le produit . C:\EndUser4gl\4gl\bin

 

 Open Source EndUser4GL : Les différentes étapes de mise en oeuvre (résumé)

 

Le langage EndUser4gl a été réalisé avec le compilateur de Microsoft Visual C++ 6.0 .

La conception de ce langage interpelle les traditionnelles connaissances sur la théorie des compilateurs,

tokens,lexèmes, analyseur syntaxique etc...

Je vais essayer de vous résumé de façon simple la construction de cet interprêteur .

Ce qu'il faut savoir pour cette fabrication :

* Définir des Tokens qui amorce la règle syntaxique. Celle ci identifie une syntaxe à base d'instructions

ou de mots clés , et après chaque instructions ou mots clé, il suffit de développer l'action voulue :

Ce sont les codes éxécutions.

 

 

 

Exemple :   Une syntaxe grammaticale : sujet verbe complément

Je chante  faux  .

  je raconte une histoire. il chante .

devient  avec le compilateur EndUser4gl:

MAIN  :   T_SUJET T_VERBE T_COMPLEMENT M_P ;

T_SUJET :    

                 M_JE   

        |       M_TU    

        |       M_IL     ;

T_VERBE :       M_CHANTE  

        |       M_RACONTE   ;

T_COMPLEMENT :  M_ARTICLE M_HISTOIRE { Action 2 }

        |       M_FAUX  { Action 1 }

        |        ;

 

#TOKEN        MAIN

#TOKEN        T_PHRASE

#TOKEN        T_SUJET

#TOKEN        T_VERBE

#TOKEN        T_COMPLEMENT

** lexicaux

#DEFINE-LEX            L_NAME_SUJET               ALNUM

#DEFINE-LEX            L_NAME_VERBE              ALNUM

#DEFINE-LEX            L_NAME_COMPLEMENT   ALNUM

#DEFINE-LEX             L_NUM                            FLOAT

#DEFINE-LEX             L_INT                            INTEGER

#DEFINE-LEX             L_LONG                  LONG

#DEFINE-LEX             L_STRING                 STRING

#DEFINE-LEX             L_MOT                    MOT

 

* sysnopsis de mots-cles : #DEFINE-MCLE     M_xxxx     constante

* EndUser4gl  Copyright 2001-2007

 

#DEFINE-MCLE           M_P            .

#DEFINE-MCLE           M_JE           JE

#DEFINE-MCLE           M_TU           TU

#DEFINE-MCLE           M_IL           IL

#DEFINE-MCLE           M_CHANTE       CHANTE

#DEFINE-MCLE           M_FAUX         FAUX

#DEFINE-MCLE           M_ARTICLE      UNE

#DEFINE-MCLE           M_HISTOIRE     HISTOIRE

#DEFINE-MCLE           M_RACONTE      RACONTE

 

#DEFINE-CHAR-SPEC         .

 

 Liste de la compilation Enduser4gl : Liste des 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 syntaxiques

Liste de la compilation EndUser4gl : bloc Relation et caractères spéciaux

Liste de la compilation EndUser4gl : Codes éxécution

Liste de la compilation EndUser4gl :  éxécution des codes de l'interpreteur

 

 

 

 

 

 

 

 

 

 

 

 

 

 


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

 

Règles

générales :

 

*  * DEBUT DES REGLES : MAIN : est obligatoire

* Conventions informelles :

*                         Les T_ :  TOKENS

*                         Les M_ :  LES MOTS CLES

*                         Les I_ :  LES INSTRUCTIONS

*                         Les L_ : les variables (entiers,strings etc qui seront

*                                  empilées

*       |       exprime le OU

*       | ;     exprime le RIEN , c'est-à-dire aucune obligation de trouver

*               un mot cles, une instructions, une variable

*       | xxxxxx ;     exprime une obligation de trouver et une fin de régle pos

*                     sible

* Les Tokens sont toujours suivi de ":" et exprime la ou les régles à suivre.

* et leur terminaison est le ;

 

*  Token :          

                  #TOKEN   <nom du token>

Exemple :"#TOKEN        T_DIVISIONS"

Attention le token "MAIN est obligatoire en début des règles

*  Les instructions:

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

Exemple : "#DEFINE-INST          I_SUP               >           ",

 

*  Mots Clés :

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

Exemple :"#DEFINE-MCLE           M_GETSELECTLISTBOX          GETSELECTLISTBOX"

 

*  Règles syntaxiques :

Commence par Début par un TOKEN et 2 petits points":" Identifiant de

l'instruction ou mots clé (Max 30 car )  . Chaque règle peut contenir 35

cellules maximum(inst ou mots clé+ code exe) . Employer le | exprimant la

condition OU . Chaque règle doit se termeiner par un point virgule ;

exemple :

" T_INSTRUCTION :    ",

"                 T_DECLARE_PROCFUNC   ",

"               |  M_BEGIN  T_INST_LIST M_ENDBEGIN    ",

"               |  M_RETURN   T_INSTRUCTRETURN { CodeExeReturn }",

"               |  T_AFFECT_ALPHA   ",

"               |  T_AFFECT_NUM    { CodeExeTabSymUpdate }",

"               |  M_DISPLAY  ;    ",

 

 

*  Codes exécution : { Identifiant du Code (3o car max) } : nota si vous avez

plusieurs codes exécutions pour une instructions, vous devez mettre chaque

code exécution sur une ligne .

 

Exemples

DEPILER

Depiler   Alnum:    OPCF_Pile_Depile(P_STRING, (void *)&(char[] ));

Depiler   String :    OPCF_Pile_Depile(P_STRING, (void *)&(char []l) );

Depiler   Long :    OPCF_Pile_Depile(P_INTEGER, (void *)&(long) );

Depiler   Double  :  OPCF_Pile_Depile(P_INTEGER, (void *)&(double) );

Depiler   Float     :   OPCF_Pile_Depile(P_INTEGER, (void *)&(float));

Depiler   Integer   :  OPCF_Pile_Depile(P_INTEGER, (void *)&(int) );

Exemples

 CODES

 EXECUTIONS

 Annonce:

calcul.cpp : calculette ordinaire

if.cpp

move.cpp

sql.cpp

   Offert en cas d'acquisition d'une licence:  SQL.CPP

RESUME :

* créer votre token : EndUserCompil.cpp

* créer vos instructions et ou mots clés :EndUsercompil.cpp

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

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

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

* Ajouter dans EXECUTE.CPP : fonction OPCExecute_user(long OPCcodeExe)

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

 

MISE EN OEUVRE

 

Exemple :

1) Exemple  : Votre instruction :

                 Hello "Windows" ou Hello "xxxxxx"

** *************

** TOKENS

** *************

#TOKEN T_HELLO

** ***********

** KEYWORD   

** **********

##DEFINE-MCLE M_HELLO    HELLO

** ********************

* lexicaux

** ********************

#DEFINE-LEX            L_STRING   STRING

** *************

** RULES/REGLE

** *************

MAIN :  T_HELLO ;

 

T_HELLO : M_HELLO L_STRING { CodeExeHello } ;

** ************

** Code exe :  opccodex .h

** ************

 #define CodeExeHello 200   <........

 EXECUTE.CPP :

 #include "opccodex.h" .............

Class EndUserApp :: Cwnd

{....

long OPCExecute_user(long );

...

long FunctionTOTO(long)

}

extern long

EndUserApp::OPCExecute_user(long (OPCcodeExe)

) /* C'EST LA FONCTION STANDARD DU COMPILATEUR ENDUSER4GL

{

    if((  OPCcodeExe== 200)    )

                 return FunctionTOTO(OPCcodeExe)  ;    

}

*************************************************Fin de Execute.cpp

 *************************************************

     Programme : toto.cpp             

*************************************************

int EndUserApp::FunctionTOTO(long codeexe)

{  .char value[255];

  char name[60];

 if( OPCcodeExe == 200 )   

        {   

                 OPCF_Pile_Depile(P_NAMEVAR, (void *)name );

                OPCF_Pile_Depile(P_STRING, (void *)value );

                printf("%s" ,value);

         }

 ** **********************************************

**      R E SU ME

** *********************************************

STructure Compilateur :

 

Call/Appel du compilateur/interpreteur :ENDUSER4GL.CPP: EndUSerApp::InitInstance()

{...

        EndUser4glInterpLib(m_hInstance,m_hPrevInstance,pszLine2+1 ,NULL);

//+1 =blank

}

-- > return (long code execution)

 2) Point entrance /Point d'entrée du  (long Code) :  

         long EendsSer4glApp::OPCExecute_user(long OPCcodeExe)

 3) Execution of the function representedby specialist  :  

                                function ...EndUserApp::xxxxxx


 

ENDUSER4GL OPEN SOURCE VISUAL C++ 60   June 2004

 Résumé :

 

**STEP 1 * INVENTE / MAKE : INSTRUCTIONS

1) Example : (into hello.4glExe with notepad, write, editenduser4gl

 

Hello "Windows"

** ///////////////////////////////////////////////////END STEP 1

 

 

**STEP 2 UPDATE / MISE A JOUR :ENDUSER4COMPIL.CPP

** *************

** 1 TOKENS :

** *************

#TOKEN T_HELLO

** ***********

** 2 KEYWORD/MOT CLE

** **********

#DEFINE-MCLE M_HELLO HELLO

** ********************

* 3 lexicaux

** ********************

#DEFINE-LEX L_STRING STRING

** *************

** 4 RULES/REGLE + CODE EXECUTION

** *************

MAIN : T_HELLO ;

T_HELLO : M_HELLO L_STRING { CodeExeHello } ;

 

** ************

** 5 Code exe :

** ************

"#define CodeExeHello 60120 ", <........

** /////////////////////////////ENDUSERCOMPIL.CPP//////END STEP 2

 

 

**STEP 3 UPDATE / MISE A JOUR :ENDUSER4GL.H

** ADD Function : endUser4gl.h

** long ExeHello(long)

.

class EndUser4glApp : public CWinApp

{

public:

EndUser4glApp(LPCTSTR lpszAppName);

//{{AFX_VIRTUAL(EndUser4glApp)

public:

..........

int EndUser4glInterpLib( HINSTANCE hInstance,HINSTANCE hPrevInstance,

LPSTR lpszCmdLine, int nCmdShow);

....

protected:

long OPCExecute_DemoEndUser4gl(long OPCcodeExe) ;

long OPCExecute_SynWinScreen(long);

.......long ExeHello(long);

//}}AFX_VIRTUAL

DECLARE_MESSAGE_MAP()

 

}; .

** /////////////////////////////ENDUSER4GL.H//////END STEP 3

 

 

 

**STEP 4  CREATE / CREER :

** your Programm/votre programme : toto.cpp ou exePdf.cpp

  .

long EndUser4glApp::long ExeHello(long OPCcodeExe)

{ char zone1[C_CMP_TAILLE_NOM_DICT] = "\0";

char valeur1 [MAXBUFLENSTRING] = "\0";

switch(OPCcodeExe)

{

case CodeExeHello:

 

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

OPCF_Pile_Depile( P_STRING, (void *)valeur1) ;

printf("%s",valeur1);

OPC_Depile_All();

 

break;

......

}

ADD your/votre programm in enduser4gl.dsw(Microsoft Visual C++)

** /////////////////////////////YOUR PROGRAMM//////END STEP 4

 

 

**STEP 5  UPDATE / MISE A JOUR :OPCCODEX.H

 #define CodeExeHello 60120

** /////////////////////////////OPCCODEX.H//////END STEP 5

 

**STEP 6 //////COMPILER//COMPILATION/ Visual C++

 

 

**STEP 7 //////ENDUSER4GL.EXE//////////////////////////

Move c:\enduser4gl\4gl\bin\opensource\enduser4gl\debug\EndUser4gl.exe

to

c:\enduser4gl\4gl\bin\EndUser4gl.exe

 

 

 

**STEP 8 ////////////////////////////////////

exécutez votre nouvelle instruction dans un fichier à extension *.4glExe

submit your new instruction in a file to extension * 4glExe

ex : Hello.4glExe

 

  

Full Examples/pleins d'exemples

c:\EndUser4gl\4gl\Bin\TokensRules

 

 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