Teoría de lenguajes y compiladores

Slides:



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

Ejemplo Práctico de un Compilador Pequeño
Análisis Sintáctico Ascendente
Análisis Sintáctico Predictivo No Recursivo
INSTITUTO TECNOLÓGICO DE MINATITLÁN
Filminas Segunda semana
Clasificación de los compiladores
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
Compiladores e intérpretes Análisis Sintáctico III
Compiladores e intérpretes Análisis Sintáctico VI
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.
Teoría de Autómatas y Compiladores
ESTRUCTURA DE DATOS Unidad 04 Árboles BINARIOS.
Procesadores de Lenguaje
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 3. Análisis Sintáctico
Teoría de lenguajes y compiladores
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007
Traducción dirigida por la Sintaxis
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
Tema 4. Gramáticas y Análisis Sintáctico PARSER
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
Tema 2 Lenguajes Formales.
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
Programación de sistemas
Análisis sintáctico LR: SLR (LR simple)
Instituto Tecnologico de Durango Programacion de Sistemas II
Teoría de lenguajes y compiladores
Autómatas de Pila Teoría del Autómata.
ANALISIS SINTACTICO Parte I
Clasificación de Gramáticas y Manejo de Errores
FORMA INTERNA DE REPRESENTAR
ANALISIS SINTACTICO ASCENDENTE
Teoría de lenguajes y compiladores
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
Teoría de lenguajes y compiladores Analizadores lexicográficos
Compiladores e intérpretes Análisis Sintáctico III
Programación de Sistemas
Compiladores e intérpretes
Teoría de lenguajes y compiladores
Análisis Léxico Área Software de Base.
INFORMATICA VII (Programación e implementación de sistemas)
Unidad 1. Introducción a los Compiladores.
UNIVERSIDAD LATINA (UNILA)
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Autómatas y Compiladores Novena Semana. Ricardo Vargas Del Valle A35469.
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
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.
República Bolivariana de Venezuela Ministerio del Poder Popular para la Educación Superior Universidad Valle del Momboy Carvajal, Trujillo Alumnas Luzmila.
Transcripción de la presentación:

Teoría de lenguajes y compiladores Unidad II Analizador Sintáctico Semana 9 Análisis Sintáctico Ascendente

Objetivo General El alumno al finalizar el curso podrá desarrollar aplicaciones que le permitan determinar si una estructura gramatical corresponde a una sentencia valida en la definición de un lenguaje en particular, teniendo en cuenta el contexto sintáctico y semántico. Así mismo estará capacitado para proponer nuevas formas estructurales en la definición de lenguajes de programación.

Objetivos Específicos Diseñar un analizador sintáctico.

Objetivos Específicos Aplicar métodos de desarrollo ascendente para la construcción de analizadores sintácticos

Objetivos Instruccionales Aplicar el método ascendente para la creación de analizadores sintácticos.

Analizador de precedencia de operador Contenidos Generalidades Analizador de precedencia de operador Analizadores LR

TIPOS DE ANALIZADORES SINTACTICOS Generalidades Descendentes (Top-Down): Parten del axioma y aplican las reglas de la gramática hasta llegar a secuencia de símbolos terminales (tokens): Analizadores LL(1) Analizadores recursivos Ascendentes (Bottom-Up): Parten de las hojas (conjunto de tokens) para llegar a la raíz (axioma de la gramática): Analizadores de Precedencia de Operador Analizadores LR(1)

ANÁLISIS ASCENDENTE Generalidades Estilo general: Análisis sintáctico por desplazamiento y reducción Por precedencia de operadores (gramáticas muy específicas) LR (generadores automáticos de AS), donde L significa que la entrada será leída de izquierda a derecha y R derivaciones por la derecha. Se construye el árbol de AS para una cadena w a partir de las hojas y se avanza hacia la raíz Proceso: reducir w al símbolo inicial de la gramática Cada reducción sustituye una subcadena (asidero o mango) que concuerde con el lado derecho de un regla de producción por el símbolo no terminal del lado izquierdo de esa regla

Gramáticas de operador Analizador de precedencia de operador Gramáticas de operador Para una pequeña clase de gramáticas se puede construir con facilidad, eficientes analizadores sintácticos por desplazamiento y reducción. Definición: Una Gramática es de operador cuando: No tiene reglas de producción del tipo: A  λ No tiene reglas con dos NO TERMINALES adyacentes: A  α· B · C · β, donde A, B, C Є N Ejemplos de gramáticas:

Gramáticas de operador Analizador de precedencia de operador Gramáticas de operador Inconvenientes: Es difícil de manejar componentes léxicos con dos precedencias distintas, como el signo menos (unario y binario) Solo una pequeña clase de gramáticas puede analizarse Ventajas: Sencillez Se pueden establecer relaciones de precedencia (* precede a +) Se aplican con otros analizadores para la parte que no sean de operador

Análisis por Precedencia de Operador Analizador de precedencia de operador Análisis por Precedencia de Operador El análisis recorre la entrada de izquierda a derecha y se encuentra en dos posibles estados: Esperando un operador Esperando un operando El análisis mantiene dos pilas: Pila de operadores Pila de operandos Cuando un operador en la cima de su pila es de mas prioridad que el siguiente de la pila, entonces el pivote consiste en ese operador junto a los dos operandos situados mas arriba de la pila de operandos.

Ejemplo de análisis simple Analizador de precedencia de operador Ejemplo de análisis simple Entrada: Id · + · id · * · id Gramática: E ::= E · +· E | E · *· E |(· E· ) |id La gramática es ambigua, pero este tipo de análisis proporciona una única derivación Entrada Pila de Operadores Pila de Operandos Ida · + · idb · * · idc Ø + · idb · * · idc Ida idb · * · idc + * · idc Idb Ida idc * + Idc Idb Ida

Análisis por Precedencias Analizador de precedencia de operador Análisis por Precedencias Relaciones de precedencia: a <· b , si a tiene menos precedencia que b a b , si a tiene la misma precedencia que b a · > b , si a tiene mayor precedencia que b Ejemplo: + <· * , ( ) , /· > - Algoritmo: Sustituir todos los símbolos no terminales por un único símbolo Insertar $ al principio y al final de la cadena de entrada Insertar las relaciones de precedencia en la cadena de entrada Mientras (entrada < > $S$) hacer 4,1 Recorrer entrada desde la izquierda hasta encontrar · > 4.2 Buscar a la izquierda, a partir de ese punto , el primer <· 4.3 Reducir el pivote que se encuentra en el medio mediante la aplicación inversa de una de las reglas de derivación de la gramática cuya parte derecha coincida con dicho pivote 4.4 Reinsertar las relaciones de precedencia, ignorando los no terminales

Analizador de precedencia de operador Ejemplo de análisis Cadena a evaluar: (id+id) Entrada = $· (· id · + · id · ) · $ Gramática: E ::= E · +· E | E · *· E |(· E· ) |id Tabla de Precedencia: Análisis: Entrada Derivación $<·(<· id· > + <· id· > )· > $ $·(· E· +· id· )· $ $<·(<· E + <· id· > )· > $ $·(· E· +· E· )· $ $<·(<· E + E· > )· > $ $·(· E· )· $ $<·( E )· > $ $· E· $ Si en el transcurso del reconocimiento se considera una pareja de símbolos para la que no esta definida ninguna relación precedencia se deduce entonces que ha sido detectado un error sintáctico en la cadena.

Analizador de precedencia de operador ¿Cómo determinar las relaciones de precedencia entre un par de terminales?

Definiciones de Cabecera y Ultimo Analizador de precedencia de operador Definiciones de Cabecera y Ultimo Definiciones: Cabecera(A) = {x/ (A* α· x· β) л (x Є ƩT) л (A Є ƩN) л (α Є Ʃ*N) л (β Є Ʃ*) } Ultimo(A) = {x/ (A* α· x· ß) л (x Є ƩT) л (A Є ƩN) л (α Є Ʃ*) л (β Є Ʃ*N) } Ejemplo: E ::= E · + · T | T T ::= T · * · F | F F ::= (· E · ) | Id Propiedad: V (A::= α · B · a · C · β) Є P, a Є ƩT, A,B,C Є ƩN, α,β Є Ʃ*, a siempre aparece en un nivel superior a los símbolos terminales de Cabecera (C) y Ultimo(B) en el árbol de derivación. ƩN Cabecera Ultimo E + , * , ( , Id + , *, ), Id T * , ( , Id * , ) , Id F ( , Id ) , Id

Construcción de la Tabla de Precedencias Analizador de precedencia de operador Reglas: (A::= α · B · a · C · ß) Є P, a Є ƩT, A,B,C Є ƩN, α,ß Є Ʃ* V c Є Cabecera(C), a <· c V b Є Ultimo(B), b ·> a V (A::= α · a · β · b · ϒ) Є P, a ,b Є ƩT, a b, β Є Ʃ* , ϒ Ʃ* Relacionar : $ <· a , V a Є cabecera(S), y b ·> $ , V b Є Ultimo(S), donde S es el axioma de la gramática Si existe mas de una relación de precedencia entre dos símbolos terminales, no es una gramática de precedencia Algoritmo: V (A::= α · B · a · C · ß) Є P hacer Calcular Cabecera(C) Calcular Ultimo(B) Calcular las precedencias usando las reglas 1, 2 y 3 V a Є Cabecera(S) hacer $<· a V b Є Ultimo(S) hacer b·> $

Calculo de la Tabla de Precedencias Analizador de precedencia de operador Gramática: Calculo de Cabecera y Ultimo: E ::= E · + · T | T T ::= T · * · F | F F ::= (· E · ) | Id Calculo de la tabla ƩN Cabecera Ultimo E + , * , ( , Id + , *, ), Id T * , ( , Id * , ) , Id F ( , Id ) , Id Regla Precedencias (Regla1) Precedencias(Regla2) E ::= E + T + <· * , ( , Id + , * , ), Id ·> + T ::= T * F * <· (, Id *, ), Id ·> * ( id * + ) $ ·> Id <·

Investigar sobre la implementación de analizadores LR

Teoría de lenguajes y compiladores Unidad II Analizador Sintáctico Semana 9 Análisis Sintáctico Ascendente