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)(0−0)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.