Je ne trouve pas de description complète à propos de LL (*) parser, comme ANTLR, sur Internet. Je me demande quelle est la différence entre un analyseur LL (k) et un LL (*) et pourquoi ils ne peuvent pas supporter les grammaires de gauche-recusrive malgré leur flexibilité.Comment fonctionnent les parseurs LL (*)?
Répondre
Voici un article (par Terence Parr, l'auteur de antlr) au sujet LL(*)
analyse de la grammaire: article avec un bel exemple de ce qui est LL(*)
mais pas LL(k)
, pour tout k
.
Une autre bonne référence (et beaucoup plus complet) est le "Definitive ANTLR Reference", encore une fois par Terence Parr et le journal article original décrivant la façon dont fonctionne antlr[pdf].
Lorsque vous voyez cela, la quantité de jetons est généralement affichée afin d'analyser la langue.
C'est la même chose pour l'analyseur LR. Donc, k est le nombre maximal de jetons que le pars ira chercher avant de prendre une décision. Sachez que plus k est élevé, plus l'analyseur sera dur, sauf si vous utilisez un générateur (ANTLR, yacc, bison, ...).
LL parser utilise une approche descendante qui signifie qu'il cherchera l'arbre le plus profond. En raison de cette récursivité gauche va faire un arbre infiniment profond et va casser l'analyseur.
AFAIK La plupart des langages utilisent l'analyseur LR.