| 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
.
Enduser4gl : Liste
des programmes de l'interpréteur
EndUser4gl
: Tokens
EndUser4gl : Mots clés
EndUser4gl : Lexicaux
EndUser4gl : Règles syntaxiques
EndUser4gl : bloc
Relation et caractères spéciaux
EndUser4gl : Codes éxécution
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
|