Vidéo 4
Notes inspirées du cours de JANIN David
Exemple des expressions arithmétiques
Une grammaire reconnaissant les expressions arithmétiques se reconnaît avec les expressions suivantes
- exp -> ID
- exp -> Cste
- exp -> exp + exp
- exp -> exp * exp
- exp -> (exp)
Ces 5 règles sont appelées les règle de grammaire ou règle de production. Dans ces règles on distingue :
- les terminaux ce sont les unités lexicales (aussi appelées tokens) qui sont données en entrée de l'analyseur. C'est un dire, c'est une suite / un mot de terminaux, donc dans
- les non-terminaux , ce sont les ensembles de mots de terminaux qu'on souhaite construire ou définir
- les règles de production sont : qui peuvent être lue comme des inclusion ensemblistes (partie de )
Théorème : Ce type d'inéquation admet une plus petite solution.
Idée de preuve : Soit
avec le nombre de terminaux. Le constat est que si est croissant c'est à dire si et et si alors . Il est alors facile de vérifier que
et que on a , on dit que exp est un point fixe de et exp est le plus petit de ces point fixes. Si est un point fixe de , on a
mais comme on a, par récurrence, et donc
Exemple d'utilisation de cette grammaire
Analyse syntaxique de , l'analyseur va reconnaître 2 comme une constance, comme , comme un ID, comme + et comme un ID. Comment pouvons nous vérifier que cette expression appartient bien au langage. Vérifions que csteID+ID est bien une entrée syntaxique correcte selon la grammaire.
Suite de dérivations (gauche) de
Remarques
- Dés qu'un terminal est généré ou engendré par une règle, on ne peut plus l'effacer
- il coupe implicitement l'entrée en ce qui se trouve à gauche et ce qui se trouve à droite.
En pendant compilation, on peut avoir l'impression que cette suite de dérivation induit syntaxiquement une "priorité" sur les opérateurs binaires + et *
Est ce satisfaisant ? Presque ... Expliciter la syntaxe, c'est bien. Mais, cette grammaire est ambigüe. Il y a au moins deux syntaxes possibles pour CST * ID + ID.
Cela est toujours une suite de dérivation gauche, mais la structure syntaxique induite est plutôt