Compiladores e intérpretes Análisis Sintáctico III

Slides:



Advertisements
Presentaciones similares
ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico.
Advertisements

ANALIZADOR SINTACTICO
Ejemplo Práctico de un Compilador Pequeño
Análisis Sintáctico Ascendente
Análisis Sintáctico Capítulo 4.
Análisis Sintáctico Predictivo No Recursivo
Análisis Sintáctico Descendente
INSTITUTO TECNOLÓGICO DE MINATITLÁN
Filminas Segunda semana
Filminas Octava Semana CI-1322 Autómatas y Compiladores Elaborado por: Sergio Pastrana Espinoza A33888.
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Compiladores e intérpretes Análisis Sintáctico VI
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Analizador Sintáctico
Gramáticas Libres de Contexto
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Procesadores de Lenguaje
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 3. Análisis Sintáctico
Analizador Léxico. 4 scanners:
Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007
ANALISIS SINTACTICO DESCENDENTE
Tema 4. Gramáticas y Análisis Sintáctico PARSER
Tema 3. Optimización de Código
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Teoría de lenguajes y compiladores
Analizador Sintáctico Descendente
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
Programación de sistemas
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Instituto Tecnologico de Durango Programacion de Sistemas II
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
Lenguajes Libres de Contexto
Teoría de lenguajes y compiladores
M.C. Juan Carlos Olivares Rojas
Traducción Dirigida por la Sintáxis
ANALISIS SINTACTICO Parte I
Estructura de Datos y Algoritmos
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Clasificación de Gramáticas y Manejo de Errores
ANALISIS SINTACTICO ASCENDENTE
Teoría de lenguajes y compiladores
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Introducción al Análisis Sintáctico
Compiladores Parsers Parsers Predictivos, LL(0), LL(k), Parsers shift-reduce, Construcción de un Parser LL(0)
Programación de Sistemas
Compiladores e intérpretes
Análisis Léxico Área Software de Base.
Analizadores LR(1) y LALR()
Unidad 1. Introducción a los Compiladores.
UNIVERSIDAD LATINA (UNILA)
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Teoría de lenguajes y compiladores
Autómatas y Compiladores Novena Semana. Ricardo Vargas Del Valle A35469.
Teoría de lenguajes y compiladores
El proceso de compilación
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Semana #8 Kathryn Jones Pérez A Analizadores sintácticos LR Existen tres técnicas para construir tablas de análisis sintáctico LR para una gramática.
Programación de Sistemas
Autómatas y Compiladores. Segunda Semana. Ricardo Vargas Del Valle A35469.
Autómatas y Compiladores Semana 13. Ricardo Vargas Del Valle A35469.
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACION SUPERIOR UNIVERSIDAD VALLE DEL MOMBOY CARVAJAL EDO. TRUJILLO ENERO 2014.
Sintaxis y Semántica. S.Takahashi Fases en el proceso de análisis de lenguajes Lexer Parser caracteres tokensrespuesta.
Transcripción de la presentación:

Compiladores e intérpretes Análisis Sintáctico III Profesor: Eridan Otto

Análisis Sintáctico IV Parser Predictivo no recursivo Ambiguedad Recuperación de errores Parsers Bottom Up

Compiladores e intérpretes Análisis sintáctico IV : Ambiguedad Ejercicio, dada la siguiente gramática construya su tabla de análisis predictivo, para la gramática siguiente. Detecta usted algún problema: sent::= IF expr THEN sentA1 | REPEAT sentA2|a A1::=ELSE sent | A2::=UNTIL expr| FOREVER expr::=b Pruebe con REPEAT a UNTIL b e IF e THEN REPEAT a FOREVER ELSE a Primer paso, determinar el conjunto de PRIMEROS: PRIMERO(sent)={IF,REPEAT,a} PRIMERO(A1)={ELSE, } PRIMERO(A2)={UNTIL,FOREVER} PRIMERO(expr)={b} Segundo Paso, determinar los conjuntos SIGUIENTE SIGUIENTE(sent)={$,ELSE,UNTIL,FOREVER} SIGUIENTE(A1)={$,ELSE,UNTIL,FOREVER}

Compiladores e intérpretes Análisis sintáctico IV : Ambiguedad SIGUIENTE(A2)={$,ELSE,UNTIL,FOREVER} SIGUIENTE(expr)={$,ELSE,UNTIL,FOREVER,THEN} Tercer Paso, construir la tabla: IF THEN ELSE REPEAT UNTIL FOREVER a b $ Sent A1 A2 expr IF expr THEN sentA1 REPEAT sentA2 a ELSE sent UNTIL expr FOREVER b Aquí surge un problema de ambigüedad en la gramática que se manifiesta en dos elecciones de producción a usar cuando se encuentre A1 y ELSE. La gramática no es LL(1). Aún así se puede tomar la decisión de dejar una producción. ELSE sent.

Compiladores e intérpretes Análisis sintáctico IV : Ambiguedad Analizando REPEAT a UNTIL b Pila Entrada Producción $Sent REPEAT a UNTIL b$ REPEAT sentA2 $A2sentREPEAT REPEAT a UNTIL b$ $A2sent a UNTIL b$ a $A2a a UNTIL b$ $A2 UNTIL b$ UNTIL expr $ expr UNTIL UNTIL b$ b $ expr b$ $ b b$ $ $ Analizando IF e THEN REPEAT a FOREVER ELSE a Ejercicio...

Compiladores e intérpretes Análisis sintáctico IV : Recuperación de errores Un error se puede producir cuando: Símbolo terminal en el tope del stack, no coincide con el símbolo de preanálisis. Cuando se presenta un noterminal A en el tope del stack, con un símbolo a en el preanálisis, al ir a la tabla M[A,a] es vacío o error. La idea de recuperación de errores en modo pánicoestá basada en sacar símbolos de la entrada hasta que un token de un conjunto de tokens sincronizador aparezca. La efectividad de la recuperación dependerá de la elección del conjunto de sincronización. Idealmente, este conjunto debiera ser elegido de manera que el parser se recupere de errores probables de ocurrir en la práctica.

Compiladores e intérpretes Análisis sintáctico IV : Recuperación de errores Algunas heurísticas Como primera regla si no coincide un noterminal A del stack con un token, analizar si el próximo token está en el PRIMERO(A), si es así,saltar el símbolo que no coincide. Si no se da el primer caso, usar este método más general que consiste en asociar en la tabla, la entrada sync, de sincronización a todos los símbolos en SIGUIENTE(A). Luego si se da el problema antes citado, saltar los tokens hasa que aparezca uno en el SIGUENTE(A), luego hacer pop de A del stack. Probablemente el análisis pueda continuar. Si un terminal en el tope del stack, una idea simple es pop del terminal y tratar de continuar. Implementación de la recuperación. A parte de los símbolos sync, pueden asociarse an la tabla punteros a rutinas de manejo de error que lleven acabo estas heurísticas, cambiando, insertando o borrando símbolos y enviando los mensajes de error correspondientes. Puede hacer pop del stack. Cuidar de no caer en loops, evitar agregar símbolos al stack.

Compiladores e intérpretes Análisis sintáctico IV : Recuperación de errores Ejemplo, para la gramatica de expresiones: SIGUIENTE(E)={$,)} SIGUIENTE(T)={$,+,)} SIGUIENTE(F)={$,*,+,)} SIGUIENTE(E’)={$, ) } SIGUIENTE(T’)={$,+,) } Lo que produce una tabla:

Compiladores e intérpretes Análisis sintáctico IV : Recuperación de errores Usando la tabla anterior analice la entrada: )id*+id Pila Entrada Acción de recuperación $E )id*+id$ Error, Revisa Id est á en FIRST(E), salta ) $E id*+id $ id*+id $ $E’T id*+id $ $E’T’F id*+id $ $E’T’id *+id $ $E’T’ *+id $ $E’T’F* +id $ Error, synch en tabla, POP $E’T’F +id $ $E’T’ +id $ $E’ +id $ $E’T+ id $ $E’T id $ $E’T’F id $ $E’T’id $ $E’T’ $ $E’ $ $

Compiladores e intérpretes Análisis sintáctico IV : Análisis ascendente Análisis por desplazamiento y reducción Simple de stack Por precedencia de operadores LR(1), (método mucho más general) Este tipo de parser construte un árbol sintáctico, para una cadena de entrada que comienza por las hojas y avanza hacia la raiz. Equivalente a reducir una cadena de tokens de entrada w al símbolo inicial de la gramática. En cada paso de reducción se sustituye una subcadena que concuerde con el lado derecho de una producción por el símbolo del lado izquierdo. Se traza una derivación por la derecha en el sentido inverso. Ejemplo: S::= aABe Análizando sintaxis : abbcde A::=Abc|b aBbcde B::=d aAde aABe S