Analizador sintáctico LR

Analizador sintáctico LR

Los analizadores sintácticos LR, también conocidos como Parser LR, son un tipo de analizadores para algunas gramáticas libres de contexto. Pertenece a la familia de los analizadores ascendentes, ya que construyen el árbol sintáctico de las hojas hacia la raíz. Utilizan la técnica de análisis por desplazamiento reducción. Existen tres tipos de parsers LR: SLR (K), LALR (K) y LR (K) canónico.

Un analizador LR consta de:

  1. Un programa conductor
  2. Una entrada
  3. Una salida
  4. Una tabla de análisis sintáctico, compuesta de 2 partes (ACCIÓN Y GOTO)

Cabe acotar que el programa conductor es siempre igual, solo variando para cada lenguaje la tabla de análisis sintáctico.

El algoritmo para reconocer cadenas es el siguiente: dado el primer carácter de la cadena y el estado inicial de la tabla, buscar qué acción corresponde en la tabla de acción.

Si el estado es shift n (n ∈ N), se coloca el carácter y el número de estado n en la pila, se lee el siguiente carácter y repite el procedimiento, solo que esta vez buscamos en el estado correspondiente.

SI ACCIÓN = REDUCE n (n ∈ N), se sacan de la pila tantas tuplas (estado, símbolo) como el largo de la cola de la producción en el n-ésimo lugar, y se reemplaza por la cabeza de esta producción. El nuevo estado sale de buscar en la tabla GOTO usando para ubicarlo el número de estado que quedo en el tope de la pila, y el no terminal en la cabeza.

En la tabla acción también encontraremos ACEPTAR que se toma la cadena como valida y se termina el análisis o ERROR que se rechaza la cadena.

Algoritmo para generar un autómata LR(0)

Para generar un autómata LR(0) en base a una gramática G, primero se debe definir:

  • Gramática ampliada: Dado una gramática G, se define la gramática ampliada G'a:
1. Se agrega una producción S'->S# donde S es el símbolo inicial.(el # representa el fin de cadena)
2. Se pasan todas las producciones a ítems de configuración (veremos este concepto en un instante) con el punto al principio de la cola
3. Se define S' como el símbolo inicial de la gramática.
  • Ítem de configuración: un ítem de configuración es una producción que tiene un carácter especial (generalmente un punto) en algún lugar de la cola. Por ejemplo: la producción S->ABC genera los siguientes ítems,{ S->.ABC, S->A.BC, S->AB.C S->ABC.}. Como veremos en un instante, y hablando informalmente el punto representa el lugar actual en donde me puedo encontrar en un momento en el parseo en una producción.
  • Clausura de un ítem: se define a la clausura de un ítem (y de forma informal) a: dado un ítem S->A.cB (A, B e V*, c e Vt unión VN) al conjunto formado por
1. S->A.cB
2. Si c es un no terminal, se agregan todos los ítems que tengan a c como cabeza de la producción y el punto al principio de la cola,
3. Si p es un ítem que pertenece a la clausura, la clausura de p pertenece a la clausura, siempre y cuando ya no este agregada.

En otras palabras, y para que se entienda el concepto, la clausura de un ítem representa todas las producciones que se pueden aplicar a una cadena valida a partir del punto del ítem.

Finalmente, la construcción del autómata es así:

  1. Se amplía la gramática
  2. Dado el símbolo inicial de la gramática ampliada, se calcula su clausura y este se define como un estado inicial.
  3. Para cada estado: se agrupan las producciones según el carácter que está después del punto, si todavía no se definió el estado, se corre el punto un carácter a la derecha, se crea el nuevo estado con esta producciones, y la clausura de cada una de ellas, se define el carácter que estaba después del punto en el estado de origen como el carácter de la transición.
  4. Si el estado tiene en alguna producción el punto al final, este estado se marca como un estado final del autómata.
  5. Se sigue hasta que ya no se tenga más estados nuevos posibles.

Estrictamente hablando, el autómata LR es un autómata determinista, aunque, en general, su utilidad radica en ser la base para la construcción de la tabla LR(0).

Véase también


Wikimedia foundation. 2010.

Игры ⚽ Поможем сделать НИР

Mira otros diccionarios:

  • Analizador sintáctico LL — Saltar a navegación, búsqueda El analizador sintático LL es un analizador sintáctico descendente, por un conjunto de gramática libre de contexto. En éste analizador las entradas son de izquierda a derecha, y construcciones de derivaciones por la… …   Wikipedia Español

  • Analizador sintáctico — Un analizador sintáctico (en inglés parser) es una de las partes de un compilador que transforma su entrada en un árbol de derivación. El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más… …   Wikipedia Español

  • Analizador sintáctico — Un analizador sintáctico es un programa que reconoce si una o varias cadenas de carácteres forman parte de un determinado lenguaje. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto.… …   Enciclopedia Universal

  • Analizador sintáctico de precedencia simple — Saltar a navegación, búsqueda En el área de los lenguajes formales, un analizador de sintaxis por precedencia simple es un tipo de analizador sintáctico ascendente para gramáticas libres de contexto que pueden ser utilizados para reconocer… …   Wikipedia Español

  • Analizador léxico — Un analizador léxico o analizador lexicográfico (en inglés scanner) es un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes léxicos) o símbolos.… …   Wikipedia Español

  • Análisis sintáctico (lingüística) — Saltar a navegación, búsqueda El análisis sintáctico es el análisis de las funciones sintácticas o relaciones de concordancia y jerarquía que guardan las palabras agrupándose entre sí en sintagmas, oraciones simples y compuestas de proposiciones… …   Wikipedia Español

  • Motor de Análisis Sintáctico — Este artículo o sección se refiere o está relacionado con un software futuro o en desarrollo. La información de este artículo puede cambiar frecuentemente. Por favor, no agregues datos especulativos y recuerda colocar referencias a fuentes… …   Wikipedia Español

  • Compilador — «Compilación» redirige aquí. Para otras acepciones, véase recopilación. Diagrama a bloques de la operación de un buen compilador. Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro… …   Wikipedia Español

  • Proceso de traducción de programas — Saltar a navegación, búsqueda Además de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en módulos almacenados en archivos distintos. La tarea de reunir el programa… …   Wikipedia Español

  • Yacc — es un programa para generar analizadores sintácticos. Las siglas del nombre significan Yet Another Compiler Compiler, es decir, Otro generador de compiladores más . Genera un analizador sintáctico (la parte de un compilador que comprueba que la… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”