Le premier niveau de description d’un langage de programmation est celui de
sa syntaxe. Cette syntaxe se pr´esente concrˆetement sous forme de chaˆınes
de caract`eres formant le texte d’un programme. Pour sp´ecifier quels sont
les programmes syntaxiquement corrects, on utilise des grammaires qui
d´efinissent les r`egles de formation de programmes.
La description de la syntaxe concrˆete d’un langage se d´ecompose en fait en
deux couches. On d´ecrit d’abord la structure lexicale du langage puis sa
structure syntaxique.
La structure lexicale d´ecrit les lex`emes ou unit´es lexicales du langage
c’est-`a-dire la fa¸con dont sont ´ecrits les mots-cl´es, les identificateurs, les
nombres, les op´erateurs et autres symboles utilis´es par le langage. Chacun
de ces lex`emes est ´ecrit avec un ou plusieurs caract`eres. Par exemple, les caract`
eres + et = servant `a repr´esenter en c l’op´erateur d’addition et l’op´erateur
d’affectation d´efinissent, lorsqu’ils sont utilis´es seuls deux lex`emes que l’on
pourra par exemple appeler PLUS et ASSIGN. Par contre, utilis´es ensemble
sous la forme +=, ils correspondent `a un autre lex`eme que l’on pourra par
exemple appeler PLUSASSIGN. De mˆeme un nombre entier, un nombre flottant
ou un identificateur correspondront chacun `a un lex`eme (CST_INT,
CST_FLOAT ou IDENT) bien qu’ils puissent ˆetre form´es d’un nombre arbitraire
de caract`eres.
L’analyse lexicale d’un langage consiste `a regrouper de fa¸con convenable en
lex`emes la suite de caract`eres repr´esentant un programme.
Par exemple, si nous utilisons la correspondance entre caract`eres et lex`emes
donn´ee dans la table suivante,+ PLUS += PLUSASSIGN
* STAR
( LPAREN ) RPAREN
[ LBRACKET ] RBRACKET
La suite de caract`eres
tab[index] += tan(*p+1)
produira la suite de lex`emes
IDENT("tab") LBRACKET IDENT("index") RBRACKET PLUSASSIGN
IDENT("tan") LPAREN STAR IDENT("p") PLUS CST_INT(1) RPAREN
Un fois cette analyse lexicale effectu´ee, l’analyse syntaxique extrait de la
suite de lex`emes produite la structure syntaxique du programme qui est
d´efinie par une grammaire.
Par exemple, la structure syntaxique des expressions du langage c pourra
ˆetre d´efinie (partiellement) par la grammaire suivante, donn´ee ici dans la
syntaxe de yacc. Les identificateurs en majuscules sont des lex`emes.
expression:
constant
| IDENT
| STAR expression
| LPAREN expression RPAREN
| IDENT LPAREN RPAREN
| IDENT LPAREN arguments RPAREN
| expression LBRACKET expression RBRACKET
| expression PLUS expression
| expression ASSIGN expression
| expression PLUSASSIGN expression
| ........
;
constant:
CST_INT
| CST_FLOAT
;
source : Université Denis Diderot
sa syntaxe. Cette syntaxe se pr´esente concrˆetement sous forme de chaˆınes
de caract`eres formant le texte d’un programme. Pour sp´ecifier quels sont
les programmes syntaxiquement corrects, on utilise des grammaires qui
d´efinissent les r`egles de formation de programmes.
La description de la syntaxe concrˆete d’un langage se d´ecompose en fait en
deux couches. On d´ecrit d’abord la structure lexicale du langage puis sa
structure syntaxique.
La structure lexicale d´ecrit les lex`emes ou unit´es lexicales du langage
c’est-`a-dire la fa¸con dont sont ´ecrits les mots-cl´es, les identificateurs, les
nombres, les op´erateurs et autres symboles utilis´es par le langage. Chacun
de ces lex`emes est ´ecrit avec un ou plusieurs caract`eres. Par exemple, les caract`
eres + et = servant `a repr´esenter en c l’op´erateur d’addition et l’op´erateur
d’affectation d´efinissent, lorsqu’ils sont utilis´es seuls deux lex`emes que l’on
pourra par exemple appeler PLUS et ASSIGN. Par contre, utilis´es ensemble
sous la forme +=, ils correspondent `a un autre lex`eme que l’on pourra par
exemple appeler PLUSASSIGN. De mˆeme un nombre entier, un nombre flottant
ou un identificateur correspondront chacun `a un lex`eme (CST_INT,
CST_FLOAT ou IDENT) bien qu’ils puissent ˆetre form´es d’un nombre arbitraire
de caract`eres.
L’analyse lexicale d’un langage consiste `a regrouper de fa¸con convenable en
lex`emes la suite de caract`eres repr´esentant un programme.
Par exemple, si nous utilisons la correspondance entre caract`eres et lex`emes
donn´ee dans la table suivante,+ PLUS += PLUSASSIGN
* STAR
( LPAREN ) RPAREN
[ LBRACKET ] RBRACKET
La suite de caract`eres
tab[index] += tan(*p+1)
produira la suite de lex`emes
IDENT("tab") LBRACKET IDENT("index") RBRACKET PLUSASSIGN
IDENT("tan") LPAREN STAR IDENT("p") PLUS CST_INT(1) RPAREN
Un fois cette analyse lexicale effectu´ee, l’analyse syntaxique extrait de la
suite de lex`emes produite la structure syntaxique du programme qui est
d´efinie par une grammaire.
Par exemple, la structure syntaxique des expressions du langage c pourra
ˆetre d´efinie (partiellement) par la grammaire suivante, donn´ee ici dans la
syntaxe de yacc. Les identificateurs en majuscules sont des lex`emes.
expression:
constant
| IDENT
| STAR expression
| LPAREN expression RPAREN
| IDENT LPAREN RPAREN
| IDENT LPAREN arguments RPAREN
| expression LBRACKET expression RBRACKET
| expression PLUS expression
| expression ASSIGN expression
| expression PLUSASSIGN expression
| ........
;
constant:
CST_INT
| CST_FLOAT
;
source : Université Denis Diderot
ليست هناك تعليقات:
إرسال تعليق