He estado usando lex/yacc y ahora estoy intentando cambiar a ANTLR. La principal preocupación es que ANTLR es un analizador LL (*) a diferencia de yacc que es LALR. Estoy acostumbrado a pensar de abajo hacia arriba y no sé exactamente cuál es la ventaja de LL grammars. La gente dice que las gramáticas LL son más fáciles de entender y más populares en estos días. Pero parece que los analizadores de LR son más potentes, p. Los analizadores de LL son incapaces de manejar recursiones a la izquierda, aunque parece que hay algunas soluciones.Analizador LALR vs LL
Entonces, la pregunta es: ¿cuál es la ventaja de las gramáticas LL sobre LALR? Apreciaría si alguien pudiera darme algunos ejemplos. Los enlaces a artículos útiles también serían geniales.
Gracias por su ayuda con anticipación!
(Veo esto es un gran recurso:. What advantages do LL parsers have over LR parsers?, pero hubiera sido mejor con algunos ejemplos)
Si alguien te entrega el generador del analizador, por definición, lo que hace es "fácil de implementar". En ese caso, usted elige el generador de analizadores que maneja fácilmente la clase más grande de idiomas, para minimizar sus esfuerzos. Desde la perspectiva, en mi humilde opinión, LR gana bastante bien LL. GLR gana con LR bastante bien. –
Estoy de acuerdo, pero, sin embargo, LL aún son fáciles de implementar. Estaba señalando que LR generalmente requiere el uso de una herramienta. Me parece muy intrigante que puedas escribir a mano el descenso recursivo y el código y la gramática van de la mano. –
Sí, sus analizadores intrigantes y generadores de personas deberían conocerlos. A medida que sus gramáticas crecen, es inconveniente forzarlo a formar LL, y en algunos puntos (bastante pequeños) la conveniencia de LR gana la simplicidad conceptual en su cabeza. LR es bastante fácil de entender si no estás construyendo el generador de analizadores, y no es como si no hubiera muchos alrededor. –