Langages et grammaires alg´ebriques: r´esum´e
Licence info S5
Cours COMPIL – 2012 - 2013
Le but de ce cours est de pr´esenter les outils pour l’analyse syntaxique : les langages alg´ebriques,
d´ecrits par des grammaires alg´ebriques. `
A l’issue de l’UE, vous devriez ˆetre capable de concevoir une
grammaire alg´ebrique pour un dsl et d’utiliser divers g´en´erateurs automatiques.
1 But de l’analyse syntaxique
Comme vu en cours d’introduction, l’analyseur syntaxique r´ecup`ere en entr´ee le flot de symboles pro-
duit par l’analyseur lexical. L’analyseur syntaxique connaˆıt la structure des textes corrects, et reconnaˆıt
la structure du flot de symbole (ou le rejette si le mot d’entr´ee est incorrect). Cette structure apparaˆıt
sous la forme d’un arbre, appel´e arbre syntaxique. Exemple :
PROGRAM
IDENT(”pgm”)
FININSTR DECL
IDENT(”x”) SEP
IDENT(”y”) FININSTR
programme
listeInstructionslisteDeclarations
declaration
type listeIdent
DECLINT IDENT listeIdentSEP
IDENT
On commence par expliquer pourquoi les langages r´eguliers ne permettent pas de faire une analyse
syntaxique.
2 Limite des langages r´eguliers
L’exemple typique est celui des parenth`eses imbriqu´ees : il suffit de penser aux accolades ou parenth`eses
ouvrantes et fermantes de Java. On peut consid´erer le langage
{anbn|n0}
dans lequel ajoue le rˆole de parenth`ese ouvrante et bde parenth`ese fermante. Si on n’arrive d´ej`a pas `a
d´ecrire ce langage, on n’arrivera pas non plus `a d´ecrire Java.
Il se trouve que {anbn|n0}n’est pas un langage r´egulier. En effet, pour le reconnaˆıtre, il faut
m´emoriser un nombre non born´e de aet de b(pour v´erifier qu’il y a autant de bque de a). Or les AFND
qui reconnaissent les langages r´eguliers ont une ”m´emoire” finie (leur nombre fini d’´etat jouant le rˆole de
”m´emoire”).
3 Les langages et grammaires alg´ebriques
La premi`ere notion abord´ee est celle de grammaire alg´ebrique, que nous pratiquerons d`es le TP3.
3.1 Les grammaires alg´ebriques
Voici un exemple de grammaire alg´ebrique :
phrase sujet verbe complement
sujet JE |IL
verbe JOUE |TRAVAILLE
complement AVECLECHAT |SURLORDINATEUR
Cours COMPIL 2012 - 2013
Cours COMPIL Langages et grammaires alg´ebriques: r´esum´e
Cette grammaire est constitu´ee de 7 productions. ”phrase sujet verbe complement” est une pro-
duction qui indique qu’une phrase est un sujet suivi d’un verbe suivi d’un compl´ement. ”verbe JOUE
|TRAVAILLE” est en fait 2 productions de mˆeme membre gauche, qui indiquent qu’un verbe est soit
JOUE, soit TRAVAILLE (le symbole |joue donc le rˆole de choix, comme dans les expressions r´eguli`eres).
L’axiome (le point de d´epart) de cette grammaire est phrase. Le vocabulaire terminal (l’ensemble
des terminaux) est constitu´e des symboles {JE, IL, JOUE, TRAVAILLE, AVECLECHAT, SURLORDI-
NATEUR}, c’est `a dire que les mots engendr´es par cette grammaire seront des suites de ces symboles.
Le vocabulaire non-terminal (l’ensemble des non-terminaux) est constitu´e des symboles {phrase, sujet,
verbe, complement}.
3.2 Langage engendr´e, d´erivations
Pour engendrer un mot `a partir d’une grammaire alg´ebrique, on part de l’axiome, et on proc`ede par
r´ecritures successives jusqu’`a avoir compl`etement ´elimin´e les non-terminaux (comme leur nom l’indique,
on a termin´e quand on se retrouve avec uniquement des terminaux). On dit qu’on effectue des d´erivations.
Exemple :
phrase sujet verbe complement sujet TRAVAILLE complement IL TRAVAILLE complement
IL TRAVAILLE AVECLECHAT
est une suite de d´erivations directes qui part de l’axiome, et permet d’engendrer le mot IL TRAVAILLE
AVECLE CHAT.
Effectuer une d´erivation directe consiste `a choisir un non-terminal et une r`egle dans laquelle ce non-
terminal apparaˆıt en partie gauche. Ensuite on remplace le non-terminal par la partie droite de la r`egle.
Comme on choisit le non-terminal et la production, plusieurs choix sont possibles. On peut ainsi d´eriver
le mˆeme mot avec la suite de d´erivations :
phrase sujet verbe complement IL verbe complement IL TRAVAILLE complement IL
TRAVAILLE AVECLECHAT
On peut aussi d´eriver les mots JE TRAVAILLE AVECLECHAT, JE TRAVAILLE SURLORDINATEUR
et IL TRAVAILLE SURLORDINATEUR.
Sans surprise, le langage engendr´e par une grammaire est l’ensemble des mots compos´es des terminaux
qu’on peut d´eriver `a partir de l’axiome.
3.3 Langages alg´ebriques, comparaison avec les r´eguliers
Les langages engendr´es par les grammaires alg´ebriques sont appel´es langages alg´ebriques.
Les langages r´eguliers sont inclus dans les langages alg´ebriques. Donc tout langage r´egulier est aussi
alg´ebrique, mais l’inverse n’est pas vrai (cf {anbn|n0}qui est alg´ebrique mais pas r´egulier). En
cons´equence, tout langage qu’on peut d´ecrire par une expression r´eguli`ere peut aussi ˆetre d´ecrit par une
grammaire alg´ebrique.
3.4 Outils pour l’analyse syntaxique
On parle souvent de ”parseur” au lieu d’analyseur syntaxique. Reconnaˆıtre un texte se dit alors
”parser”.
Un g´en´erateur d’analyseur syntaxique est un logiciel qui prend en entr´ee une grammaire alg´ebrique et
qui produit en sortie un module d’analyse syntaxique (un autre logiciel) correspondant `a cette grammaire.
Nous verrons deux g´en´erateurs en TP : Cup et antLR, qui utilisent des techniques de parsing diff´erentes.
4 Arbres syntaxiques
La figure 1 montre un arbre syntaxique pour le mot : IL TRAVAILLE AVECLECHAT.
On constate que les 2 d´erivations donn´ees plus haut pour ce mot permettent de construire cet arbre.
Dans le cas de cette grammaire, ce mot admet un seul arbre syntaxique, qui fixe son interpr´etation.
2012 - 2013 2 Licence info S5
Cours COMPIL Langages et grammaires alg´ebriques: r´esum´e
AVECLECHAT
phrase
sujet verbe complement
IL TRAVAILLE
Figure 1 – Un arbre syntaxique
Voici une autre grammaire qui engendre des expressions arithm´etiques construites sur les terminaux
{id,+,*,(,)}:
EE+E|E*E|(E)|id
Le mot id * id + id admet deux arbres syntaxiques (donc 2 interpr´etations), correspondant `a 2 d´erivations
diff´erentes, cf figure 2.
(1) EE*EE*E+Eid * id + id
(2) EE+EE*E+Eid * id + id
(1)
id id +id
E E
EE
E
*
(2)
E
E E
id id +id
E
E
*
Figure 2 – Un mot admettant 2 arbres syntaxiques
5 Grammaires ”pathologiques”
Quand on donne une grammaire alg´ebrique `a un g´en´erateur de parseur, plusieurs cas sont possibles :
g´en´eration de code sans warning (cas favorable) ;
rejet de la grammaire car elle ne convient pas `a l’algorithme de parsing de l’outil (cas qu’on verra
plus tard, pas facile) ;
g´en´eration de code avec warning : il faut bien comprendre le message car ce n’est pas bon signe ;
rejet de la grammaire pour une autre raison : il faut comprendre pourquoi la grammaire est patho-
logique.
On s’ineresse ici aux 2 derniers cas : grammaires pathologiques car contenant des productions qui ne
servent pas (cas du warning) et grammaire ambigu¨es qui admettent plusieurs interpr´etations pour un
mot et sont cause de non d´eterminisme (cas du rejet).
5.1 Ambigu¨ıt´e
Le mot de la figure 2 est ambig¨u car il admet plusieurs arbres syntaxiques, donc plusieurs in-
terpr´etations. Pour faire simple, le g´en´erateur de parseur ne sait pas quel code g´en´erer pour pr´evoir
la reconnaissance d’un tel mot. Une grammaire dite ambigu¨e, qui engendre au moins un mot ambig¨u,
sera donc rejet´ee par le g´en´erateur.
Quand une grammaire est ambigu¨e, il n’y a plus qu’`a la retravailler pour obtenir une grammaire
´equivalente (= qui engendre le mˆeme langage) et qui n’est pas ambigu¨e. Parfois on a juste une grammaire
mal fichue, il suffit de r´efl´echir un peu (mais ce n’est pas si simple quand on n’a pas d’exp´erience).
2012 - 2013 3 Licence info S5
Cours COMPIL Langages et grammaires alg´ebriques: r´esum´e
5.1.1 Le cas des grammaires `a op´erateurs
C’est un cas bien connu qu’on sait ”d´esambiguer”. Cette grammaire `a op´erateurs pr´esente des produc-
tions r´ecursives et sym´etriques (par rapport aux op´erateurs) qui conduisent fatalement `a une ambigu¨ıt´e.
EE+E|E*E|(E)|id
Le probl`eme est double :
l’associativit´e des op´erateurs binaires n’est pas sp´ecifi´ee. Le mot id + id + id admet 2 arbres
syntaxiques correspondant `a un associativit´e gauche ou droite de l’op´erateur +;
la priorit´e des op´erateurs n’est pas sp´ecifi´ee, les 2 interpr´etations du mot id * id + id donn´ees
figure 2 correspondent `a un op´erateur +prioritaire sur *, ou `a l’inverse.
Il suffit d’inegrer ces informations de priorit´e et d’associativit´e dans une nouvelle grammaire plus struc-
tur´ee, en suivant la recette suivante :
on ajoute un non terminal par niveau de priorit´e (Spour somme - +,Ppour produit - *,Fpour
facteur, etc) ;
les moins prioritaires en haut de l’arbre, proches de l’axiome ;
les plus prioritaires en bas de l’arbre, proches des feuilles ;
les atomes tout en bas ;
associativit´e gauche/droite r´ecursivit´e gauche/droite.
On obtient pour notre exemple (d’axiome S) :
SS+P|P
PP*F|F
F(S)|id
La grammaire obtenue est nettement moins lisible. Des outils comme Cup automatisent la transformation
de la grammaire : on donne `a l’outil une grammaire ambigu¨e et des indications d’associativit´e et de
priorit´e, et il g´en`ere par derri`ere la version non ambigu¨e. L’outil antLR ne le fait pas, il faut lui donner
directement une grammaire non ambigu¨e.
5.2 Les grammaires dont des productions ne servent `a rien
Ces grammaires contiennent :
des non-terminaux improductifs qui, mˆeme s’ils sont membre gauches de production, ne permettent
pas d’engendrer un mot ;
– des non-terminaux inaccessibles qu’on ne voit jamais apparaˆıtre dans une d´erivation issue de
l’axiome.
Il s’ensuit que toute une partie de la grammaire ne sert `a rien alors que ce n’´etait pas l’intention de celui
qui l’a ´ecrite ! Le message d’erreur des outils n’´etant pas toujours des plus clairs, il faut savoir d´etecter
les improductifs et les inaccessibles, et savoir r´eparer sa grammaire en cons´equence.
6 Les alg´ebriques. . . et les autres
On a vu que les alg´ebriques contiennent les r´eguliers. Mais tous les langages ne sont pas alg´ebriques.
L’exemple type est le langage {anbncn|n0}, qu’on ne peut pas d´ecrire par une grammaire alg´ebrique.
Noam Chomsky a introduit dans sa c´el`ebre classification d’autres grammaires plus g´en´erales que les
alg´ebriques :
r´eguli`ere alg´ebrique contextuelle quelconque
2012 - 2013 4 Licence info S5
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !