ANÁLISIS SINTÁCTICO. Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática Generar el árbol sintáctico

Tamaño: px
Comenzar la demostración a partir de la página:

Download "ANÁLISIS SINTÁCTICO. Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática Generar el árbol sintáctico"

Transcripción

1 Cadena de tokens Árbol Sintáctico ANÁLISIS SINTÁCTICO 1 Análisis Sintáctico 2 Funciones Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática Generar el árbol sintáctico Ventajas de utilizar gramáticas Son especificaciones sintácticas y precisas de lenguajes Se puede generar automáticamente un analizador El proceso de construcción puede llevar a descubrir ambigüedades Imparte estructura al lenguaje de programación, siendo más fácil generar código y detectar errores Es más fácil ampliar y modificar el lenguaje 1

2 Analizador Sintáctico, Tipos 3 Tres tipos generales de analizadores sintácticos: Métodos Universales: Cocke-Younger-Kasami y Earley Sirven para cualquier gramática Muy ineficientes Descendentes (top-down) Construyen el árbol de análisis sintáctico desde arriba (raíz, axioma) hasta abajo (hojas, terminales) Analizadores Descendentes Recursivos Analizadores LL(1) con tabla Ascendentes (bottom-up) Construyen el árbol de análisis sintáctico desde abajo hacia arriba Analizadores de Precedencia de Operador Analizadores LR(1) Analizador Sintáctico 4 Tanto para el análisis descendente como para el ascendente: La entrada se examina de izquierda a derecha, un símbolo cada vez Trabajan con subclases de gramáticas En general las gramáticas serán LL y LR LR(k) LL(k) En la práctica solo se utilizan LR(1) y LL(1) Muchos compiladores se llaman parser-driven debido a que el analizador sintáctico es el que llama al léxico Existen herramientas para generar automáticamente analizadores sintácticos (YACC, Bison) 2

3 Análisis Sintáctico Descendente 5 Algoritmo 1. Poner el axioma como raíz del árbol de derivación 2. Hasta que solo haya símbolos terminales, derivar más a la izquierda Ejemplo Entrada: Id.*.Id.+.Id Gramática: Expresión::=Expresión.*.Término Expresión.+.Término Término Término ::= Id Número Derivación: Expresión Expresión.+.Término Expresión.*.Término.+.Término Término.*.Término.+.Término Id.*.Término.+.Término Id.*.Id.+.Término Id.*.Id.+.Id Análisis Sintáctico Ascendente 6 Definición: Pivote Secuencia más larga de símbolos ( T y N ) en la parte más izquierda de la entrada que se puede encontrar en la parte derecha de una producción y tal que todos los símbolos a su derecha son terminales Ejemplo: Si entrada es: Expresión.*.Término.+.Id el pivote es: Expresión.*.Término Algoritmo 1. Empezar con la cadena de entrada 2. Intentar llegar hasta el axioma, encontrando el pivote y reduciéndolo con la producción correspondiente Ejemplo Id.*.Id.+.Id Término.*.Id.+.Id Expresión.*.Id.+.Id Expresión.*.Término.+.Id Expresión.+.Id Expresión.+.Término Expresión 3

4 7 Analizadores Sintácticos, Problemas Descendentes Mas de una opción: A::= Retroceso Analizar los siguientes elementos de la entrada Recursividad izquierda Eliminación de la recursividad Ambigüedad Factorización por la izquierda Ascendentes Más de una opción: A::= y es el pivote Otros Problemas semánticos Análisis Sintáctico Predictivo 8 No necesita realizar retroceso para analizar bien las sentencias del lenguaje Sólo con ver el siguiente carácter de la entrada puede decidir cuál va a ser la siguiente producción a emplear Condiciones Diseñar bien la gramática Eliminar la recursividad izquierda Factorizar por la izquierda No está asegurado el tener una gramática predictiva Las gramáticas son difíciles de leer Para las partes de las gramáticas que no son predictivas se pueden utilizar otros analizadores 4

5 Análisis Sintáctico Predictivo 9 Árbol sintáctico Ejemplo: Id.*.Id.+.Id Expresión Expresión + Término Expresión * Término Id Término Id Id 10 Análisis Sintáctico Predictivo: Descendente Recursivo Se ejecuta un conjunto de procedimientos recursivos para procesar la entrada A cada NO Terminal de una gramática se le asocia un procedimiento Decide la producción que utilizará analizando el símbolo de preanálisis, si está en PRIMERO() entonces se usa la producción con lado derecho si no está en ningún PRIMERO entonces se usa una producción Usa una producción imitando al lado derecho no terminal da como resultado una llamada a otro procedimiento terminal (que coincide con el símbolo de preanálisis) produce otra lectura de otro token. Si el token no coincide entonces Error La secuencia de procedimientos llamados para procesar la entrada define implícitamente un árbol de análisis sintáctico 5

6 11 Análisis Sintáctico Predictivo: Descendente Recursivo Ejemplo: S if B then S write B i := B B i = i i <> i true false Procedure S; begin if car= i then begin scan; if car = asig then scan else error; B end elseif car= if then begin scan; B; if car= then scan else error; S; end elseif car=write then begin scan; B end else error end; Procedure B; begin if car= i then begin scan; if car in [igual, noigual] then scan else error; if car = i then scan else error; end elseif car = in [true, false] then scan else error end; 12 Análisis Sintáctico Predictivo, DEFINICIONES: PRIMERO Si es una cadena de símbolos gramaticales, PRIMERO() es el conjunto de terminales que inician las cadenas derivadas de. PRIMERO()={x ( * x.), (x T {}), ( * )} Conjunto PRIMERO(X) para todos los símbolos gramaticales X 1. Repetir hasta que no se puedan añadir más terminales o a ningún conjunto PRIMERO 2. Si X T PRIMERO(X) es { X } 3. Si X añadir a PRIMERO(X) 4. Si X N y X Y 1 Y 2...Y K Y a PRIMERO(X) si a PRIMERO(Y i ) y PRIMERO(Y 1 ), PRIMERO(Y 2 ),..., PRIMERO(Y i-1 ) Si Y 1 deriva a se añade PRIMERO(Y 2 ) Si Y 1 no deriva a no se añade más a PRIMERO(X) 6

7 13 Análisis Sintáctico Predictivo, DEFINICIONES: PRIMERO PRIMERO(), Ejemplo: E ::= T.E E ::= +.T.E T ::= F.T T ::= *.F.T F ::= (.E.) Id PRIMERO(E) = { (, Id } PRIMERO(T.*.Id) = { (, Id } PRIMERO(T) = { (, Id } PRIMERO(Id.+.Id) = { Id } PRIMERO(F) = { (, Id } PRIMERO(Id) = { Id } PRIMERO(E ) = { +, } PRIMERO(T ) = { *, } 14 Análisis Sintáctico Predictivo, DEFINICIONES: SIGUIENTE Conjunto SIGUIENTE(A) SIGUIENTE(A)={x (S * A ), (A N ), ( * ), ( + ), (xprimero()-{})} Conjunto de terminales que pueden aparecer inmediatamente a la derecha de A en alguna forma sentencial, si A es el último símbolo entonces se incluye el separador $ Algoritmo 1. SIGUIENTE(S)={$} 2. La regla AB SIGUIENTE(B) = (PRIMERO()-{}) SIGUIENTE(B) 3. La regla AB =, * ( PRIMERO()) SIGUIENTE(B) = SIGUIENTE(A) SIGUIENTE(B) 4. Repetir hasta que no cambie ningún conjunto SIGUIENTE 7

8 15 Análisis Sintáctico Predictivo, DEFINICIONES: SIGUIENTE SIGUIENTE(A), Ejemplo: E ::= T.E E ::= +.T.E T ::= F.T T ::= *.F.T F ::= (.E.) Id N SIGUIENTE E $, ) E $, ) F $, *, ), + T $, +, ) T $, +, ) 16 Análisis Sintáctico Predictivo: Condiciones Pregunta: Que debe cumplir una gramática para que pueda ser reconocida sin retroceso, con solo mirar el siguiente elemento de la entrada, de forma descendente? Respuesta: Si A::= PRIMERO() PRIMERO() =. para ningún terminal a tanto y derivan a la vez cadenas que comiencen con a No puede ocurrir que * y * Si *, entonces no deriva ninguna cadena que comience con un terminal en SIGUIENTE(A) Condición LL(1) 8

9 17 Análisis Sintáctico Predictivo: Condiciones Condición LL(1) No puede haber conflictos PRIMERO/PRIMERO N N, el conjunto PRIMERO de todas sus alternativas debe ser disjunto No puede haber múltiples alternativas nulas N N, solo pueden tener una producción N No puede haber conflictos PRIMERO/SIGUIENTE N N, con una alternativa nula, SIGUIENTE(N) debe ser disjunto de los conjuntos PRIMERO de todas sus alternativas No puede haber entradas con definiciones múltiples en la tabla de análisis 18 Análisis Sintáctico Predictivo: Tabla de Análisis Sintáctico Funcionamiento Sea A con a T aprimero(). El analizador sintáctico expandirá A por cuando el símbolo actual de la entrada sea a Algoritmo 1) ForAll (A::= ) do a) ForAll a PRIMERO() do TABLA[A,a]= b) Si PRIMERO() Entonces ForAll b SIGUIENTE(A) do TABLA[A,b]= c) Si PRIMERO() $ SIGUIENTE(A) Entonces do TABLA[A,$]= 2) ForAll A N y c T do a) If TABLA[A,c]= Then TABLA[A,c]= error 9

10 19 Análisis Sintáctico Predictivo: Tabla de Análisis Sintáctico Ejemplo E ::= T.E E ::= +.T.E T ::= F.T T ::= *.F.T F ::= (.E.) Id Id + * ( ) $ E T.E T.E E +.T.E T F.T F.T T *.F.T F Id (.E.) 20 Análisis Sintáctico Predictivo No Recursivo; LL(1) Modelo de analizador sintáctico predictivo no recursivo ENTRADA a + b $ PILA X Y Z $ Programa de Análisis Sintáctico Predictivo Tabla de Análisis Sintáctico M SALIDA 10

11 21 Análisis Sintáctico Predictivo No Recursivo; LL(1) Los símbolos de la entrada actual a y cima de la pila X determinan la acción del analizador Hay tres posibilidades: X=a=$, el analizador se detiene y anuncia el éxito del análisis X=a$, el analizador saca X de la pila y mueve el apuntador de la entrada al siguiente símbolo de entrada X N, el programa consulta la entrada M[X,a] Si M[X,a]=UVW, se sustituye la X de la pila por WVU (U queda como cima de la pila) Si M[X,a]= error, se llama a la rutina de recuperación de error Análisis Sintáctico LL(1) 22 Algoritmo: pila =$; meter$ al final de la entrada; a:= GetToken; Push S; Repeat If X T or X=$ then If X=a then Pop; a:= GetToken; Else error; Else If M[X,a]=XY 1 Y 2..Y k then Pop; Push Y k,y k-1,...,y 1 Emitir la producción X else error(); until X=$ If X=$ and a=$ then Aceptar; else error(); 11

12 Análisis Sintáctico LL(1) 23 Ejemplo: Pila Entrada Producción $ E Id * Id + Id $ E::= T E $ E T Id * Id + Id $ T::= F T $ E T F Id * Id + Id $ F::= Id $ E T Id Id * Id + Id $ $ E T * Id + Id $ T ::= * F T $ E T F * * Id + Id $ $ E T F Id + Id $ F::= Id $ E T Id Id + Id $ $ E T + Id $ T ::= $ E + Id $ E ::= + T E $ E T + + Id $ $ E T Id $ T::= F T $ E T F Id $ F::= Id $ E T Id Id $ $ E T $ T ::= $ E $ E ::= $ $ Análisis Sintáctico Ascendente 24 Análisis por desplazamiento y reducción Por precedencia de operadores LR Construir un árbol de análisis sintáctico para una cadena de entrada que comienza por las hojas y avanza hacia la raíz. Reducir una cadena 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 sentido inverso 12

13 25 Análisis Sintáctico Ascendente: Gramática de Operadores Para una pequeña clase de gramáticas se puede construir con facilidad, a mano, eficientes analizadores sintácticos por desplazamiento y reducción Gramática de operadores No tiene reglas de producción del tipo A::= No tiene dos no terminales adyacentes A::= B C A,B,C N Ejemplo No es G. de operadores Si es G. de operadores EEAE (E) -E id A+ - * / EE+E E-E E*E E/E (E) -E id 26 Análisis Sintáctico Ascendente: Precedencia de Operador Inconvenientes Es difícil de manejar componentes léxicos con dos precedencias distintas, como el signo menos (unario y binario) No se puede tener la seguridad de que el analizador acepta exactamente el lenguaje deseado Sólo 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 son de operador 13

14 27 Análisis Sintáctico Ascendente: 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 más prioridad que el siguiente de la pila, entonces el pivote consiste en ese operador junto a los dos operandos situados más arriba de la pila de operandos 28 Análisis Sintáctico Ascendente: Precedencia de Operador 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 Id a + Id b * Id c + Id b * Id c Id a Id b * Id c + Id a * Id c + Id b Id a Id c *+ Id b Id a *+ Id c Id b Id a 14

15 29 Precedencia de Operador: Relaciones de Precedencia Se definen tres relaciones de precedencia disjuntas a< b si a tiene menos precedencia que b a=b si a tiene igual precedencia que b a >b si a tiene más precedencia que b 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 Recorrer entrada desde la izquierda hasta encontrar > Buscar a la izquierda, a partir de ese punto, el primer < Reducir el pivote que se encuentra en el medio Reinsertar las relaciones de precedencia, ignorando los no terminales 30 Precedencia de Operador: Ejemplo Entrada: $ ( Id + Id ) $ Gramática: E::= E + E E * E ( E ) Id Tabla de precedencia: ( Id * + ) $ ) > > > > Id > > > > * < < > > > > + < < < > > > ( < < < < = $ < < < < = Análisis Entrada Derivación $ < ( < Id > + < Id > ) >$ $ ( E + Id ) $ $ < ( < E + < Id > ) > $ $ ( E + E ) $ $ < ( < E + E > ) > $ $ ( E ) $ $ < ( E = ) > $ $ E $ 15

16 31 Obtención de las relaciones de precedencia x y sii existe: A::=...xBy... B{N } x < y sii existe: A::=...xB... C{N } B::=+Cy... x > y sii existe: A::=...By... C{N } B::=+...xC 32 Precedencia de Operador: Construir la Tabla de Precedencia Si el operador 1 tiene mayor precedencia que 2 entonces hacer 1 > 2 y 2 < 1 Si los operadores 1 y 2 son de igual precedencia (por ejemplo el mismo operador), entonces hacer: 1 > y 2 > 1 si son asociativos por la izquierda 1 < y 2 < 1 si son asociativos por la derecha Hacer < Id, Id >, < (, (<, ) >, >), >$, $< (=) $< ( $< Id (< ( Id >$ ) >$ (< Id Id >) ) >) 16

17 33 Precedencia de Operador: Construir la Tabla de Precedencia Definiciones: Cabecera(A) = { x (A * x ) (x T ) (A N ) ( N* ) ( * )} Último(A) = { x (A * x ) (x T ) (A N ) ( * ) ( N* )} Ejemplo: E::=E + E T T::=T * F F F::=( E ) Id Propiedad: Cabecera(E)={+, *, (, Id} Último(E)={+, *, ), Id} (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 Último(B) en el árbol de derivación 34 Precedencia de Operador: Construir la Tabla de Precedencia Reglas: (A::= B a C ) P, a T, A, B, C N,, * 1. c Cabecera(C), a < c 2. b Último(B), b > a 3. (A::= a b ) P, a, b T, a=b, * Si existe más de una relación de precedencia entre dos símbolos terminales, no es una gramática de precedencia Algoritmo ForAll (A::= B a C ) P do Calcular Cabecera(C) Calcular Último(B) Calcular las precedencias usando las reglas 1, 2 y 3 ForAll a Cabecera(S) do $ < a ForAll a Último(S) do a > $ 17

18 35 Precedencia de Operador: Construir la Tabla de Precedencia Gramática E::=E + E T T::=T * F F F::=( E ) Id Cabecera y Último Tabla N Cabecera Último E +, *, (, Id +, *, ), Id T *, (, Id *, ), Id F (, Id ), Id Regla Precedencias(R 2 ) Precedencias (R 1 ) E::=E+T +, *, ), Id > + + < *, (, Id E::=T+F *, ), Id > * * < (, Id 36 Precedencia de Operador: Operadores Unarios ( ) Manejo de Operadores Unarios ( ) Operador Unario que no es además Binario < > si tiene mayor precedencia que < si tiene menor precedencia que Operador Unario que además es Binario Mediante la tabla de precedencia no puede analizarse correctamente cadenas como: Id*-Id Solución: Utilizar el analizador léxico para devolver dos componentes léxicos distintos, recordando el componente léxico anterior debe distinguir uno de otro. Ejemplo: Es el menos unario si antes el componente léxico leído era un operador, un paréntesis izquierdo, una coma o un símbolo de asignación 18

19 37 Precedencia de Operador: Funciones de Precedencia La tabla de precedencia se puede simplificar, con el objetivo de ahorrar memoria y aumentar la velocidad de proceso, mediante dos funciones f y g Transforman los símbolos terminales en enteros Tienen que cumplir que a,b T si a < b, f(a) < g(b) si a = b, f(a) = g(b) si a > b, f(a) > g(b) Para encontrar la relación de precedencia entre a y b se realiza una comparación entre f(a) y g(b) No todas las relaciones de precedencia tienen funciones de precedencia 38 Precedencia de Operador: Funciones de Precedencia Construcción de las Funciones de Precedencia 1. Crear los símbolos f a y g a a T {$} 2. Se dividen los f a y g a en tantos grupos como sea posible: Si a=b entonces f a y g b están en el mismo grupo 3. Crear un grafo dirigido cuyos nodos son los grupos encontrados en el paso 2, los arcos se etiquetan: si a< b, g b f a si a >b, f a g b 4. Ciclos en el grafo: Respuesta SI, entonces no existen funciones de precedencia Respuesta NO, entonces f(a) y g(a) son los caminos más largos que comienzan en f a y g a 19

20 39 Precedencia de Operador: Funciones de Precedencia Ejemplo Id + * $ Id > > > + < > < > * < > > > $ < < < Cada símbolo está solo en un grupo g Id g * g + g $ f Id f * f + f $ 40 Precedencia de Operador: Funciones de Precedencia No hay ciclos, entonces existen las funciones de precedencia. Como las funciones de $ no tienen arcos entonces f($)=g($)=0 El camino más largo desde g + tiene longitud 1, entonces g(+)=1 El camino más largo desde g Id a f * a g * a f + a f $ por tanto g(id)=5 Id + * $ f g

21 Análisis Ascendente LR 41 LR(k): Left-to-right, rightmost derivation, ( *, * T) k símbolos de entrada son necesarios para tomar las decisiones de análisis sintáctico Ventajas Es el método de análisis por desplazamiento y reducción sin retroceso más general, a pesar de esto es igual de eficiente La clase de gramáticas que pueden analizarse es un supraconjunto de la clase de gramáticas que pueden analizarse con analizadores sintácticos predictivos Detectan los errores sintácticos tan pronto como es posible en un examen de izquierda a derecha de la entrada Se pueden reconocer prácticamente todas las construcciones de los lenguajes de programación descritos por una gramática G2 Inconvenientes La construcción a mano requiere mucho trabajo Tipos de Análizadores LR 42 LR simple (SLR) Fácil de implementar Menos poderoso, hay algunas gramáticas que los otros métodos pueden analizar y este no puede LR canónico Es muy costoso de implementar El más potente LALR (LR con examen por anticipado) Intermedio entre los dos métodos anteriores 21

22 Modelo de un Analizador LR 43 ENTRADA a 1... a 1... a n $ Pila s m X m Programa de Análisis Sintáctico LR SALIDA s m-1 X m-1... s 0 Acción Ir_a Tabla de Análisis Sintáctico LR Modelo de Analizador LR 44 El programa es el mismo para todos los analizadores LR X i es un símbolo gramatical y cada s i es un símbolo llamado estado Se utiliza el símbolo de estado y el símbolo de la entrada para indexar la tabla y determinar la acción siguiente La tabla de análisis sintácticos tiene dos partes: Acción[s m, a i ]= Error: error de sintaxis Aceptar: acepta la entrada, el análisis sintáctico finaliza Desplazar: introduce en la pila el símbolo a i y el estado s m Reducción: extrae símbolos de la pila, ejecuta la acción semántica correspondiente a una producción Ir_a[s m, X i ]= s k 22

23 Modelo de Analizador LR 45 Configuración de un analizador sintáctico LR Tupla con el contenido de la pila y la entrada que resta por procesar (s 0 X 1 s 1 X 2 s 2... X m s m, a i a i+1... a n $) Acción[s m, a i ] = desplazar s (s 0 X 1 s 1 X 2 s 2... X m s m a i s, a i+1... a n $) Acción[s m, a i ] = reducir A (s 0 X 1 s 1 X 2 s 2... X m-r s m-r A s, a i a i+1... a n $) donde s=ir_a[s m-r, A] y r= (se extraen r símbolos no terminales y r símbolos de estados de la pila) Algoritmo de Análisis LR 46 apuntar ae al primer símbolo de w$ (s está en la cima y ae apunta al símbolo a) repetir caso Acción[s, a] Desplazar s push a push s leer en la entrada Reducir A pop 2* símbolos s símbolo en la cima de la pila s= Ir_a[s, A] push A push s Aceptar Error fincaso hasta Aceptar o Error 23

24 Ejemplo de Análisis LR Gramática 1. E::= E + T 2. E::= T 3. T::= T * F 4. T::= F 5. F::= ( E ) 6. F::= Id Tabla de análisis sintáctico Acción Ir_a Estado Id + * ( ) $ E T F 0 d5 d d6 ACP 2 r2 d7 r2 r2 3 r4 r4 r4 r4 4 d5 d r6 r6 r6 r6 6 d5 d d5 d d6 d11 9 r1 d7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 47 r5 Ejemplo de Análisis LR 48 Pila Entrada Acción 0 Id * Id + Id $ d5 0 Id 5 * Id + Id $ r6 0 F 3 * Id + Id $ r4 0 T 2 * Id + Id $ d7 0 T 2 * 7 Id + Id $ d5 0 T 2 * 7 Id 5 + Id $ r6 0 T 2 * 7 F 10 + Id $ r3 0 T 2 + Id $ r2 0 E 1 + Id $ d6 0 E Id $ d5 0 E Id 5 $ r6 0 E F 3 $ r4 0 E T 9 $ r1 0 E 1 $ ACP 24

25 Construcción de una Tabla LR 49 Definiciones Item (elemento) Producción con un marcador de posición S::= if C then S En la entrada se ha visto el token if y queda por procesar C then S Estado Representa un momento en la derivación, equivale a un estado en el autómata que realiza el análisis Un estado está formado por un conjunto de items 50 Algoritmo de definición de estados Crear un símbolo no terminal nuevo S Crear una nueva producción S ::=S, donde es el axioma Crear el estado inicial, S 0 ={(S ::= S)} Mientras se creen nuevos estados hacer Cierre: Si A::=x X S i entonces, Para cada X::=w P Creación S i =S i U {(X::= w)} Para cada z I i =(A::=x zw) S i Crear un nuevo estado S j ={(A::=xz w)} Para cada I k =(B::= z) S i, I k I i S j =S j U {(B::= z)} 25

26 Algoritmo de tabla SLR(1) 51 Desplazar Si A::=x aw S i, A::=xa w S j, a T Entonces Acción[S i,a]=desplazar S j Reducir Si A::=w S i, P j =(A::=w) Entonces Para cada a SIGUIENTE(A) Acción [S i,a]=reducir j Aceptar Si S ::=S S i Entonces Acción[S i,$]=aceptar Ir_a Si A::=x Bw S i, A::=xB w S j, B N Entonces Ir_a[S i,b]= S j 52 Análisis Sintáctico: Manejo de Errores Características Informar con claridad y exactitud Recuperación rápida No debe retrasar el procesamiento de programas sin errores Estrategias de recuperación Modo de pánico Nivel de frase Producciones de error Corrección Global 26

27 53 Estrategias de recuperación de errores (I) Modo de pánico Método más sencillo Lo pueden utilizar la mayoría de los métodos de análisis FUNCIONAMIENTO: Desecha los símbolos de entrada hasta que encuentra componentes léxicos de sincronización (delimitadores, punto y coma, end) Adecuado para lenguajes en los que es raro que se produzcan varios errores en la misma línea Nivel de frase FUNCIONAMIENTO: Realizar una corrección local de la entrada restante para poder continuar con el análisis, (sustituir coma por punto y coma, añadir coma) Dificultad para manejar situaciones en las que el error se produjo antes del punto de detección 54 Estrategias de recuperación de errores (II) Producciones de error FUNCIONAMIENTO Si se conocen los errores que pueden suceder, entonces puede extenderse la gramática para incluir producciones de error Corrección global FUNCIONAMIENTO Son algoritmos que minimiza el número de cambios necesarios para convertir una cadena errónea en otra correcta Demasiado costoso, en tiempo y espacio Solo tiene interés teórico 27

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

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 UNIDAD IV Analisis Sintactico 4.1 Introduccion Sintaxis significa estructura del orden de las palabras en una frase. La tarea del analisis sintactico es revisar si los símbolos aparecen en el orden correcto

Más detalles

ANÁLISIS SINTÁCTICO I ANALIZADORES SINTÁCTICOS

ANÁLISIS SINTÁCTICO I ANALIZADORES SINTÁCTICOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Analizadores sintácticos LR(0) y SLR

Analizadores sintácticos LR(0) y SLR Teoría de Lenguajes Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Clase de Hoy Anteriores: Parsing descendente (LL(1), ELL) Recursivos e iterativos Generan árbol de derivación desde

Más detalles

Recuperación de Errores

Recuperación de Errores Recuperación de rrores 1 Rutinas de Manejo de rrores Ocupan gran parte de los compiladores Objetivos Informar con claridad, exactitud Recuperación rápida recuperación no es corrección No debe retrasar

Más detalles

Tema 5. Análisis sintáctico ascendente

Tema 5. Análisis sintáctico ascendente Tema 5 Análisis sintáctico Ciencias de la Computación e Inteligencia Artificial Índice 5.1 Introducción 5.2 Análisis sintáctico por desplazamiento y reducción 5.3 El autómata reconocedor de prefijos viables

Más detalles

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

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1 Facultad de Ingeniería de Sistemas Lenguajes y Compiladores Análisis Sintáctico Parte I 1 Introducción El analizador sintáctico recibe una secuencia de tokens y decide si la secuencia está correcta o no.

Más detalles

Analizador Sintáctico Ascendente

Analizador Sintáctico Ascendente Analizador Sintáctico Ascente Un Analizador Sintáctico (A. St.) Ascente construye el árbol desde las hojas hacia la raíz. Funciona por reducción-desplazamiento, lo cual quiere decir que, siempre que puede,

Más detalles

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. Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Análizador Sintáctico de abajo hacia arriba Es un proceso de Reducción,

Más detalles

Conceptos básicos sobre gramáticas

Conceptos básicos sobre gramáticas Procesamiento de Lenguajes (PL) Curso 2014/2015 Conceptos básicos sobre gramáticas Gramáticas y lenguajes Gramáticas Dado un alfabeto Σ, un lenguaje es un conjunto (finito o infinito) de cadenas de símbolos

Más detalles

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 4

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 4 UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 4 Análisis Sintáctico Ascendente Javier Vélez Reyes jvelez@lsi.uned.es Objetivos

Más detalles

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

Tipos de análisis deterministas. Análisis descendente. Tipos de análisis deterministas. Análisis ascendente. Análisis descendente César Ignacio García Osorio Área de Lenguajes y Siste mas Informáticos Universidad de Burgos Tipos de análisis deterministas. nálisis descendente. La idea es generar una forma sentencial a partir del axioma,

Más detalles

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. UNIVERIDAD NACIONAL DE EDUCACIÓN A DITANCIA Escuela Técnica uperior de Ingeniería Informática Procesadores de Lenguajes Tema 3 Parte II Análisis intáctico Descendente Javier Vélez Reyes jvelez@lsi.uned.es

Más detalles

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal

Más detalles

Universidad Nacional del Santa Facultad de Ingeniería E.A.P. de Ingeniería de Sistemas e Informática TEORIA DE COMPILADORES ANALISIS SINTACTICO

Universidad Nacional del Santa Facultad de Ingeniería E.A.P. de Ingeniería de Sistemas e Informática TEORIA DE COMPILADORES ANALISIS SINTACTICO ANALISIS SINTACTICO Análisis Sintáctico Descendente Análisis Sintáctico Ascendente EOF y α S (axioma inicial). 2. : la cadena de entrada no es válida. 3. : consiste en aplicar

Más detalles

16 Análisis sintáctico I

16 Análisis sintáctico I 2 Contenido Recordando la estructura de un compilador Recordando el análisis léxico l análisis sintáctico Comparación con el análisis léxico l Rol del Parser Lenguajes de programación Gramáticas structura

Más detalles

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

Procesadores de Lenguajes. Análisis sintáctico. Analizadores descendentes Procesadores de Lenguajes Ingeniería Técnica superior de Ingeniería Informática Departamento de Lenguajes y Sistemas informáticos Análisis sintáctico Analizadores descendentes Javier Vélez Reyes jvelez@lsi.uned.es

Más detalles

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3. UNIVRSIDAD NACIONAL D DUCACIÓN A DISTANCIA scuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 3 Parte I Análisis Sintáctico Javier Vélez Reyes jvelez@lsi.uned.es Objetivos

Más detalles

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

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 2 Contenido Clasificación de métodos de análisis sintáctico Análisis descendente Análisis descendente recursivo Análisis descendente predictivo Métodos deterministas Problemas del análisis descendente

Más detalles

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

Tema 4: Análisis sintáctico ascendente. Análisis sintáctico ascendente: un ejemplo Tema 4: Análisis sintáctico ascendente Procesamiento de enguajes Dept. de enguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de enguajes Tema 4: Análisis sintáctico ascendente 1 / 21

Más detalles

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

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013 Compiladores Análisis Sintáctico Ascendente Adrian Ulises Mercado Martínez Facultad de Ingeniería, UNAM 5 de septiembre de 2013 Adrian Ulises Mercado Martínez (FI,UNAM) Compiladores 5/07/2013 1 / 34 Índice

Más detalles

Procesadores de lenguaje

Procesadores de lenguaje Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte II) Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Análisis sintáctico ascendente

Más detalles

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

ANÁLISIS SINTÁCTICO I ANÁLISIS SINTÁCTICO DESCENDENTE LL(1) Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Proyecto Intermedio Algoritmo de Earley

Proyecto Intermedio Algoritmo de Earley Fundamentos de Computación Proyecto Intermedio: Algoritmo de Earley Profesor: Dr. José Torres Jiménez Alumnos: Edna Gutiérrez Gasca Aureny Magaly Uc Miam Jorge Rodríguez Núñez Proyecto Intermedio Algoritmo

Más detalles

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

Procesadores de lenguaje Tema Análisis sintáctico (Parte II) Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte II) Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Análisis sintáctico ascendente

Más detalles

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. Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Parsing LR: Ejemplo: E E + T E T T T * id T id S n : shift al estado

Más detalles

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

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo Agenda Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo Analizador sintáctico Bottom-Up 1-1 1-2 Introducción Los sistemas de implementación

Más detalles

Unidad 5 Análisis semántico

Unidad 5 Análisis semántico 61 Unidad 5 Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

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

Software para la Enseñanza de las Fases de Análisis Léxico y Análisis Sintáctico en Procesadores de Lenguajes Software para la Enseñanza de las Fases de Análisis Léxico y Análisis Sintáctico en Procesadores de Lenguajes Manual de usuario Realizado por: José Francisco Jódar Reyes Dirigido por: Jorge Revelles Moreno

Más detalles

Análisis sintáctico 1

Análisis sintáctico 1 Análisis sintáctico 1 Análisis sintáctico 1. Introducción 2. Análisis descendente (top-down) 2.1 Análisis con backtracking 2.2 Análisis predictivo 2.2.1 Método recursivo 2.2.2 Método iterativo 3. Análisis

Más detalles

Definición de la sintaxis (1) Definición de la sintaxis (2) Definición de la sintaxis (3)

Definición de la sintaxis (1) Definición de la sintaxis (2) Definición de la sintaxis (3) Definición de la sintaxis (1) Gramática independiente del contexto: tiene cuatro componentes: Un conjunto de componentes léxicos, denominados símbolos terminales. Un conjunto de no terminales. Un conjunto

Más detalles

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO Autómatas de pila y lenguajes independientes del contexto -1- AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO AUTÓMATAS DE PILA - Son autómatas finitos con una memoria en forma de pila. - Símbolos

Más detalles

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 2) 2007 1 Derivaciones El proceso de búsqueda de un árbol sintáctico para una cadena se llama análisis sintáctico. El lenguaje generado

Más detalles

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Analizadores sintácticos descendentes: LL(1) Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 Analizadores sintácticos

Más detalles

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

YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator YACC (Yet Another Compiler Compiler) LALR(1) Parser Generator 1 INDICE 1. Introducción 2. Especificaciones 3. Ambigüedad y conflictos 4. Tratamiento de errores 5. Uso con el LEX 6. Algunos consejos prácticos

Más detalles

Tema 3. Análisis sintáctico descendente

Tema 3. Análisis sintáctico descendente Departamento de Tecnologías de la Información Tema 3 Análisis sintáctico Ciencias de la Computación e Inteligencia Artificial Índice 3.1 Características del análisis sintáctico 3.2 Gramáticas libres de

Más detalles

Teoría de Autómatas y Lenguajes Formales Práctica 4

Teoría de Autómatas y Lenguajes Formales Práctica 4 Departamento de Tecnologías de la Información Área de Ciencias de la Computación e Inteligencia Artificial Teoría de Autómatas y Lenguajes Formales Práctica 4 1.- OBJETIVOS El objetivo de esta práctica

Más detalles

Capítulo 4: Algoritmos usados por el Generador de Analizadores Sintácticos

Capítulo 4: Algoritmos usados por el Generador de Analizadores Sintácticos Capítulo 4: Algoritmos usados por el Generador de Analizadores Sintácticos 4.1 Introducción En este capítulo se presentan los algoritmos usados por el Generador de Analizadores Sintácticos SLR. Se tratará

Más detalles

Tema 5. Análisis semántico

Tema 5. Análisis semántico Departamento de Tecnologías de la Información Tema 5 Análisis semántico Ciencias de la Computación e Inteligencia Artificial Índice 5.1 Características del análisis semántico 5.2 Gramáticas atribuidas

Más detalles

Procesadores de lenguaje

Procesadores de lenguaje Recursivad: ejercicios Obtener las gramáticas que producen: Procesadores de lenguaje jercicios de análisis sintáctico Departamento de Ciencias de la Computación Universad de Alcalá 1. Una o más aes con

Más detalles

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

Procesadores de lenguaje Tema Análisis sintáctico (Parte I) Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte I) Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Introducción Conceptos básicos Tipos de analizadores Gramáticas independientes

Más detalles

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

Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte I) Procesadores de lenguaje Tema 3 Análisis sintáctico (Parte I) Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Introducción Conceptos básicos Tipos de analizadores Gramáticas independientes

Más detalles

ANÁLISIS SINTÁCTICO II SLR

ANÁLISIS SINTÁCTICO II SLR Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I Tema 4: Gramáticas independientes del contexto Teoría de autómatas y lenguajes formales I Bibliografía Hopcroft, J. E., Motwani, R., y Ullman, J. D. Introducción a la Teoría de Autómatas, Lenguajes y Computación.

Más detalles

ANÁLISIS SINTÁCTICO II LR1

ANÁLISIS SINTÁCTICO II LR1 Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Compiladores: Parsing ascendente

Compiladores: Parsing ascendente Compiladores: Parsing ascendente Francisco J Ballesteros LSUB, URJC Page 1 of 64 Parsing ascendente Normalmente utilizaremos parsers descendentes para problemas pequeños cuando podemos escribir uno predictivo

Más detalles

Unidad I: Análisis semántico

Unidad I: Análisis semántico Unidad I: Análisis semántico 1.1 Arboles de expresiones Los árboles de expresiones representan el código de nivel del lenguaje en forma de datos. Los datos se almacenan en una estructura con forma de árbol.

Más detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

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

22, 23 y 24 Análisis sintáctico V Compiladores - Profr. Edgardo Adrián Franco Martínez 2 Contenido Análisis Sintáctico Ascendente Métodos Ascendentes Método Ascendente SLR Pasos para el método SLR Ejemplo SLR Resumen Ejercicios Compiladores (Análisis Sintáctico VI - Análisis Ascendente -

Más detalles

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe: 09:19 1 2 Temas Funciones del Analizador Léxico Manejo de buffers de entrada Especificación y reconocimiento de tokens Generación automática de Analizadores Léxicos Objetivos Que el estudiante logre conocer,

Más detalles

Tema 1. Introducción

Tema 1. Introducción Departamento de Tecnologías de la Información Tema 1 Introducción Ciencias de la Computación e Inteligencia Artificial Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría

Más detalles

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales. ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales. Los nodos terminales (nodos hojas) están rotulados por los

Más detalles

Unidad IV Análisis Sintáctico. M.C. Juan Carlos Olivares Rojas

Unidad IV Análisis Sintáctico. M.C. Juan Carlos Olivares Rojas Unidad IV Análisis Sintáctico M.C. Juan Carlos Olivares Rojas Agenda 4.1 Introducción a las Gramáticas libres de contexto y árboles de derivación. 4.2 Diagramas de sintaxis. 4.3 Precedencia de operadores.

Más detalles

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55 Contenido Capítulo 1. Teoría de conjuntos. 1 1.1 Conjuntos.... 3 1.1.1 Definiciones básicas.... 3 1.1.2 Operaciones sobre conjuntos.... 6 1.1.3 Diagrama de Venn.... 7 1.1.4 Álgebra de conjuntos.... 7 1.2

Más detalles

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones Analizador Léxico Programación II Margarita Álvarez Analizador Léxico - Funciones Función Principal Leer carácter por carácter de la entrada y elaborar como salida una secuencia de componentes léxicos

Más detalles

GRAMATICAS LIBRES DEL CONTEXTO

GRAMATICAS LIBRES DEL CONTEXTO GRMTICS LIBRES DEL CONTEXTO Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto.

Más detalles

Tema 5 (2 a parte): Traductores ascendentes. Algoritmo de análisis ascendente. Procesamiento de Lenguajes. E E op T E T T num

Tema 5 (2 a parte): Traductores ascendentes. Algoritmo de análisis ascendente. Procesamiento de Lenguajes. E E op T E T T num Tema 5 (2 a parte): Traductores ascendentes Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5 (2 a parte): Traductores ascendentes

Más detalles

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

El análisis descendente LL(1) 6, 7 y 13 de abril de 2011 6, 7 y 13 de abril de 2011 Analizadores sintácticos (repaso) Los analizadores descendentes: Corresponden a un autómata de pila determinista. Construyen un árbol sintáctico de la raíz hacia las hojas (del

Más detalles

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

Diseño de Compiladores I. Estructura General de un Compilador Diseño de Compiladores I Estructura General de un Compilador PROGRAMA FUENTE COMPILADOR SALIDA Mensajes de Error 2 Un compilador es un programa que traduce un programa escrito en lenguaje fuente y produce

Más detalles

Pontificia Universidad Católica del Ecuador

Pontificia Universidad Católica del Ecuador 1. DATOS INFORMATIVOS: MATERIA O MÓDULO: COMPILADORES E INTERPRETES CÓDIGO: 10730 CARRERA: NIVEL: SISTEMAS QUINTO No. CRÉDITOS: 4 CRÉDITOS TEORÍA: 4 CRÉDITOS PRÁCTICA: - SEMESTRE / AÑO ACADÉMICO: 2 / 2010

Más detalles

Yacc/Bison. Índice. Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse()

Yacc/Bison. Índice. Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse() Yacc/Bison Índice Marina de la Cruz Introducción Uso de Yacc/Bison con Lex/Flex Construcción del programa objetivo Flujo de control de las funciones yylex() e yyparse() Formato del fichero de especificación

Más detalles

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

Compiladores: Sesión 16. Análisis semántico, traducción dirigida por sintaxis Compiladores: Sesión 16. Análisis semántico, traducción dirigida por sintaxis Prof. Gloria Inés Alvarez V. Departamento de Ciencias e Ingeniería de la Computación Pontificia Universidad Javeriana Cali

Más detalles

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. Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Sintaxis Define la estructura del lenguaje Ejemplo: Jerarquía en

Más detalles

TEMA 5 ANÁLISIS SINTÁCTICO DESCENDENTE

TEMA 5 ANÁLISIS SINTÁCTICO DESCENDENTE Universidad de Oviedo - Departamento de Informática Escuela Politécnica Superior de Ingeniería ANÁLISIS SINTÁCTICO EN PROCESADORES DE LENGUAJE TEMA 5 ANÁLISIS SINTÁCTICO DESCENDENTE Página 1 Objetivos

Más detalles

Introducción. Análisis Semántico. José M. Castaño. Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA

Introducción. Análisis Semántico. José M. Castaño. Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA Análisis Semántico José M. Castaño Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA Compiladores Análisis Léxico Análisis Sintáctico Análisis Semántico Generación Código Intermedio Optimización

Más detalles

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2. UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes Tema 2 Análisis Léxico Javier Vélez Reyes jvelez@lsi.uned.es Objetivos del Tema

Más detalles

Análisis semántico. Análisis semántico. Índice (I)

Análisis semántico. Análisis semántico. Índice (I) Análisis semántico Índice (I) Marina de la Cruz Alfonso Ortega Objetivo del análisis semántico Decisiones para la construcción de un analizador semántico Análisis semántico con Bison Nivel de indirección

Más detalles

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

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR: UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERÍA ESCUELA DE CIENCIAS PROGRAMA DE LABORATORIO CÓDIGO: 777 CRÉDITOS: 4 NOMBRE CURSO: ESCUELA: PRE-REQUISITO: Organización de Lenguajes y Compiladores

Más detalles

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA) Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

Análisis Sintáctico Descendente

Análisis Sintáctico Descendente Análisis Sintáctico Descendente p.1/65 Análisis Sintáctico Descendente Tema 4 Juan A. Botía Blaya juanbot@um.es http://ants.dif.um.es/staff/juanbot/traductores/traductores.html Departamento de Ingeniería

Más detalles

4 o Ingeniería Informática

4 o Ingeniería Informática Esquema del tema 1. Introducción 2. Análisis LR(0) 3. Análisis SLR 4. Análisis LR(1) 4 o Ingeniería Informática II26 Procesadores de lenguaje Análisis ascendente 5. Uso de gramáticas ambiguas 6. Tratamiento

Más detalles

Procesadores de Lenguaje

Procesadores de Lenguaje 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

Más detalles

Sintaxis y Semántica del Lenguaje

Sintaxis y Semántica del Lenguaje Gramáticas y Autómatas Wilo Carpio Cáceres 110813 1 Sintaxis y Semántica del Lenguaje Wilo Carpio Cáceres 2013 Gramáticas y Autómatas Wilo Carpio Cáceres 110813 2 INTRODUCCION A LOS COMPILADORES Wilo Carpio

Más detalles

Las Etapas de la Compilación

Las Etapas de la Compilación Las de la Compilación El en la Compilación Universidad de Cantabria Outline 1 El Problema 2 Las y el Qué pasos son necesarios dar para hallar la estructura de un programa? En qué pasos podemos dividirlos

Más detalles

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores Facultad de Ingeniería de Sistemas Lenguajes y Aspectos Formales (Parte 1) 1 Aspectos Formales Los compiladores traducen lenguajes que están formalmente definidos a través de reglas que permiten escribir

Más detalles

Clase 16: GLC s recursivas y no factorizadas Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas

Clase 16: GLC s recursivas y no factorizadas Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas Clase 16: GLC s recursivas y no factorizadas Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom

Más detalles

Generación de Código Intermedio

Generación de Código Intermedio Generación de Código Intermedio Programación II Margarita Álvarez Generación de código intermedio Con la generación de código intermedio se inicia la tarea de síntesis. Aunque un programa fuente se puede

Más detalles

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

Lex (flex,... ) Generación de analizador léxico p.1 Generación de analizador léxico Lex (flex... ) Generación de analizador léxico p.1 Expresiones regulares tipo grep Expresiones simples (un sólo carácter): carácter carácter. cualquier carácter (excepto

Más detalles

Desarrollo del Programa Docente de Procesadores del Lenguaje

Desarrollo del Programa Docente de Procesadores del Lenguaje Grado en Ingeniería Informática. Procesadores del Lenguaje. Curso 2010-2011 -1- Desarrollo del Programa Docente de Procesadores del Lenguaje Introducción Se presenta en este texto el programa desarrollado

Más detalles

Tema: Análisis Sintáctico

Tema: Análisis Sintáctico Compiladores. Guía 3 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Sintáctico Contenido En esta guía se abordarán los conceptos pertenecientes al componente de análisis

Más detalles

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

Análisis léxico. Formalización y desarrollo. Procesadores de Lenguajes. Ingeniería Técnica superior de Ingeniería Informática Procesadores de Lenguajes Ingeniería Técnica superior de Ingeniería Informática Departamento de Lenguajes y Sistemas informáticos Análisis léxico Formalización y desarrollo Javier Vélez Reyes jvelez@lsi.uned.es

Más detalles

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas. LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.

Más detalles

Compiladores e Intérpretes Análisis Semántico I

Compiladores e Intérpretes Análisis Semántico I 1 Compiladores e Intérpretes Análisis Semántico I Sebastian Gottifredi 2017 Organización Repaso Intuición General del Análisis Semántico Gramáticas de Atributos Funcionamiento Atributos: Sintetizados-Heredados-Intrinsecos

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERÍA PROGRAMA DE ESTUDIO COMPILADORES 1764 7 o 09 Asignatura Clave Semestre Créditos Ingeniería Eléctrica Ingeniería en Computación Ingeniería

Más detalles

Universidad de Valladolid

Universidad de Valladolid Universidad de Valladolid Departamento de Informática Teoría de autómatas y lenguajes formales. 2 o I.T.Informática. Gestión. Examen de primera convocatoria. 18 de junio de 29 Apellidos, Nombre... Grupo:...

Más detalles

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I Análisis Léxico I Profesor: Eridan Otto Análisis Léxico I Introducción Funciones Tokens,Patrones y Lexemas Reconocimiento de tokens Implementación de un AL 1 Análisis léxico: Introducción En esta unidad

Más detalles

Elementos para el estudio de los compiladores

Elementos para el estudio de los compiladores Ing. Adrian Ulises Mercado Martínez Enero 30, 2015 Ing. Adrian Ulises Mercado Martínez Enero 30, 2015 1 / 51 1 Objetivo 2 Historia 3 Traductor Tipo de Traductores Compilador Intérprete Máquina Virtual

Más detalles

Introducción. El proceso de traducción

Introducción. El proceso de traducción Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso

Más detalles

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

Universidad de Costa Rica. Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES. Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES II Ciclo 2014 Profesor: Manuel E. Bermúdez EXAMEN FINAL (NO PARA COMER EN CLASE,

Más detalles

DESARROLLO DE LA PRÁCTICA DE ANÁLISIS SINTÁCTICO

DESARROLLO DE LA PRÁCTICA DE ANÁLISIS SINTÁCTICO 1/5 DESARROLLO DE LA PRÁCTICA DE ANÁLISIS SINTÁCTICO CREACIÓN DEL FICHERO ALFA.Y 1. En la sección de definiciones, se incorporan los siguientes elementos: #include para utilizar la función fprintf.

Más detalles

Examen de Procesadores de Lenguaje

Examen de Procesadores de Lenguaje Apellidos: Nombre: Dni: Examen de Procesadores de Lenguaje Junio de 2007 (2 horas y 45 minutos) Instrucciones Entrega esta hoja, rellenada con tus datos, junto a tu examen cuando lo entregues. Ten en cuenta

Más detalles

Tema 5: Traducción dirigida por la sintaxis

Tema 5: Traducción dirigida por la sintaxis Tema 5: Traducción dirigida por la sintaxis Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis

Más detalles

Introducción al Diseño de Compiladores. Año

Introducción al Diseño de Compiladores. Año Introducción al Diseño de Compiladores Año 2003 1 BIBLIOGRAFÍA [AHO] Compilers. Principles, Techniques, and Tools Aho, Sethi; Adisson-Wesley 1986 [TEU] Compiladores: Conceptos fundamentales. Teufel ; Addison

Más detalles

Profesor: José Miguel Rubio L.

Profesor: José Miguel Rubio L. Profesor: José Miguel Rubio L. Magíster en Ingeniería Informática Ingeniero Civil en Informática Licenciado en Ciencias de la Ingeniería Técnico en Programación Oficina: 3-20 e-mail 1: jose.rubio.l@ucv.cl

Más detalles

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

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa ANALIZADOR LÉXICO (AL) El Analizador léxico (scanner), lee la secuencia de caracteres del programa fuente, caracter a caracter, y los agrupa para formar unidades

Más detalles

LENGUAJES Y GRAMÁTICAS

LENGUAJES Y GRAMÁTICAS LENGUAJES Y GRAMÁTICAS Orlando Arboleda Molina Escuela de Ingeniería de Sistemas y Computación de La Universidad del Valle 20 de septiembre de 2008 Contenido Lenguajes y Gramáticas Gramáticas Gramáticas

Más detalles

El proceso del Análisis Léxico

El proceso del Análisis Léxico El proceso del Análisis Léxico El proceso de análisis léxico se refiere al trabajo que realiza el scanner con relación al proceso de compilación. El scanner representa una interfaz entre el programa fuente

Más detalles

Ciencias de la Computación I

Ciencias de la Computación I Ciencias de la Computación I Gramáticas Regulares Expresiones Regulares Gramáticas - Intuitivamente una gramática es un conjunto de reglas para formar correctamente las frases de un lenguaje - Por ejemplo,

Más detalles

Gramáticas de Atributos

Gramáticas de Atributos Teoría de Lenguajes Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Etapas de un Compilador Analizador Léxico Analizador Sintáctico (Parser)... Lexer: Genera secuencia de tokens Reporta

Más detalles

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

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002 Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Ejercicios Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto

Más detalles

Capítulo 3 Análisis sintáctico

Capítulo 3 Análisis sintáctico Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC Capítulo 3 Análisis sintáctico 3.1 Visión general Todo lenguaje de programación obedece a unas reglas que describen la estructura

Más detalles