Una frase de permutación es una extensión de las definiciones de gramática libre de contexto estándar (E) BNF: una frase de permutación contiene n producciones (o, de manera equivalente, no terminales) A 1 a A n . En la posición de la frase de permutación, nos gustaría ver cada una de estas producciones exactamente una vez, pero no estamos interesados en ordenar estos no terminales.
Por ejemplo:
S <- X { A, B, C } Y
es equivalente a:
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
El concepto parece ser introducido en "Extender gramáticas libres de contexto con frases de permutación" . Allí también se describe cómo analizar estas frases en tiempo lineal usando un analizador LL (1).
El artículo "Analizando frases de permutación" describe un método para analizar frases de permutación utilizando combinadores de analizador sintáctico. Estos son los únicos dos documentos que he encontrado que hablan sobre frases de permutación y cómo analizarlas.
Al ver que podemos analizar fácilmente este tipo de frases de permutación con analizadores basados en LL (1), supongo que podemos hacer lo mismo con los analizadores de estilo LR (1). Mi pregunta es por lo tanto:
¿Se puede analizar una gramática que contenga frases de permutación en un tiempo lineal en el tamaño de la cadena de entrada utilizando maquinaria LR (1) mientras se mantiene una tabla de tamaño razonable?
Aunque esto es mejor, por supuesto, no es lo suficientemente bueno: tener una frase de permutación de 30 elementos hará que la gramática sea inutilizable. Todavía hay una parte del análisis LR que aún no hemos tocado, y ese es el procedimiento real basado en la pila utilizado para el análisis. Me imagino que almacenar contadores en la pila puede resolver el problema, pero no estoy seguro de cómo hacerlo.
Actualmente estoy implementando un generador de analizador, y en el dominio del problema, las frases de permutación serían un regalo del cielo. Como estoy usando maquinaria LR (1), siguió la pregunta anterior.