LL Parser incluye tanto el analizador de descenso recursivo como el analizador de descenso no recursivo. Un tipo usa el retroceso mientras que otro usa la tabla de análisis. Las tesis son un analizador de arriba hacia abajo.
Ejemplo: la gramática dada es
S -> Ac A -> ab
donde S es el símbolo de inicio, A no es terminal y a, b, c son terminales.
String de entrada: abc
Árbol de análisis generado por el analizador LL:
LR Parser es uno de los analizadores de abajo hacia arriba que utiliza la tabla de análisis (programación dinámica) para obtener el árbol de análisis en forma de string dada mediante producciones gramaticales.
Ejemplo: En el ejemplo anterior, el árbol de análisis generado por el analizador LR:
Diferencia entre el analizador LL y LR:
Analizador LL | Analizador LR |
---|---|
La primera L de LL es de izquierda a derecha y la segunda L es para la derivación más a la izquierda. | L de LR es de izquierda a derecha y R es para la derivación más a la derecha. |
Sigue la derivación más a la izquierda. | Sigue el reverso de la derivación más a la derecha. |
El uso del árbol del analizador LL se construye de manera descendente. | El árbol del analizador se construye de forma ascendente. |
En el analizador LL, los no terminales se expanden. | En el analizador LR, los terminales están comprimidos. |
Comienza con el símbolo de inicio (S). | Termina con el símbolo de inicio (S). |
Finaliza cuando la pila utilizada se vacía. | Comienza con una pila vacía. |
Reservar el recorrido del árbol de análisis. | Recorrido posterior al pedido del árbol del analizador. |
La terminal se lee después de salir de la pila. | La terminal se lee antes de insertarla en la pila. |
Puede usar backtracking o programación dinámica. | Utiliza programación dinámica. |
LL es más fácil de escribir. | LR es difícil de escribir. |
Ejemplo: LL(0), LL(1) | Ejemplo: LR(0), SLR(1), LALR(1), CLR(1) |