Analyse syntaxique

Analyse LR

Le problème central en analyse syntaxique est de construire des systèmes recognitifs équivalents au système génératif, la grammaire algébrique dans notre cas. Le cours précédent donnait la formulation d'analyseurs descendants malheureusement fortement non-déterministes, et peu utilisables en cas de récursivité gauche de la grammaire.

Une autre manière de procéder est d'utiliser des analyseurs ascendants, tout aussi non déterministes dans le cas général, mais qui ne souffrent pas des faiblesses liées aux grammaires récursives gauches.

Un analyseur ascendant procède en inversant les relations de dérivations droites : il commence par réduire le syntagme le plus à gauche possible dans l'entrée, aussi appelé poignée.

Le résultat majeur donnant naissance à l'analyse LR est que le contexte jusqu'à la poignée d'une forme sententielle, plus potentiellement k symboles à sa droite, est un langage rationnel, propre à être reconnu par un automate à états finis. Ces états servent de classe d'équivalence dite LR(k) sur les préfixes viables de la grammaire comme de l'automate à pile.

On obtient au final avec LR la classe de grammaires analysables de gauche à droite par un automate à pile la plus large possible.

Fichiers du cours

Bibliographie

[AU72]
Alfred V. Aho and Jeffrey D. Ullman. The Theory of Parsing, Translation, and Compiling, volume I: Parsing of Series in Automatic Computation. Prentice Hall, Englewood Cliffs, New Jersey, 1972.
[Flo63]
Robert W. Floyd. Syntactic analysis and operator precedence. Journal of the ACM, 10(3):316–333, 1963.
[Flo64]
Robert W. Floyd. Bounded context syntactic analysis. Communications of the ACM, 7(2):62-67, 1964.
[IM70]
J. D. Ichbiah and S. P. Morse. A technique for generating almost optimal Floyd-Evans productions for precedence grammars. Communications of the ACM, 13(8):501–508, 1970.
[Knu65]
Donald E. Knuth. On the translation of languages from left to right. Information and Control, 8:607-639, 1965.
[WW66]
Niklaus Wirth and Helmut Weber. EULER: a generalization of ALGOL and it formal definition. Communications of the ACM, 9(1):Part I: 13–25, and Part II: 89–99, 1966.