2010-11-14 103 views

Respuesta

8

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

+0

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

+1

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

+0

¿Este hecho contradice? http://cs.stackexchange.com/questions/60763/does-my-grammar-contradict-ll-⊆-lr1/60764#60764 – Pranav

Cuestiones relacionadas