Procesadores de Lenguaje

Documentos relacionados
Procesadores de Lenguaje

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

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

Analizador Sintáctico Ascendente

Analizadores sintácticos LR(0) y SLR

Tema 5. Análisis sintáctico ascendente

Tema 4: Análisis sintáctico ascendente. Análisis sintáctico ascendente: un ejemplo

22, 23 y 24 Análisis sintáctico V Compiladores - Profr. Edgardo Adrián Franco Martínez

Procesadores de Lenguaje

ANÁLISIS SINTÁCTICO II LR1

Procesadores de Lenguaje

LR(1) - LALR. Alejandro Grinberg. 30 de Octubre de (agradecimiento a Juan Manuel Pérez) Alejandro Grinberg () LR(1) - LALR 1 / 16

Procesadores de Lenguaje

Tema 5. Análisis semántico

ANÁLISIS SINTÁCTICO II SLR

Proyecto Intermedio Algoritmo de Earley

Análisis sintáctico Analizadores ascendentes

Compiladores: Parsing ascendente

ANÁLISIS SINTÁCTICO II LALR

ANÁLISIS SINTÁCTICO I CONJUNTOS PRIMERO Y SIGUIENTE

INTRODUCCIÓN A COMPILADORES Y LENGUAJES FORMALES LENGUAJES FORMALES

Las Gramáticas Formales

ANÁLISIS SINTÁCTICO I ANÁLISIS SINTÁCTICO DESCENDENTE LL(1)

Software para la Enseñanza de las Fases de Análisis Léxico y Análisis Sintáctico en Procesadores de Lenguajes

18 Análisis sintáctico III Compiladores - Profr. Edgardo Adrián Franco Martínez. Clasificación de métodos de análisis sintáctico Análisis descendente

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

GRAMÁTICAS LIBRES DE CONTEXTO

ANÁLISIS DESCENDENTE. Compruébese que la siguiente gramática es LL(1) sin modificarla.

Departamento de Tecnologías de la Información. Tema 4. Máquinas de Turing. Ciencias de la Computación e Inteligencia Artificial

Tema: Análisis Sintáctico LR

Compiladores: Sesión 16. Análisis semántico, traducción dirigida por sintaxis

Procesadores de lenguaje

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

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

Seminario de introducción a Bison

Las Etapas de la Compilación

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Temas. Objetivo. Analizador Sintáctico: funciones y tipos. Analizador Sintáctico Descendente. Analizador Sintáctico Ascendente

ANÁLISIS SINTÁCTICO I GRAMÁTICAS

Procesadores de Lenguajes. Análisis sintáctico. Analizadores descendentes

Análisis sintáctico 1

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013

ANÁLISIS SINTÁCTICO PREDICTIVO NO RECURSIVO

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator

Tipos de análisis deterministas. Análisis descendente. Tipos de análisis deterministas. Análisis ascendente. Análisis descendente

16 Análisis sintáctico I

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

Gramaticas Independientes del Contexto, ejemplos y ejercicios

CONJUNTOS REGULARES. Orlando Arboleda Molina. 19 de Octubre de Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle

ANÁLISIS LÉXICO EXPRESIONES REGULARES

Lenguajes y Compiladores Análisis Léxico

Gramaticas Independientes del Contexto, ejemplos y ejercicios *

Práctica 3 Introducción al Manejo de Bison

1. Acciones en Yacc. %{ #include <stdio.h> yyerror (char *s) { fprintf (stderr, %s\n, s) ; } %} %% : S \n {printf ( Correcto\n );} ; : ( S ) S

Expresiones Regulares y Gramáticas Regulares

Compiladores: Análisis Léxico. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V.

INTRODUCCIÓN AL ANÁLISIS ASCENDENTE. V id asig num. La siguiente figura muestra la tabla de análisis SLR de la gramática anterior:

Se pueden agrupar las reglas que tienen la misma parte izquierda:

Introducción TEORÍA DE LA COMPUTACIÓN INTRODUCCIÓN. Lógica

Tema 8: Teorema de Herbrand. Tableros en lógica de primer orden

Lex (flex,... ) Generación de analizador léxico p.1

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática

Introducción a la lingüística computacional

Tema 8: Teorema de Herbrand. Tableros en lógica de primer orden

El proceso del Análisis Léxico

PRÁCTICAS DE PROCESADORES DEL LENGUAJE CURSO 2008/2009

Lenguajes independientes de contexto o incontextuales

ECUACIONES. Las letras representan números y se llaman incógnitas.

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

Diseño de Compiladores I. Estructura General de un Compilador

5. Propiedades de los Lenguajes Recursivamente Enumerables y de los Lenguajes Recursivos.

Transcripción:

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

Ejemplo de Autómata LR(0) Expresiones muy sencillas %% E : E + T^{1} T^{2}; T : T * F^{3} F^{4}; F : ( E )^{5} id^{6}; Los items se representan solamente por el corazón del item.

Tabla SLR(1) state id + * ( ) $ E T F 0 s:5 s:4 g:1 g:2 g:3 1 s:6 acc 2 r:2 s:7 r:2 r:2 3 r:4 r:4 r:4 r:4 4 s:5 s:4 g:8 g:2 g:3 5 r:6 r:6 r:6 r:6 6 s:5 s:4 g:9 g:3 7 s:5 s:4 g:10 8 s:6 s:11 9 r:1 s:7 r:1 r:1 10 r:3 r:3 r:3 r:3 11 r:5 r:5 r:5 r:5

Diferencias entre LR(0) y SLR(1) Los pasos a seguir para generar una tabla SLR(1): Calcular el autómata LR(0). Añadir todas las acciones de desplazar para las transiciones del autómata. Colocaremos la reducción correspondiente cuando el símbolo que este en la cinta este en el FOLLOW de la variable por la que reducimos. El símbolo en la cinta se reutiliza despúes de la reducción.

Límites del Análisis SLR Hay que ir un poco lejos pero se llega Un ejemplo un tanto artificial: Formato inhabitual de declaraciones de identificadores. Forman listas de variables, o bien son un nombre de tipo. En este ejemplo un tipo es la palabra reservada MATRIZ seguida de las dimensiones, que son números. Permitimos varias maneras de declarar tipos y variables. %% decl : VARIABLES listavar MATRIZ dimensiones listavar DOSPUNTOS MATRIZ dimensiones IDENT MATRIZ dimensiones VARIABLES IDENT DOSPUNTOS listavar ; listavar : IDENT listavar IDENT ; dimensiones : NUM dimensiones NUM ;

Comparamos el analizador LR(0) y el SLR (I) Construyendo algunos de los estados Empezamos escribiendo algunas declaraciones aceptadas por la gramática y otras que no lo sean. Abreviamos los tokens a una sola letra para no tardar tanto. Luego calculamos FOLLOW. Ahora calculamos una parte del autómata LR(0): Seguiremos la numeración asignada por bison.

Comparamos el analizador LR(0) y el SLR (II) Identificamos dónde tiene un conflicto el analizador LR(0) Que ocurre con el analizador LR(0)? Se nos presentan varios conflictos shift-reduce: En el estado 2, puede reducir IDENT a listavar, o desplazar MATRIZ; En el estado 5, puede reducir IDENT a listavar, o desplazar DOSPUNTOS; En el estado 14, puede reducir decl o desplazar NUM; En el estado 17, puede reducir decl o desplazar IDENT. En el estado 18, puede reducir decl o desplazar NUM. En el estado 20, puede reducir decl o desplazar NUM. Los repasamos de abajo a arriba: SLR resuelve perfectamente los conflictos en los estados 14, 17, 18 y 21, porque el FOLLOW de decl sólo incluye el fin de datos.

Comparamos el analizador LR(0) y el SLR (III) Encontramos que el analizador SLR aún tiene dificultades Qué información tiene el analizador SLR en los estados 2 y 5? En el estado 2, puede reducir IDENT a listavar, o desplazar MATRIZ; pero MATRIZ está en el FOLLOW de listavar. En el estado 5, puede reducir IDENT a listavar, o desplazar DOSPUNTOS; pero DOSPUNTOS está en el FOLLOW de listavar. Los conflictos de los estados 2 y 5 no se pueden resolver mediante análisis SLR. Sin embargo, bison los resuelve sin ningún tipo de queja. Cómo lo hace? Antes: Cómo lo haríamos nosotros?

Análisis LR canónico Acarreamos anotada la parte de FOLLOW que nos importa El proceso será similar a SLR. La diferencia será que mantendremos más información en los ítems: qué símbolo no terminal estamos buscando, por qué punto vamos de la parte derecha de la regla, y qué símbolo terminal esperamos ver a continuación para reducir. Así pues, los ítems LR(1) traerán consigo la parte relevante del FOLLOW; esa parte se denomina el look-ahead del ítem. Por ejemplo, tendremos un ítem LR(1): [decl V listavar M dim, $] y pasaremos (con una λ-transición) de [decl V listavar M dim, $] a [listavar I, M].

El Autómata LR(1) Con el que se construyen las tablas de análisis LR canónico A base de ítems LR(1). Un ítem LR(1) es un par formado por un ítem LR(0) y un token; éste último se denomina look-ahead del ítem. Estados del autómata indeterminista: los ítems LR(1). Transiciones: como en el autómata indeterminista LR(0): Transición con un símbolo a la vez que el punto avanza el mismo símbolo; los look-ahead simplemente se conservan: [A α X β, a], con X, vamos a [A α X β, a]. Por palabra vacía cuando el punto está delante de un símbolo no terminal; de [A α B β, a] a [B γ, b]: los look-ahead b se obtienen como el FIRST de lo que viene a continuación, o heredando el look-ahead si el símbolo no terminal está al final de la parte derecha de la regla (β = λ); o, lo que es lo mismo, FIRST(βa), generando tantas λ-transiciones como elementos tenga este conjunto. Después se determiniza como siempre.

Ejemplo Completo de Analizador LR Canónico (I) Con otra gramática minúscula %token A B C %% comp : A igual A A dist B B dist A B igual B ; igual : C ; dist: C ;

Ejemplo Completo de Analizador LR Canónico (II) Con una gramática minúscula Tareas: 1. Encontramos todas las entradas generadas, 2. identificamos el árbol de análisis sintáctico de cada una, 3. calculamos el FOLLOW de comp, de igual y de dist, 4. calculamos todos los estados LR(1) y 5. construimos la tabla de análisis LR canónico; 6. luego calculamos también los estados LR(0) y 7. comparamos el analizador LR canónico con el analizador SLR, el cual vemos que tiene un par de conflictos reduce-reduce que no aparecen en el analizador LR canónico.