Procesadores de Lenguaje

Documentos relacionados
Compiladores: Parsing ascendente

Procesadores de Lenguaje

Procesadores de lenguaje Tema Análisis sintáctico (Parte II)

Procesadores de Lenguaje

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Las Etapas de la Compilación

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

El análisis descendente LL(1) 6, 7 y 13 de abril de 2011

Autómatas de Pila y Lenguajes Incontextuales

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

Convertir un AFND a un AFD

Autómatas de Pila. Descripciones instantáneas o IDs. El Lenguaje de PDA. Equivalencia entre PDAs y CFGs INAOE (INAOE) 1 / 50

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Tema 2: Determinantes

Unidad II: Análisis semántico

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

Tema: Autómata de Pila

Unidad 4. Autómatas de Pila

Eliminación de cuantificadores

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

Generación de variables aleatorias continuas Método de rechazo

Expresiones Regulares y Derivadas Formales

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Un autómata con pila no determinista (APND) es una septupla Q A B F en la que

Universidad de Costa Rica. Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES.

Interrogación 2. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003

GRAMATICAS LIBRES DEL CONTEXTO

Espacios Vectoriales. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Espacios Vectoriales 1 / 21

Teoría de Lenguajes. Clase Teórica 7 Autómatas de Pila y Lenguajes Independientes del Contexto Primer cuartimestre 2014

Autómatas Finitos Deterministicos (DFA)

Espacios Vectoriales Asturias: Red de Universidades Virtuales Iberoamericanas 1

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO

27/01/2011 TRIGONOMETRÍA Página 1 de 7

Cálculo Diferencial: Enero 2016

Tema 1. Espacios Vectoriales Definición de Espacio Vectorial

Construcción de tablas de análisis sintáctico LL(1)

1. Curvas Regulares y Simples

Computabilidad y Lenguajes Formales: Autómatas Finitos

OPTIMIZACIÓN DE CÓDIGO

Curso Completo de Electrónica Digital

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Análisis sintáctico LR generalizado

La luz. Según los datos del problema se puede esbozar el siguiente dibujo:

A B MIN C D E F MAX x E.T.S.I. INFORMÁTICA 4º CURSO. INTELIGENCIA ARTIFICIAL E INGENIERÍA DEL CONOCIMIENTO

SISTEMAS DE ECUACIONES LINEALES. Método de reducción o de Gauss. 1º DE BACHILLERATO DPTO DE MATEMÁTICAS COLEGIO MARAVILLAS AUTORA: Teresa González.

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Teoría de Lenguajes y Autómatas Conceptos y teoremas fundamentales

Tema 8: Contraste de hipótesis

Base y Dimensión de un Espacio Vectorial

S Qué es el analizador sintáctico?

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

El Autómata con Pila

Ecuaciones Diofánticas

Teoría Tema 2 Concepto de función

INSTITUCIÓN EDUCATIVA GABRIEL TRUJILLO CORREGIMIENTO DE CAIMALITO, PEREIRA

Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.

1. Función primitiva e integral indefinida

Máquinas de Turing IIC3242. IIC3242 Máquinas de Turing 1 / 42

Lenguajes y Gramáticas

Tema 4: Aplicaciones lineales

Técnicas numéricas para las Ecuaciones diferenciales de primer orden: Método de Euler

Gramáticas independientes del contexto AUTÓMATAS Y LENGUAJES FORMALES LENGUAJES INDEPENDIENTES DEL CONTEXTO Y AUTÓMATAS DE PILA. Otras definiciones I

Procesadores de lenguaje Tema Análisis sintáctico (Parte I)

CURSO: PRESENTE Y DESAFIOS DE LA GESTION PARLAMENTARIA

Sumador Ripple-Carry

Autómatas Mínimos. Encontrar el autómata mínimo. Universidad de Cantabria. Introducción Minimización de Autómatas Deterministas Resultados Algoritmo

Inducción en definiciones y demostraciones AUTÓMATAS Y LENGUAJES FORMALES PRELIMINARES MATEMÁTICOS. Números naturales. Inducción matemática

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

GENERADOR DE COMPILADORES BASADO EN

TEMA 4: TRIGONOMETRÍA. RAZONES TRIGONOMÉTRICAS

Seminario 3: Lentes, espejos y formación de imágenes

Matemá'cas generales

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES

Seminario de problemas-eso. Curso Hoja 10

Tema 11: Integral definida. Aplicaciones al cálculo de áreas

PROBLEMAS RESUELTOS SELECTIVIDAD ANDALUCÍA 2015 MATEMÁTICAS APLICADAS A LAS CIENCIAS SOCIALES TEMA 3: PROGRAMACIÓN LINEAL

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 3.1: Autómatas Finitos Deterministas

Matriz de Insumo - Producto

Tema: Los Grafos y su importancia para la optimización de redes.

Equivalencia Entre PDA y CFL

Un. VI. Generador de código intermedio.

CONCEPTO DE CINEMÁTICA: es el estudio del movimiento sin atender a las causas que lo producen

Expresiones regulares, gramáticas regulares

Probabilidad: Fórmulas y definiciones básicas. PROBABILIDAD Fórmulas y definiciones básicas

Sentido de recorrido. q i

ESTUDIO ELEMENTAL DEL TIRO OBLICUO

Tema 6: Teoría Semántica

Clase 17: Autómatas de pila

MATEMÁTICAS PARA LA COMPUTACIÓN

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Definición 1 Un semigrupo es un conjunto E provisto de una operación binaria asociativa sobre E, se denota por (E, ).

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Grado en Ingeniería Informática Online, Curso Universidad Rey Juan Carlos

ESTADÍSTICA CON EXCEL

CALCULO INTEGRAL CONCEPTOS DE AREA BAJO LA CURVA. (Se utiliza el valor de la función en el extremo izquierdo de cada subintervalo)

MULTIPLICACIÓN DE NÚMEROS NATURALES

Tema 7. Generación de código

Definición 1.1 Sea G = (V, A) un grafo no dirigido. G se denomina árbol si es conexo y no contiene ciclos.

Transcripción:

Procesadores de Lenguaje Analizadores LALR Cris%na Tirnauca Domingo Gómez Pérez DPTO. DE MATEMÁTICAS, ESTADÍSTICA Y COMPUTACIÓN Este tema se publica bajo Licencia: CreaIve Commons BY NC SA 3.0

El Analizador LALR El método LR(1) es el método más potente que hemos visto para realizar parsing. Ventajas: Es un método muy conocido, con muchas optimizaciones. Los métodos LR(k) se pueden reducir algoritmicamente a LR(1). Se puede combinar con el análisis semántico y proporciona un recorrido en postorden del árbol de derivacion. Inconvenientes:: Aparecen muchos estados en el autómata LR(1).

El Analizador LALR Bison y Yacc y varios otros A base de ítems LR(1). Pero empleando estados LR(0). Si lo miramos desde el LR canónico: Construyes el analizador LR canónico, y fundes entre sí los estados que sólo difieran en los look-ahead. O lo que es lo mismo, fundes entre sí los estados cuya parte LR(0) coincida. Obtienes estados LR(0), pero con ítems LR(1) que traen los look-ahead correspondientes.

El Analizador LALR Bison y Yacc y varios otros A base de ítems LR(1). Pero empleando estados LR(0). Si lo miramos desde el LR canónico: Construyes el analizador LR canónico, y fundes entre sí los estados que sólo difieran en los look-ahead. O lo que es lo mismo, fundes entre sí los estados cuya parte LR(0) coincida. Obtienes estados LR(0), pero con ítems LR(1) que traen los look-ahead correspondientes. Si lo miramos desde el LR(0): Construyes el analizador LR(0), y ampĺıas cada ítem LR(0) en cada uno de los estados con el look-ahead que obtendrías si hubieras usado ítems LR(1).

El Analizador LALR Bison y Yacc y varios otros A base de ítems LR(1). Pero empleando estados LR(0). Si lo miramos desde el LR canónico: Construyes el analizador LR canónico, y fundes entre sí los estados que sólo difieran en los look-ahead. O lo que es lo mismo, fundes entre sí los estados cuya parte LR(0) coincida. Obtienes estados LR(0), pero con ítems LR(1) que traen los look-ahead correspondientes. Si lo miramos desde el LR(0): Construyes el analizador LR(0), y ampĺıas cada ítem LR(0) en cada uno de los estados con el look-ahead que obtendrías si hubieras usado ítems LR(1). (Esta última tarea no es nada trivial.)

LR canónico y LALR La construcción laboriosa de LALR Un clásico: Dos trenes; cada uno de ellos es una secuencia no acotada (quizá vacía) de vagones, tirados por una locomotora. %token VAG LOC %% S : dostrenes $ dostrenes : tren tren tren : VAG tren LOC En realidad es un lenguaje regular, y el analizador LR(0) puede con él. Pero es un buen ejemplo de cómo se construye el analizador LALR a partir del LR canónico.

Tabla de Análisis LALR El rol de los estados al construir el analizador Precisamos los estados únicamente para construir la tabla de análisis. Cada entrada de la tabla: Corresponde a un estado E y a un token que viene a continuación. Indica desplazar si hay un ítem en el estado que lleva el punto justo delante del mismo token. Indica reducir si hay un ítem en el estado que lleva el punto justo al final, y que incluye ese mismo token en su look-ahead. LR canónico tiene tablas más grandes. LR(0), SLR y LALR usan los mismos estados y sólo se diferencian en qué entradas de la tabla mandan reducir.

Núcleos de Estados LR(0) La esencia que describe el estado El estado inicial tiene siempre el item [S S$] o equivalente. Todo lo demás es consecuencia de éste. Dos maneras de generar ítems LR(0): 1. A partir de un ítem que ya existe, en el que el punto está frente a un símbolo no terminal, se generan nuevos ítems en el mismo estado, con ese símbolo como parte izquierda, y el punto al comienzo de la parte derecha. 2. A partir de un ítem que ya existe, el punto avanza y causa la incorporación del nuevo ítem a un nuevo estado: el punto avanza un token al desplazar; el punto avanza un símbolo no terminal tras una reducción. Llamamos núcleo del estado a los ítems que se han generado de la manera 2.

Núcleos de Estados LR(0) La esencia que describe el estado El estado inicial tiene siempre el item [S S$] o equivalente. Todo lo demás es consecuencia de éste. Dos maneras de generar ítems LR(0): 1. A partir de un ítem que ya existe, en el que el punto está frente a un símbolo no terminal, se generan nuevos ítems en el mismo estado, con ese símbolo como parte izquierda, y el punto al comienzo de la parte derecha. 2. A partir de un ítem que ya existe, el punto avanza y causa la incorporación del nuevo ítem a un nuevo estado: el punto avanza un token al desplazar; el punto avanza un símbolo no terminal tras una reducción. Llamamos núcleo del estado a los ítems que se han generado de la manera 2. Ojo: el ítem causante puede no ser un ítem del núcleo del estado de partida.

Fuentes de Look-ahead, I Pueden provenir de dos vías Dos maneras de transformar ítems LR(0) en ítems LR(1): 1. look-aheads que se generan y 2. look-aheads que se propagan. Idea inicial: se generan dentro del mismo estado al incluír ítems que no son núcleo; se propagan al causar ítems núcleo en otros estados.

Fuentes de Look-ahead, I Pueden provenir de dos vías Dos maneras de transformar ítems LR(0) en ítems LR(1): 1. look-aheads que se generan y 2. look-aheads que se propagan. Idea inicial: se generan dentro del mismo estado al incluír ítems que no son núcleo; se propagan al causar ítems núcleo en otros estados. Pero esta idea no se emplea así. Se gestiona evitando poner en juego los ítems que no son núcleo.

Fuentes de Look-ahead, II Pueden provenir de dos vías Evitaremos calcular look-aheads fuera del núcleo. Tendremos en cuenta los ítems que no son del núcleo únicamente cuando sea imprescindible. Redefinimos las nociones para usar únicamente ítems núcleo: 1. look-aheads que se generan de un núcleo a otro y 2. look-aheads que se propagan de un núcleo a otro. La propagación es la misma de antes pero sólo entre núcleos. Una propagación que viene de un ítem no núcleo se obtiene al considerar conjuntamente la generación en ese ítem. La generación va a través de un ítem no núcleo intermedio.

Grafo de Propagación Preparar la propagación antes de realizarla Si generamos y propagamos a la vez los look-ahead, las cosas se complican. Comparando ítems podemos ver qué look-aheads se generan, pero no cuáles se propagan.

Grafo de Propagación Preparar la propagación antes de realizarla Si generamos y propagamos a la vez los look-ahead, las cosas se complican. Comparando ítems podemos ver qué look-aheads se generan, pero no cuáles se propagan. Pero sí vemos por dónde se propagan. Por tanto, al recorrer los ítems, anotamos look-aheads que se generan y, a la vez, construimos un grafo dirigido que nos indicará cómo se propagan.

Cálculo de los Look-ahead Se descompone en cuatro tareas Organizamos cuatro tareas en tres fases, porque las dos primeras tareas se realizan a la vez. Fases: 1. A la vez, sobre todos los ítems núcleo, calcular los look-aheads que se generan y construir el grafo de propagación. 2. Propagar por el grafo los look-aheads generados. 3. Construir la tabla de análisis, calculando look-aheads de ítems no núcleo únicamente cuando son necesarios.

Generación de Look-aheads La primera de las cuatro fases Empleamos un falso look-ahead que nos sirve de marcador para construir el grafo de propagación. Algoritmo: Para cada ítem núcleo [A α β] del estado E: 1. lo convertimos en LR(1) añadiendo el falso look-ahead (por ejemplo # ); 2. calculamos todos los ítems λ-accesibles desde ese ítem LR(1), [A α β, #] (él mismo y λ-transiciones), y 3. para cada nuevo ítem resultante, [B γ X δ, a]: si a = #, anotamos que los look-ahead de [A α β] se habrán de propagar a [B γx δ]: ponemos el correspondiente arco en el grafo de propagación; si a #, anotamos a como look-ahead generado en el ítem [B γx δ] del estado transición desde E con X.

Construcción de la Tabla LALR Proceso similar al caso SLR Cuatro tareas en tres fases: Preproceso de look-aheads en un único algoritmo: Cálculo de look-aheads generados y Construcción del grafo de propagación de look-aheads; Propagación de look-aheads (cálculo propiamente dicho de los look-aheads); Construcción de la tabla.

Construcción de la Tabla LALR Proceso similar al caso SLR Cuatro tareas en tres fases: Preproceso de look-aheads en un único algoritmo: Cálculo de look-aheads generados y Construcción del grafo de propagación de look-aheads; Propagación de look-aheads (cálculo propiamente dicho de los look-aheads); Construcción de la tabla. Parte Acción de la tabla (solemos pintarla a la izquierda): a qué estado vamos con los shift y qué reglas aplicamos para reducir, en cada estado y con cada token de la entrada. Parte GoTo de la tabla: al reducir y apilar un símbolo no terminal, cuál es el nuevo estado.

Ejemplo de Autómata LALR Lenguaje de Dyck sin palabra vacía Excluyendo la palabra vacía: %% s : s t t; t : ( u ) ; u : s /* empty */;

Automata LR(0)

Símbolos Propagados Estados Estados a donde se propaga Símbolos generados 0 1,2,3 ($ accept->.s$ end,$) (s->.st,(,$) 1 5 2 1,6,7 4 1,7 (u->s.$, )) 5 8

Tabla LALR Tal como la obtenemos de Bison estado ( ) $ s t u 0 shift: 1 2 3 1 shift: 1 u:λ u:λ 4 3 5 2 shift: 1 shift: 6 7 3 s:t s:t s:t 4 shift: 1 u:s u:s 7 5 shift: 8 6 accept accept accept 7 s:s t s:s t s:s t 8 t: ( u ) t: ( u ) t: ( u )