Une phrase de permutation est une extension des définitions de grammaire sans contexte standard (E) BNF: une phrase de permutation contient n productions (ou de manière équivalente, non terminales) A 1 à A n . À la position de la phrase de permutation, nous aimerions voir chacune de ces productions exactement une fois, mais nous ne sommes pas intéressés par l'ordre de ces non-terminaux.
Par exemple:
S <- X { A, B, C } Y
est équivalent à:
S <- X A B C Y
S <- X A C B Y
S <- X B A C Y
S <- X B C A Y
S <- X C A B Y
S <- X C B A Y
Le concept semble être introduit dans "Étendre les grammaires sans contexte avec des phrases de permutation" . Il y est également décrit comment analyser ces phrases en temps linéaire en utilisant un analyseur LL (1).
L'article "Analyse des phrases de permutation" décrit une méthode d'analyse des expressions de permutation à l'aide de combinateurs d'analyseurs. Ce sont les deux seuls articles que j'ai trouvés qui parlent de phrases de permutation et comment les analyser.
Voyant que nous pouvons facilement analyser ces types de phrases de permutation avec des analyseurs basés sur LL (1), je suppose que nous pouvons faire de même avec les analyseurs de style LR (1). Ma question est donc:
Une grammaire contenant des phrases de permutation peut-elle être analysée en temps linéaire dans la taille de la chaîne d'entrée à l'aide de la machinerie LR (1) tout en conservant une table de taille raisonnable?
Bien que ce soit mieux, ce n'est bien sûr pas assez bon - avoir une phrase de permutation de 30 éléments rendrait la grammaire inutilisable. Il y a encore une partie de l'analyse LR que nous n'avons pas encore abordée, et c'est la procédure basée sur la pile réelle utilisée pour l'analyse. J'imagine que le stockage de compteurs sur la pile peut résoudre le problème, mais je ne sais pas comment faire.
J'implémente actuellement un générateur d'analyseur et, dans le problème, les phrases de permutation seraient un cadeau du ciel. Comme j'utilise des machines LR (1), la question ci-dessus a suivi.