
int v;main(){" y está a punto de elegir una regla para derivar el no terminal " Stmt". Mirando solo el primer token de anticipación " v", no puede decidir cuál de las dos alternativas para " Stmt" elegir, ya que son posibles dos continuaciones de entrada. Se pueden distinguir mirando el segundo token de anticipación (fondo amarillo).En la teoría del lenguaje formal , una gramática LL es una gramática libre de contexto que puede ser analizada por un analizador LL , el cual analiza la entrada de izquierda a derecha y construye una derivación más a la izquierda de la oración (de ahí el término LL, en comparación con el analizador LR que construye una derivación más a la derecha). Un lenguaje que posee una gramática LL se conoce como lenguaje LL . Estos forman subconjuntos de las gramáticas libres de contexto deterministas (DCFG) y los lenguajes libres de contexto deterministas (DCFL), respectivamente. Se dice que una gramática o lenguaje dado "es una gramática/lenguaje LL" o simplemente "es LL" para indicar que pertenece a esta clase.
Los analizadores LL son analizadores basados en tablas, similares a los analizadores LR. Las gramáticas LL también pueden caracterizarse como aquellas que pueden ser analizadas por un analizador predictivo (un analizador descendente recursivo sin retroceso ), y estas pueden escribirse fácilmente a mano. Este artículo trata sobre las propiedades formales de las gramáticas LL; para el análisis sintáctico, consulte Analizador LL o Analizador descendente recursivo .
Definición formal
Caso finito
Dado un número natural, una gramática libre de contexto es una gramática LL(k) si
- para cada cadena de símbolos terminalesde longitud hastasímbolos,
- para cada símbolo no terminal, y
- para cada cadena de símbolos terminales,
Existe como máximo una regla de producción.de tal manera que para algunas cadenas de símbolos terminales,
- la cuerdapuede derivarse del símbolo inicial,
- puede derivarse dedespués de aplicar primero la regla, y
- la primerasímbolos dey deDe acuerdo. [ 2 ]
Una definición formal alternativa, pero equivalente, es la siguiente: es una gramática LL(k) si, para derivaciones arbitrarias
cuando el primerosímbolos deestoy de acuerdo con los de, entonces. [ 3 ] [ 4 ]
De manera informal, cuando un analizador sintáctico se ha derivado, consu no terminal más a la izquierda yya consumido de la entrada, entonces al mirar esoy echando un vistazo al siguientesímbolosA partir de la entrada actual, el analizador puede identificar con certeza la regla de producción.para.
Cuando la identificación de reglas es posible incluso sin considerar la entrada anterior, entonces la gramática se denomina gramática LL(k) fuerte . [ 5 ] En la definición formal de una gramática LL( k ) fuerte , el cuantificador universal parase omite yse agrega al cuantificador "para algunos" paraPara cada gramática LL( k ), se puede construir una gramática LL( k ) fuerte estructuralmente equivalente . [ 6 ]
La clase de lenguajes LL( k ) forma una secuencia estrictamente creciente de conjuntos: LL(0) ⊊ LL(1) ⊊ LL(2) ⊊ …. [ 7 ] Es decidible si una gramática dada G es LL( k ), pero no es decidible si una gramática arbitraria es LL( k ) para algún k . También es decidible si una gramática LR( k ) dada es también una gramática LL( m ) para algún m . [ 8 ]
Toda gramática LL( k ) es también una gramática LR( k ). Una gramática LL(1) libre de ε es también una gramática SLR(1). Una gramática LL(1) con símbolos que tienen derivaciones tanto vacías como no vacías es también una gramática LALR(1). Una gramática LL(1) con símbolos que tienen solo la derivación vacía puede o no ser LALR(1). [ 9 ]
Las gramáticas LL no pueden tener reglas que contengan recursión izquierda . [ 10 ] Cada gramática LL( k ) que es ε-libre puede transformarse en una gramática LL( k ) equivalente en forma normal de Greibach (que por definición no tiene reglas con recursión izquierda). [ 11 ]
Caso regular
Dejarser un alfabeto terminal. Una particióndeSe denomina partición regular si para cadael idiomaes regular.
Dejarser una gramática libre de contexto y dejarser una partición regular deDecimos quees un LL() gramática si, para derivaciones arbitrarias
de tal manera queresulta que. [ 12 ]
Se dice que una gramática G es LL-regular (LLR) si existe una partición regular detal que G es LL(Un lenguaje es LL-regular si es generado por una gramática LL-regular.
Las gramáticas LLR no son ambiguas y no pueden ser recursivas por la izquierda.
Toda gramática LL( k ) es LLR. Toda gramática LL( k ) es determinista, pero existe una gramática LLR que no es determinista. [ 13 ] Por lo tanto, la clase de gramáticas LLR es estrictamente mayor que la unión de LL( k ) para cada k .
Es decidible si, dada una partición regular, una gramática dada es LL(Sin embargo, no es decidible si una gramática arbitraria G es LLR. Esto se debe a que decidir si una gramática G genera un lenguaje regular, lo cual sería necesario para encontrar una partición regular para G , se puede reducir al problema de correspondencia de Post .
Toda gramática LLR es LR-regular (LRR, el equivalente correspondiente para las gramáticas LR( k )), pero existe una gramática LR(1) que no es LLR. [ 13 ]
Históricamente, las gramáticas LLR surgieron tras la invención de las gramáticas LRR. Dada una partición regular, se puede construir una máquina de Moore para transducir el análisis sintáctico de derecha a izquierda, identificando instancias de producciones regulares. Una vez hecho esto, un analizador LL(1) es suficiente para procesar la entrada transducida en tiempo lineal. Por lo tanto, los analizadores LLR pueden manejar una clase de gramáticas estrictamente mayor que los analizadores LL( k ) con la misma eficiencia. A pesar de ello, la teoría LLR no tiene aplicaciones importantes. Una posible y muy plausible razón es que, si bien existen algoritmos generativos para analizadores LL( k ) y LR( k ), el problema de generar un analizador LLR/LRR es indecidible a menos que se haya construido previamente una partición regular. Pero incluso el problema de construir una partición regular adecuada dada la gramática es indecidible.
Lenguajes deterministas simples
Una gramática libre de contexto se llama determinista simple , [ 14 ] o simplemente simple , [ 15 ] si
- está en forma normal de Greibach (es decir, cada regla tiene la forma), y
- diferentes lados derechos para el mismo no terminalSiempre comienza con terminales diferentes..
Un conjunto de cadenas de caracteres se denomina lenguaje determinista simple, o simplemente lenguaje simple, si posee una gramática determinista simple.
La clase de lenguajes que poseen una gramática LL(1) libre de ε en forma normal de Greibach es igual a la clase de lenguajes deterministas simples. [ 16 ] Esta clase de lenguajes incluye los conjuntos regulares que no contienen ε. [ 15 ] La equivalencia es decidible para ella, mientras que la inclusión no lo es. [ 14 ]
Aplicaciones
Las gramáticas LL, en particular las gramáticas LL(1), son de gran interés práctico, ya que son fáciles de analizar, ya sea mediante analizadores LL o mediante analizadores descendentes recursivos, y muchos lenguajes de programación están diseñados para ser LL(1) por esta razón. Tradicionalmente, se ha considerado que los lenguajes basados en gramáticas con un valor alto de k son difíciles de analizar, aunque esto es menos cierto ahora dada la disponibilidad y el uso generalizado de generadores de analizadores que admiten gramáticas LL( k ) para k arbitrario .
Véase también
- Comparación de generadores de analizadores sintácticos para una lista de analizadores LL(k) y LL(*)
Notas
- ↑ Kernighan y Ritchie 1988 , Apéndice A.13 "Gramática", pág. 193 y ss. La parte superior de la imagen muestra un extracto simplificado en una notación similar a la EBNF .
- ↑ Rosenkrantz y Stearns (1970 , p. 227) . Def.1. Los autores no consideran el caso k = 0.
- ↑ donde "" denota derivabilidad por derivaciones más a la izquierda, y,, y
- ↑ Waite & Goos (1984 , p. 123) Def.5.22
- ↑ Rosenkrantz y Stearns (1970 , pág. 235) Def.2
- ↑ Rosenkrantz y Stearns (1970 , p. 235) Teorema 2
- ↑ Rosenkrantz y Stearns (1970 , págs. 246-247) : Usando " " para denotar "o", el conjunto de cadenastiene unpero no libre de εgramática, para cada.
- ↑ Rosenkrantz y Stearns (1970 , págs. 254-255)
- ↑ Beatty (1982)
- ↑ Rosenkrantz y Stearns (1970 , pág. 241) Lema 5
- ↑ Rosenkrantz y Stearns (1970 , pág. 242) Teorema 4
- ↑ Poplawski, David (1977). "Propiedades de los lenguajes regulares LL". Universidad de Purdue.
{{cite journal}}: Para citar una revista se requiere|journal=( ayuda ) - 1 2 David A. Poplawski (agosto de 1977). Propiedades de los lenguajes LL-regulares (Informe técnico). Universidad de Purdue , Departamento de Ciencias de la Computación.
- ^ Korenjak y Hopcroft (1966)
- 1 2 Hopcroft y Ullman (1979 , pág. 229) Ejercicio 9.3
- ↑ Rosenkrantz y Stearns (1970 , pág. 243)
Fuentes
- Beatty, JC (1982). "Sobre la relación entre las gramáticas LL(1) y LR(1)" (PDF) . Journal of the ACM . 29 (4 (octubre)): 1007–1022 . doi : 10.1145/322344.322350 . S2CID 14700480 .
- Hopcroft, John E.; Ullman, Jeffrey D. (1979). Introducción a la teoría de autómatas, lenguajes y computación . Addison-Wesley. ISBN 978-0-201-02988-8.
- Kernighan, Brian W.; Ritchie, Dennis M. (abril de 1988). El lenguaje de programación C. Serie de software de Prentice Hall (2.ª ed.). Englewood Cliffs/NJ: Prentice Hall. ISBN 978-013110362-7.
- Korenjak, AJ; Hopcroft, JE (1966). "Lenguajes deterministas simples". Actas de la 7.ª Conferencia Anual del IEEE sobre Teoría de Conmutación y Autómatas (SWAT) . Publicación del IEEE n.º vol. 16-C-40. págs. 36–46 . doi : 10.1109/SWAT.1966.22 .
- Parr, T.; Fisher, K. (2011). "LL(*): Los fundamentos del generador de analizadores sintácticos ANTLR" (PDF) . ACM SIGPLAN Notices . 46 (6): 425– 436. doi : 10.1145/1993316.1993548 .
- Rosenkrantz, DJ; Stearns, RE (1970). "Propiedades de las gramáticas deterministas descendentes" . Information and Control . 17 (3): 226– 256. doi : 10.1016/s0019-9958(70)90446-8 .
- Waite, William M.; Goos, Gerhard (1984). Construcción de compiladores . Textos y monografías en informática. Heidelberg: Springer. ISBN 978-3-540-90821-0.
Lecturas adicionales
- Sippu, Seppo; Soisalon-Soininen, Eljas (1990). Teoría del análisis: análisis LR (k) y LL (k) . Medios de ciencia y negocios de Springer. ISBN 978-3-540-51732-0.
- Lenguajes formales