La structure d'une syntaxe de programmation
La syntaxe concrète
Le premier niveau de description d’un langage de programmation est celui de sa syntaxe. Cette syntaxe se présente concrètement sous forme de chaines de caractéres formant le texte d’un programme. Pour spécifier quels sont les programmes syntaxiquement corrects, on utilise des grammaires qui définissent les régles de formation de programmes. La description de la syntaxe concrète d’un langage se décompose en fait en deux couches. On décrit d’abord la structure lexicale du langage puis sa structure syntaxique.
La structure lexicale décrit les lexèmes ou unités lexicales du langage c’est-`a-dire la fa¸con dont sont écrits les mots-clés, les identificateurs, les nombres, les opérateurs et autres symboles utilisés par le langage.
Chacun de ces lexèmes est écrit avec un ou plusieurs caractéres. Par exemple, les caractéres+et=servant à représenter en c l’opérateur d’addition et l’opérateur d’affectation définissent, lorsqu’ils sont utilisés seuls deux lexèmes que l’on pourra par exemple appeler PLUS et ASSIGN. Par contre, utilisés ensemble sous la forme+=, ils correspondent à un autre lexème que l’on pourra par exemple appeler PLUSASSIGN. De même un nombre entier, un nombre flottant ou un identificateur correspondront chacun `a un lexème (CST_INT, CST_FLOATou IDENT) bien qu’ils puissent ˆetre form´es d’un nombre arbitraire de caractéres.
L’analyse lexicale d’un langage consiste à regrouper de façon convenable en lexèmes la suite de caractéres représentant un programme. Par exemple, si nous utilisons la correspondance entre caractéres et lexèmes donnée dans la table suivante,
+ PLUS += PLUSASSIGN
* STAR
( LPAREN ) RPAREN
[ LBRACKET ] RBRACKET
La suite de caractéres
tab[index] += tan(*p+1)
produira la suite de lexèmes
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
être définie (partiellement) par la grammaire suivante, donnée ici dans la
syntaxe de yacc. Les identificateurs en majuscules sont des lexémes.
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
;
La syntaxe abstraite
La vérification du fait qu’un programme est syntaxiquement correct par
Le premier niveau de description d’un langage de programmation est celui de sa syntaxe. Cette syntaxe se présente concrètement sous forme de chaines de caractéres formant le texte d’un programme. Pour spécifier quels sont les programmes syntaxiquement corrects, on utilise des grammaires qui définissent les régles de formation de programmes. La description de la syntaxe concrète d’un langage se décompose en fait en deux couches. On décrit d’abord la structure lexicale du langage puis sa structure syntaxique.
La structure lexicale décrit les lexèmes ou unités lexicales du langage c’est-`a-dire la fa¸con dont sont écrits les mots-clés, les identificateurs, les nombres, les opérateurs et autres symboles utilisés par le langage.
Chacun de ces lexèmes est écrit avec un ou plusieurs caractéres. Par exemple, les caractéres+et=servant à représenter en c l’opérateur d’addition et l’opérateur d’affectation définissent, lorsqu’ils sont utilisés seuls deux lexèmes que l’on pourra par exemple appeler PLUS et ASSIGN. Par contre, utilisés ensemble sous la forme+=, ils correspondent à un autre lexème que l’on pourra par exemple appeler PLUSASSIGN. De même un nombre entier, un nombre flottant ou un identificateur correspondront chacun `a un lexème (CST_INT, CST_FLOATou IDENT) bien qu’ils puissent ˆetre form´es d’un nombre arbitraire de caractéres.
L’analyse lexicale d’un langage consiste à regrouper de façon convenable en lexèmes la suite de caractéres représentant un programme. Par exemple, si nous utilisons la correspondance entre caractéres et lexèmes donnée dans la table suivante,
+ PLUS += PLUSASSIGN
* STAR
( LPAREN ) RPAREN
[ LBRACKET ] RBRACKET
La suite de caractéres
tab[index] += tan(*p+1)
produira la suite de lexèmes
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
être définie (partiellement) par la grammaire suivante, donnée ici dans la
syntaxe de yacc. Les identificateurs en majuscules sont des lexémes.
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
;
La syntaxe abstraite
La vérification du fait qu’un programme est syntaxiquement correct par
rapport à la grammaire partielle donnée plus haut peut être réalisée par un
programme appelé analyseur syntaxique. Un tel analyseur, cependant, ne
se contente pas en général de vérifier la correction syntaxique du programme
analysé : il produit aussi à partir de ce programme une représentation intermédiaire qui va être utilisée pour des traitements à effectuer sur le programme (typage, compilation, etc.). C’est cette représentation qu’on appelle
syntaxe abstraite du programme.
La structure d'une syntaxe de programmation
Reviewed by NABIL
on
17:31
Rating:
Aucun commentaire: