¿Son todas las LL (1) gramática también LR (1)?¿Es cada LL (1) gramática también una LR (1)?
Respuesta
Sí, dado que tanto LL como LR analizan los datos de izquierda a derecha; y dado que LL (1) anticipa solo una ficha, necesariamente debe ser una LR (1). Esto también es cierto para LR (k), donde k> 1, ya que una gramática LR (k) se puede transformar en una gramática LR (1).
La diferencia entre las gramáticas LR y LL se debe a que LR produce la derivación más a la derecha, mientras que LL produce la derivación más a la izquierda. Entonces, esto significa que un analizador LR puede, de hecho, analizar un conjunto mayor que una gramática LL a medida que se acumula desde las hojas.
digamos que tenemos producciones de la siguiente manera:
A -> "(" A ")" | "(" ")"
Entonces LL (1) va a analizar la cadena (())
:
(()) -> A
-> "(" A ")"
-> "(" "(" ")" ")"
Donde como la LR (1) analizará la siguiente manera:
Input Stack Action
(()) 0
()) 0 '('
)) 0 '(' '('
) 0 '(' '(' ')' Reduce using A -> "(" ")"
) 0 '(' A
- 0 '(' A ')' Reduce using A -> "(" A ")"
- 0 A Accept
Para más información ver: http://en.wikipedia.org/wiki/LL_parsing
pero la secuencia (de producciones) utilizada por LL (1) para analizar no siempre está en la secuencia opuesta (de producciones) utilizada por LR (1) analizar. Aunque el anterior es el de arriba hacia abajo y el último es el analizador de abajo hacia arriba, por lo que tu razón para que LL (1) sea LR (1) no parece suficiente. – siddharth
Algo que es LR no significa que el árbol de análisis sintáctico sea idéntico al árbol de análisis de LL inverso, y por lo tanto el analizador sintáctico no usará necesariamente las producciones en el orden opuesto. Lo que sí significa es que un analizador LR puede analizar correctamente el mismo conjunto de cadenas con la misma gramática. – Mike
¿Este hecho contradice? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav
- 1. ¿Cómo identificar si una gramática es LL (1), LR (0) o SLR (1)?
- 2. ¿Esta gramática no es LR (1)?
- 3. ¿Por qué esta gramática LR (1) no es LALR (1)?
- 4. ¿Cómo es esta gramática LR (1) pero no SLR (1)?
- 5. Lenguaje LL (2) que no es LL (1)
- 6. la conversión de una gramática en LL (1) gramática: algunos problemas
- 7. LL (1) no puede ser ambiguo
- 8. ¿Cómo determinar si un idioma es LL (1)?
- 9. Ejemplo de una gramática LR que no puede ser representada por LL?
- 10. ¿Busca un idioma que no sea LL (1)?
- 11. ¿Por qué -1 >> 1 es -1? ¡Y 1 >> 1 es 0!
- 12. Cómo construir una tabla de análisis para LL (k> 1)?
- 13. 1 + 1/2 + 1/3 + --- + 1/n =?
- 14. Haskell: Equation Expander 1+ (1+ (1+ (1+ (...)))) = ∞
- 15. En Javascript, ¿por qué [1, 2] == [1, 2] o ({a: 1}) == ({a: 1}) es falso?
- 16. ¿Cuál es la diferencia entre el análisis de LL y LR?
- 17. (-1 >> 1) == -1 - ¿Por qué?
- 18. ¿Es x + = 1 más eficiente que x = x + 1?
- 19. ¿Por qué 0 && 1 es 1 mientras que 1 && 0 es 0 en ruby?
- 20. ¿Ayuda a entender los analizadores LR (1), generación de tablas? ¿Algún otro recurso?
- 21. ¿Cuál es la diferencia entre 1 y '1 en Lisp?
- 22. ¿Es string.ElementAt() O (1)?
- 23. MotionEvent.getPointerCount() siempre es 1
- 24. ¿Qué significa 1. # INF00, -1. # IND00 y -1. # IND significa?
- 25. "SELECCIONAR SUPERIOR 1 1" VS "SI EXISTE (SELECCIONAR 1"
- 26. ¿Por qué ~ 0 es -1?
- 27. ¿Una estructura de datos para mapeos 1: 1 en python?
- 28. SELECCIONAR 1 = 1 no funciona
- 29. $ 1 y \ 1 en Ruby
- 30. ¿Por qué es (-1 >>> 32) = -1?
Creo que tuve esta pregunta en la universidad un día hace muchas lunas;) – foreyez