La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Teoría de lenguajes y compiladores

Presentaciones similares


Presentación del tema: "Teoría de lenguajes y compiladores"— Transcripción de la presentación:

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

2 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.

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

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

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

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

7 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)

8 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

9 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:

10 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

11 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.

12 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

13 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

14 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.

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

16 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

17 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·> $

18 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

19 Investigar sobre la implementación de analizadores LR

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


Descargar ppt "Teoría de lenguajes y compiladores"

Presentaciones similares


Anuncios Google