• Aucun résultat trouvé

Chapitre 2 : Les techniques d’interpr´ etation

3.3 Etude de l’interpr´ ´ eteur Lua :

3.3.2 La structure lexicale du langage Lua

Comme nous avons mentionner dans le chapitre 2 section d’analyse lexical que le processus d’analyse lexical ne peut pas ˆetre effectu´e sans la d´efinition du structure lexicale du langage Lua. Pour y faire nous allons extraire les lex`emes du langage Lua ainsi que les descriptions r´eguli`eres qui d´efinient la structure lexical du langage Lua.

La d´efinition du lex`eme a ´et´e aborder dans les section pr´ec`edentes, cette section consiste a identifi´e les classes lexicaux (Tokens) et les lex`emes (unit´e lexicale) du langage Lua. Pour identifier ces derni`eres, une analyse des fichier llex.c (analyseur lexical) et lparser.c (analyseur syntaxique du Lua) a ´et´ee effectuer.

Les classes lexicaux “Tokens” du Lua sons repr´esent´ees par la structure (fichier llex.h, line :49) :

La classe lexicale INT : La classe lexicale INT, correspand aux valeurs entieres, est repr´esent´e par l’expression r´eguli`ere suivante :

IN T : (000..090)+; (3.3.1)

L’expression r´eguli`ere 3.3.1 signifie qu’ne lex`emes qui appartient aux classe lexicale IN T doit ´etre compos´e d’une ou plusieurs apparitions de l’un des chiffres compris entre 0 et 9.

La classe lexicale FLOAT : La classe lexicale FLOAT, correspand aux valeurs r´eeles, est repr´esent´ee par l’expression r´eguli`ere suivante :

F LOAT : IN T 0.0 IN T ; (3.3.2)

L’expression r´eguli`ere 3.3.2 signifie qu’une lex`eme qui appartient au classe lexicale F LOAT doit ´etre compos´ee d’une apparition d’une lex`eme qui appartient au classe lexical IN T suivie d’une apparition d’un point0.0 suivie d’une apparition d’une autre lex`eme qui appartient au classe lexical IN T .

Algorithme 3 structure du lex`emes du Lua (fichier : llex.h, ligne :43). typedef structToken

{inttoken ; SemInfo seminfo ; } Token ;

/*le champ SemiInfo represante l’information s´emantique et structure par l’union suivante*/ typedef union

{ lua Number r ; TString *ts ; } SemInfo ;

/*fichier lobject.c ligne :199*/ typedef unionTString

{ L Umaxalign dummy ; /* ensures maximum alignment for strings */ struct

{CommonHeader ; lu byte reserved ;

unsigned inthash ;

size tlen ; } tsv ; } TString ;

La classe lexicale EXP : La classe lexicale EXP, correspand aux valeurs r´eeles ou enti`eres repr´esent´ees sous la forme d’un exposant (par exemple : 10.45 E − 4 ou 10 e2), est repr´esent´ee par l’expression r´eguli`ere suivante :

EXP : (IN T | F LOAT ) (0E0|0e0) (0−0)? IN T ; (3.3.3)

L’expression r´eguli`ere signifie qu’une lex`eme qui appartient au classe lexicale EXP doit ´etre compos´ee d’une apparition d’une lex`eme qui appartient aux classes lexicaux IN T ou F LOAT ( (IN T | F LOAT ) ), suivie d’une apparition d’une lex`eme qui appartient `a {E,e}, suivie d’une apparition ou non du caract`ere - ( (’-’) ? ), suivie d’une apparition d’une lex`eme qui appartient au classe lexicale IN T .

La classe lexicale HEX : La classe lexicale HEX, correspand aux valeurs hexad´ecimales, est repr´esent´ee par l’expression r´eguli`ere suivante :

HEX : 00x0 (000..090|0a0..0f0)+; (3.3.4)

L’expression r´eguli`ere 3.3.4 signifie qu’une lex`eme qui appartient au classe lexicale HEX doit ´etre compos´ee d’une apparition de la chaine de caract`ares00x0, suivie d’un ou plusieurs apparitions de l’un des caract`ares qui appartient `a la plage comprises entre 0 et 9 ou a la plage comprises entre a et f ( (000..090|0a0..0f0)+ ).

La classe lexicale NAME : La classe lexicale NAME correspand `a l’identificateur qui peut ˆetre n’importe quelle caract`ere, chiffre, ou “underscores “ est repr´esent´ee par l’expression r´eguli`ere suivante :

name : (0a0..0z0|0A0..0Z0|0 0|000..090)∗; (3.3.5)

L’expression r´eguli`ere 3.3.5 signifie qu’une lex`eme qui appartient au classe lexicale N AM E doit ´etre compos´ee de z´ero, une ou plusieur apparitions d’un caract´ere alphab´etique minuscule ou majuscule ou une “underscores” ou un chiffre. Les mots cl´es suivant sont reserv´es et ne peuvent pas ˆetre identifi´es ou consid´er´es commes des lex`emes du classe lesicale N AM E :

and break do else elseif end false for

Algorithme 4 d´efintion du tableau qui contient la d´efinition des classes lexicaux du LUA(fichier llex.c, ligne :37).

const char*const luaX tokens [] = { ”and”, ”break”, ”do”, ”else”, ”elseif”, ”end”, ”false”, ”for”, ”function”, ”if”, ”in”, ”local”, ”nil”, ”not”, ”or”, ”repeat”, ”return”, ”then”, ”true”, ”until”, ”while” , ”..”, ”...”, ”==”, ”>=”, ”<=”, ”˜=”, ”

<number>”, ”<name>”, ”<string>”, ”<eof>”, NULL } ;

return then true until while

Les caract`eres suivant appartient aussi au lex`emes du lua :

+ - * / % ˆ # == ˜= <= >= <

> = ( ) { } [ ] ; : , . . . . ..

Certain de ces caract`eres et les mots cl´e du langage sont repr´esent´es par des symboles dans le code du LUA (llex.h, llex.c) seront utiliser par la suite dans le code du LUA. Pour ˆetre plus claire, le programmeur qui a ´ecrit le langage LUA, utilise les symboles repr´esenter dans l’algorithme 5 au lieu d’utiliser directement les symboles repr´esenter dans l’algorithme 4.

Les symboles enumer´es dans l’algorithme 5 correspand en ordre respective aux lex`emes (ou classes lexicaux) definient dans l’algoritme 4.

`

A partir des expressions r´eguli`eres qui repr´esentent une partie des classes lexicaux (Tokens) du Lua :

number : IN T |F LOAT |EXP |HEX; string : je;cherche encore a l’identifier...

name : (0a0..0z0|0A0..0Z0|0underscors0|000..090)∗ EXP : (IN T |F LOAT )(0E0|0e0)(00)IN T ; F LOAT : IN T0.0IN T ;

IN T : (000..090)+;

HEX :0 0x0(000..090|0a0..0f0)+;

Algorithme 5 Symboles utiliser par le programmeur du LUA pour d´efinir une partie des Tokens (fichier : llex.h, ligne : 24).

enum RESERVED {

/* terminal symbols denoted by reserved words */ TK AND = FIRST RESERVED, TK BREAK, TK DO, TK ELSE, TK ELSEIF, TK END, TK FALSE, TK FOR, TK FUNCTION,

TK IF, TK IN, TK LOCAL, TK NIL, TK NOT , TK OR, TK REPEAT, TK RETURN, TK THEN, TK TRUE, TK UNTIL, TK WHILE,

/* other terminal symbols */

TK CONCAT, TK DOTS, TK EQ, TK GE , TK LE, TK NE, TK NUMBER,

TK NAME, TK STRING, TK EOS } ;

TK AND, TK BREAK, TK DO, TK ELSE, TK ELSEIF, TK END, TK FALSE, TK FOR, TK FUNCTION, TK IF, TK IN, TK LOCAL, TK NIL, TK NOT, TK OR, TK REPEAT, TK RETURN, TK THEN, TK TRUE, TK UNTIL, TK WHILE,TK CONCAT, TK DOTS, TK EQ, TK GE, TK LE, TK NE, TK NUMBER, TK NAME, TK STRING, TK EOS,+, -, *, /, %, ˆ, #, <, >, =, (, ), {, }, [, ], ; , :,.,

Fig. 3.3.1 – Lex`emes du LUA.

lex`emes utilis´ees pour effectuer l’analyse lexicale :

Apr`es la pr´esentation de la structure lexicale du langage Lua nous allons pr´esenter dans la section suivante la structure syntaxique de cette derni`ere.

Documents relatifs