Generación de analizador sintáctico ascendente Yacc (bison,... ) Generación de analizador sintáctico ascendente v1.1 c 2005 José Fortes Gálvez p.

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

Download "Generación de analizador sintáctico ascendente Yacc (bison,... ) Generación de analizador sintáctico ascendente v1.1 c 2005 José Fortes Gálvez p."

Transcripción

1 Generación de analizador sintáctico ascendente Yacc (bison, ) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p1

2 Reconocedor de avance-reducción Planteamiento clásico, originado por limitaciones de memoria y velocidad, hoy en parte superadas: Lectura del texto fuente de izquierda a derecha Ascendente [bottom-up]: construcción del árbol sintáctico de abajo arriba (hacia la raíz, correspondiente al símbolo principal) Avance-reducción [shift-reduce]: La decisión de reducir (y la regla a aplicar) se toma en cuanto se acaba de reconocer la parte derecha (pivote [handle]) Limitado tamaño de la ventana [lookahead] de contexto derecho usada en la decisión Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p2

3 jemplo de avance-reducción S B c F A b d D ntrada = abcdef Pila vacía a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

4 jemplo de avance-reducción S B c F A b d D Avanza Pila = a a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

5 jemplo de avance-reducción S B c F A b d D Reduce A a Pila = A a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

6 jemplo de avance-reducción S B c F A b d D Avanza Pila = Ab a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

7 jemplo de avance-reducción S B c F A b d D Reduce B Ab Pila = B a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

8 jemplo de avance-reducción S B c F A b d D Avanza Pila = Bc a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

9 jemplo de avance-reducción S B c F A b d D Avanza Pila = Bcd a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

10 jemplo de avance-reducción S B c F A b d D Avanza Pila = Bcde (Secuencia de prefijos de a C partes derechas) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

11 jemplo de avance-reducción S B c F A b d D Avanza Pila = Bcdef a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

12 jemplo de avance-reducción S B c F A b d D Reduce C ef Pila = BcdC a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

13 jemplo de avance-reducción S B c F A b d D Reduce D C Pila = BcdD a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

14 jemplo de avance-reducción S B c F A b d D Reduce dd Pila = Bc a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

15 jemplo de avance-reducción S B c F A b d D Reduce F ε Pila = BcF (Pila crece sin consumir a C entrada) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

16 jemplo de avance-reducción S B c F A b d D Reduce S BcF Pila = S (Fin del reconocimiento) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p3

17 Implicaciones del avance-reducción Reducciones en orden inverso de derivación derecha [rightmost] Las secuencias de símbolos ya cubiertos (pero no reducidos): son el frente de avance en la construcción (virtual) del árbol, son prefijos de forma sentencial derecha (prefijos viables) evolucionan como pila LIFO (todo prefijo de pv es pv), y componen globalmente un lenguaje regular por tanto, podemos construir un AFD, llamado autómata LR Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p4

18 Subárbol restante Normalmente existirán múltiples subárboles restantes compatibles con pila+ventana Conforme se avanza se contruye el único correcto α 1 Pila = α 1 α m α Resto entrada = y? Ventana = k : y α m α 2 α top k : y Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p5

19 Subárbol restante Normalmente existirán múltiples subárboles restantes compatibles con pila+ventana Conforme se avanza se contruye el único correcto S α 1 A 1 β 1 Pila = α 1 α m α α 2 A 2 β 2 Resto entrada = y = xx m x 1 Ventana = k : y A m 1 α m A m β m α top β x x m x 2 x 1 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p5

20 Subárbol restante Los posibles árboles restantes sólo dependen de la pila, no de la sección de la entrada que ésta deriva S α 1 A 1 β 1 Pila = α 1 α m α Resto entrada = y Ventana = k : y α 2 A 2 β 2 A m 1 α m A m β m α top β x x m x 2 x 1 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p5

21 jemplo de AFD LR con k = 1 3 $-) r2 ac: S S r1: S S-T T ( T 4 ( S ) 7 9 $-) r3 r2: S T 1 a ( - r3: T (S) r4: T a a S 5 $-) r4 a - T 6 8 $-) r1 2 $ ac Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p6

22 Reconocimiento con autómata LR Gramática LR(k): si, usando ventana de k simbolos, siempre es posible decidir l autómata LR lee la pila y llega a un estado actual La acción de avance-reducción se decide en base al estado actual y k terminales siguientes Por construcción, a cada estado le corresponde un único símbolo entrante Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p7

23 jemplo de tabla LR $ - ( ) a S T ac 6 3 r2 r2 r r4 r4 r r1 r1 r1 9 r3 r3 r3 long símb r1 3 S r2 1 S r3 3 T r4 1 T AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p8

24 Utilización de la tabla LR Para evitar repetir ineficientemente la lectura de la pila, en lugar de pila de símbolos se utiliza pila de estados Toda transición implica empilar el nuevo estado Terminales: se lee nuevo símbolo (avance) Reducción: 1 Se desempilan tantos estados como símbolos tiene la parte derecha de la regla 2 Se realiza transición desde el estado que resulta en la cima con el símbolo no terminal de la parte izquierda de la regla Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p9

25 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

26 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

27 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

28 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

29 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

30 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

31 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

32 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

33 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

34 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

35 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

36 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

37 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

38 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ Red S S )$ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

39 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ Red S S )$ Avanzar $ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

40 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ Red S S )$ Avanzar $ Red T ( $ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

41 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ Red S S )$ Avanzar $ Red T ( $ Red S S 1 2 $ AFD y gramática Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

42 jemplo de reconocimiento LR $ - ( ) a S T S 2 ac 6 T 3 (1,S) (1,S) (1,S) ( a 5 (1,T) (1,T) (1,T) S T 8 (3,S) (3,S) (3,S) ) 9 (3,T) (3,T) (3,T) AFD y gramática Pila Resto entrada Decisión 1 a-(a-a)$ Avanzar 1 5 -(a-a)$ Red T a 1 3 -(a-a)$ Red S T 1 2 -(a-a)$ Avanzar (a-a)$ Avanzar a-a)$ Avanzar a)$ Red T a a)$ Red S T a)$ Avanzar a)$ Avanzar )$ Red T a )$ Red S S )$ Avanzar $ Red T ( $ Red S S 1 2 $ Aceptar Fin del reconocimiento Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p10

43 Items LR(0) Significado l punto en la parte derecha corresponde con la posición de la cima de la pila (por tanto α es un sufijo de pila) S α 1 A 1 β 1 A m α β α 2 A 2 β 2 A m 1 α m A m β m α top β x x m x 2 x 1 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p11

44 Items LR(0) Significado Dada la multiplicidad de árboles restantes compatibles con la pila, en cada momento tendremos un conjunto de items, parte de los cuales se desecharán al progresar la lectura (distintos β y distintos A) α 1 A m α β A m α β A m α β α 2 α m α? top k : y Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p11

45 Conjuntos de items LR(0) Cierre: quivalente a transición-ε (sin avanzar en la lectura) Items de la forma A α Bβ: se añaden al conjunto los items B γ i para cada una de las reglas B γ i Transición con un símbolo X: 1 Se mueve el punto en los items con X: Se pasa de A α Xβ a A αx β (núcleo [kernel], que identifica al estado) 2 Se calcula el cierre del núcleo stado inicial: Cierre de S S Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p12

46 Acciones del autómata LR(0) A cada conjunto de items le asociamos un estado del AFD Acciones en cada estado: A α aβ indican avanzar B γ indican reducir B γ (Tras reducción aplicamos transición con B) S S indica aceptar Si más de una acción, tenemos un conflicto: la gramática no es LR(0) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p13

47 jemplo de items y acciones S B c F A b d D S S S BcF a C B Ab A a (Avanzar) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

48 jemplo de items y acciones S B c F A b d D A a (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

49 jemplo de items y acciones S B c F A b d D B A b (Avanzar) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

50 jemplo de items y acciones S B c F A b d D B Ab (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

51 jemplo de items y acciones S B c F A b d D S B cf (Avanzar) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

52 jemplo de items y acciones S B c F A b d D S Bc F dd (Avanzar) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

53 jemplo de items y acciones S B c F A b d D d D D C a C C ef (Avanzar) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

54 jemplo de items y acciones S B c F A b d D C e f (Avanzar) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

55 jemplo de items y acciones S B c F A b d D C ef (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

56 jemplo de items y acciones S B c F A b d D D C (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

57 jemplo de items y acciones S B c F A b d D dd (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

58 jemplo de items y acciones S B c F A b d D S Bc F F (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

59 jemplo de items y acciones S B c F A b d D S BcF (Reducir) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

60 jemplo de items y acciones S B c F A b d D S S (Aceptar) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p14

61 Autómata LR(0) con conflictos +T T T T*F F F () a stado Items Transic Acciones 1 S +T :2 Avanzar T T T*F T:3 T F F:4 F () (:5 F a a:6 2 S Aceptar +T +:7 Avanzar 3 T Reducir T T T *F *:8 Avanzar 4 T F Reducir T F 5 F ( ) +T :9 Avanzar T T T*F T:3 T F F:4 F () (:5 F a a:6 6 F a Reducir F a 7 + T T T*F T:10 Avanzar T F F:4 F () (:5 F a a:6 8 T T* F F:11 Avanzar F () (:5 F a a:6 9 F ( ) ):12 Avanzar +T +:7 10 +T Reducir +T T T *F *:8 Avanzar 11 T T*F Reducir T T*F 12 F () Reducir F () Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p15

62 Autómata SLR(1) sin conflictos +T T T T*F F F () a Símb Siguientes S $ $,+,) T $,+,*,) F $,+,*,) stado Items Transic Símbolos:Acciones 1 S +T :2 (,a:avanzar T T T*F T:3 T F F:4 F () (:5 F a a:6 2 S $:Aceptar +T +:7 +:Avanzar 3 T $,+,):Reducir T T T *F *:8 *:Avanzar 4 T F $,+,*,):Reducir T F 5 F ( ) +T :9 (,a:avanzar T T T*F T:3 T F F:4 F () (:5 F a a:6 6 F a $,+,*,):Reducir F a 7 + T T T*F T:10 (,a:avanzar T F F:4 F () (:5 F a a:6 8 T T* F F:11 (,a:avanzar F () (:5 F a a:6 9 F ( ) ):12 ),+:Avanzar +T +:7 10 +T $,+,):Reducir +T T T *F *:8 *:Avanzar 11 T T*F $,+,*,):Reducir T T*F 12 F () $,+,*,):Reducir F () Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p16

63 Tabla SLR(1) de G T F ac: S r1: +T r2: T r3: T T*F r4: T F r5: F () r6: F a $ + * ( ) a T F ac 7 3 r2 r2 8 r2 4 r4 r4 r4 r r6 r6 r6 r r1 r1 8 r1 11 r3 r3 r3 r3 12 r5 r5 r5 r5 Autómata y acciones Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p17

64 Autómata SLR(1) con conflicto ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f Símb Siguientes S $ S $ $,=,+ T $,=,+,* stado Items Transic Símbolos:Acciones 1 S S S:2 f:avanzar S = +T :3 S f T f f:4 T T T*f T:5 2 S S $:Aceptar 3 S = =:6 =+:Avanzar +T +:7 4 S f $:Reducir S f T f $=+*:Reducir T f 5 T $=+:Reducir T T T *f *:8 *:Avanzar 6 S = +T :9 f:avanzar T T T*f T:5 T f f: T T T*f T:11 f:avanzar T f f:10 8 T T* f f:12 f:avanzar 9 S = $:Reducir S = +T +:7 +:Avanzar 10 T f $=+*:Reducir T f 11 +T $=+:Reducir +T T T *f *:8 *:Avanzar 12 T T*f $=*+:Reducir T T*f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p18

65 Tabla SLR(1) con conflicto ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f Símb Siguientes S $ S $ $,=,+ T $,=,+,* $ = f + * S T ac r2,r5 r5 r5 r5 5 r3 r3 r r r5 r5 r5 r5 11 r4 r4 r r6 r6 r6 r6 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p19

66 Autómata LR(0) de G ST ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f Símb Siguientes S $ S $ $,=,+ T $,=,+,* 1 f S T * + = T 12 f 8 * 11 T f 6 f 10 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p20

67 Análisis del conflicto SLR(1) Orígen (espúreo) del conflicto: Según la gramática, sólo con las pilas =f ó =+f es apropiado r2: T f ante $ llo sólo ocurre en el estado 10, no en el 4 Por tanto, no tiene sentido r2 en el estado 4 Conclusión: l conjunto de siguientes engloba todos los contextos: no es suficientemente discriminatorio para las gramáticas no-slr(1) ntonces, es necesario un método que calcule las ventanas en conexión con el contexto izquierdo Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p21

68 Items LR(k) Significado xiste un sufijo z m compatible con la pila (y adyacente a una frase x derivada de β) tal que w = k : z m $ S α 1 A 1 β 1 α 2 A 2 β 2 A m α β, w A m 1 α m A m β m α β cima x z m Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p22

69 Items LR(k) Cierre Dado un ítem A α Bβ, w, donde w = k : z$ S A α Bβ, w α 1 A 1 β 1 α m A β m α B β cima x y z Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p23

70 Items LR(k) Cierre Dado un ítem A α Bβ, w, las nuevas ventanas v j {k : yw β y} se hallan igualmente a continuación de las frases de B S A α Bβ, w α 1 A 1 β 1 B γ, v 1 α m A β m α B β cima γ x y z Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p23

71 Items LR(k) Cierre Dado un ítem A α Bβ, w, las nuevas ventanas v j {k : yw β y} se hallan igualmente a continuación de las frases de B S A α Bβ, w α 1 A 1 β 1 B γ, v 1 B γ, v n α m A β m α B β cima γ x y z Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p23

72 Conjuntos de items LR(1) Cierre: Items de la forma A α Bβ, a: se añaden al conjunto los items B γ i, b j para cada regla B γ i y cada b j Pr(βa) Transición con un símbolo X: 1 Se mueve el punto en los items con X: Se pasa de A α Xβ, b a A αx β, b (núcleo) 2 Se calcula el cierre del núcleo stado inicial: Cierre de S S, $ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p24

73 Acciones del autómata LR(1) A cada conjunto de items le asociamos un estado del AFD Acciones en cada estado: A α aβ, b indican avanzar ante a B γ, b indican reducir B γ ante b (Tras reducción aplicamos transición con B) S S, $ indica aceptar ante $ Si más de una acción ante un mismo terminal, tenemos un conflicto: la gramática no es LR(1) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p25

74 jemplo de items LR(1) y acciones S B c F A b d D S S,$ S BcF,$ a C B Ab,c A a,b (Avanzar ante a) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

75 jemplo de items LR(1) y acciones S B c F A b d D A a,b (Reducir ante b) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

76 jemplo de items LR(1) y acciones S B c F A b d D B A b,c (Avanzar ante b) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

77 jemplo de items LR(1) y acciones S B c F A b d D B Ab,c (Reducir ante c) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

78 jemplo de items LR(1) y acciones S B c F A b d D S B cf,$ (Avanzar ante c) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

79 jemplo de items LR(1) y acciones S B c F A b d D S Bc F,$ dd,$ (Avanzar ante d) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

80 jemplo de items LR(1) y acciones S B c F A b d D d D,$ D C,$ a C C ef,$ (Avanzar ante e) e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

81 jemplo de items LR(1) y acciones S B c F A b d D C e f,$ (Avanzar ante f) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

82 jemplo de items LR(1) y acciones S B c F A b d D C ef,$ (Reducir ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

83 jemplo de items LR(1) y acciones S B c F A b d D D C,$ (Reducir ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

84 jemplo de items LR(1) y acciones S B c F A b d D dd,$ (Reducir ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

85 jemplo de items LR(1) y acciones S B c F A b d D S Bc F,$ F,$ (Reducir ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

86 jemplo de items LR(1) y acciones S B c F A b d D S BcF,$ (Reducir ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

87 jemplo de items LR(1) y acciones S B c F A b d D S S,$ (Aceptar ante $) a C e f Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p26

88 Autómata LR(1) ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f SLR(1) stado Items Transic Símbolos:Acciones 1 S S,$ S:2 f:avanzar S =,$ +T,=+ :3 S f,$ T f,=*+ f:4 T,=+ T T*f,=*+ T:5a 2 S S,$ $:Aceptar 3 S =,$ =:6 =+:Avanzar +T,=+ +:7a 4 S f,$ $:Reducir S f T f,=*+ =*+:Reducir T f 5a T,=+ =+:Reducir T T T *f,=*+ *:8a *:Avanzar 5b T,$+ $+:Reducir T T T *f,$*+ *:8b *:Avanzar 6 S =,$ +T,$+ :9 f:avanzar T,$+ T T*f,$*+ T:5b T f,$*+ f:10b 7a + T,=+ T T*f,=+* T:11a f:avanzar T f,=+* f:10a 7b + T,$+ T T*f,$+* T:11b f:avanzar T f,$+* f:10b 8a T T* f,=*+ f:12a f:avanzar 8b T T* f,$*+ f:12b f:avanzar 9 S =,$ $:Reducir S = +T,$+ +:7b +:Avanzar 10a T f,=+* =+*:Reducir T f 10b T f,$*+ $*+:Reducir T f 11a +T,=+ =+:Reducir +T T T *f,=+* *:8a *:Avanzar 11b +T,$+ Generación de analizador sintáctico ascendente v11$+:reducir c 2005 José Fortes +T Gálvez p27 T T *f,$+* *:8b *:Avanzar

89 Autómata LR(1) ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f SLR(1) stado Items Transic Símbolos:Acciones 1 S S,$ S:2 f:avanzar S =,$ +T,=+ :3 S f,$ T f,=*+ f:4 T,=+ T T*f,=*+ T:5a 2 S S,$ $:Aceptar 3 S =,$ =:6 =+:Avanzar +T,=+ +:7a 4 S f,$ $:Reducir S f T f,=*+ =*+:Reducir T f 5a T,=+ =+:Reducir T T T *f,=*+ *:8a *:Avanzar 5b T,$+ $+:Reducir T T T *f,$*+ *:8b *:Avanzar 6 S =,$ +T,$+ :9 f:avanzar T,$+ T T*f,$*+ T:5b T f,$*+ f:10b 7a + T,=+ T T*f,=+* T:11a f:avanzar T f,=+* f:10a 7b + T,$+ T T*f,$+* T:11b f:avanzar T f,$+* f:10b 8a T T* f,=*+ f:12a f:avanzar 8b T T* f,$*+ f:12b f:avanzar 9 S =,$ $:Reducir S = +T,$+ +:7b +:Avanzar 10a T f,=+* =+*:Reducir T f 10b T f,$*+ $*+:Reducir T f 11a +T,=+ =+:Reducir +T T T *f,=+* *:8a *:Avanzar 11b +T,$+ $+:Reducir +T T T *f,$+* *:8b *:Avanzar 12a T T*f,=*+ =*+:Reducir T T* 12b T T*f,$*+ $*+:Reducir T T* Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p27

90 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

91 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

92 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

93 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

94 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

95 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

96 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* T f,+ T T*F,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

97 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* T f,+ T T*F,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

98 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* T f,+ T T*F,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

99 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* T f,+ T T*F,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

100 Cierre LR(1) del estado 1 ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f S S,$ S =,$ S f,$ T,= +T,= T f,= T T*F,= T,+ +T,+ T f,* T T*F,* T f,+ T T*F,+ Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p28

101 Tabla LR(1) de G ST ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f Tabla SLR(1) Autómata LR(0) Autómata LR(1) $ = f + * S T a 2 ac 3 6 7a 4 r2 r5 r5 r5 5a r3 r3 8a 5b r3 r3 8b 6 10b 9 5b 7a 10a 11a 7b 10b 11b 8a 12a 8b 12b 9 r1 7b 10a r5 r5 r5 10b r5 r5 r5 11a r4 r4 8a 11b r4 r4 8b 12a r6 r6 r6 12b r6 r6 r6 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p29

102 l problema del tamaño de LR(k) s el método más potente posible de avance-reducción con k símbolos de ventana Calcula exactamente qué siguientes corresponden a cada ítem de cada estado llo provoca una explosión de estados conforme k crece Tradicionalmente considerado inviable para k 1 Solución tradicional: LALR(1) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p30

103 De LR(1) a LALR(1) LR(1) replica los estados LR(0) Añadiendo distintas ventanas Igual parte LR(0) (corazón [core]) Si fusionamos estados LR(1) de igual corazón Recuperamos autómata LR(0) Conservamos parte de la información de contexto en las ventanas LR(1) Conclusión: LALR(1) de potencia intermedia entre LR(0) y LR(1) Tradicionalmente considerado suficiente en la práctica Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p31

104 Generación de LALR(1) en yacc Demasiado costoso construir primero LR(1) Se parte de una construcción de núcleos LR(0) y se aplica un proceso iterativo: l cálculo del cierre nos proporciona (inicialmente sólo algunos) valores para las ventanas de los ítems Se propagan estos valores a través de transiciones y cierres Se compacta la tabla con valores por defecto: Filas en zona de acción: reducción o error más frecuente (da lugar a reducciones adicionales en caso de error) Columnas en zona de saltos: más frecuente Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p32

105 Autómata LALR(1) ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f LR(1) SLR(1) stado Items Transic Símbolos:Acciones 1 S S,$ S:2 f:avanzar S =,$ +T,=+ :3 S f,$ T f,=*+ f:4 T,=+ T T*f,=*+ T:5 2 S S,$ $:Aceptar 3 S =,$ =:6 =+:Avanzar +T,=+ +:7 4 S f,$ $:Reducir S f T f,=*+ =*+:Reducir T f 5 T,=+$ =+$:Reducir T T T *f,=*+$ *:8 *:Avanzar 6 S =,$ +T,$+ :9 f:avanzar T,$+ T T*f,$*+ T:5b T f,$*+ f:10b 7 + T,=+$ T T*f,=+*$ T:11 f:avanzar T f,=+* f:10 8 T T* f,=*+$ f:12 f:avanzar 9 S =,$ $:Reducir S = +T,$+ +:7b +:Avanzar 10 T f,=+*$ =+*$:Reducir T f 11 +T,=+$ =+$:Reducir +T T T *f,=+*$ *:8 *:Avanzar 12 T T*f,=*+$ =*+$:Reducir T T* Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p33

106 Tabla LALR(1) de G ST ac: S S r1: S = r2: S f r3: T r4: +T r5: T f r6: T T*f Tabla LR(1) Tabla SLR(1) Aut LR(0) $ = f + * S T ac r2 r5 r5 r5 5 r3 r3 r r r5 r5 r5 r5 11 r4 r4 r r6 r6 r6 r6 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p34

107 Familias de gramáticas LR, LALR y LL LR(0) LALR(1) LALR(2) LALR LR(1) LR(2) LR LL(1) LL(2) LL Además, las SLR(k) están incluídas en LALR(k), y guardan la misma relación con las demás Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p35

108 Familias de lenguajes LR y LL LR(0) LL(1) LL(2) SLR(1)= =LR LL (Un lenguaje L es de una familia F si y sólo si existe un gramática del tipo F para L) Toda gramática LR(k) puede transformarse en LR(1), LALR(1) y SLR(1) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p36

109 Ambigüedad y LALR Todas las gramáticas LR son no-ambiguas ( pero no al revés!) Aunque el lenguaje a compilar sea no-ambiguo, a veces puede ser interesante usar una gramática más simple pero ambigua jemplo: if-then-else es típicamente LALR pero más natural y simple expresarlo de forma ambigua instr if cond then instr instr if cond then instr else instr instr llo provoca conflictos en la tabla LALR que el usuario puede intentar resolver manualmente Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p37

110 Tabla LALR(1) para gramática ambigu ac: S r1: - r2: * r3: () r4: a $ - * ( ) a ac r4 r4 r4 r r1 r1,5 r1,6 r1 9 r2 r2,5 r2,6 r2 10 r3 r3 r3 r3 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p38

111 Autómata LALR(1) para gramática ambigua - * () a stado Items Transic Símbolos:Acciones 1 S,$ -,$-* *,$-* :2 (a:avanzar (),$-* (:3 a,$-* a:4 2 S,$ $:Aceptar -,$-* -:5 -*:Avanzar *,$-* *:6 3 ( ),$-*) -,)-* *,)-* :7 (a:avanzar (),)-* (:3 a,)-* a:4 4 a,$-*) $:Reducir a 5 -,$-*) -,$-*) *,$-*) :8 (a:avanzar (),$-*) (:3 a,$-*) a:4 6 *,$-*) -,$-*) *,$-*) :9 (a:avanzar (),$-*) (:3 a,$-*) a:4 7 ( ),$-*) ):10 )-*:Avanzar -,)-* -:5 *,)-* *:6 8 -,$-*) $-*):Reducir - -,$-*) -:5 -*:Avanzar *,$-*) *:6 9 *,$-*) $-*):Reducir * -,$-*) -:5 -*:Avanzar *,$-*) *:6 10 (),$-*) $-*):Reducir () Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p39

112 studio de casos conflictivos stado 8, ventana Reducir - - Avanzar Items Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p40

113 studio de casos conflictivos stado 8, ventana * - * Reducir - * Avanzar Items Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p40

114 studio de casos conflictivos stado 9, ventana - * - * - Reducir Avanzar Items Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p40

115 studio de casos conflictivos stado 9, ventana * * * * * Reducir Avanzar Items Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p40

116 Tabla LALR(1) con ambigüedad resuelt ac: S r1: - r2: * r3: () r4: a Tabla original $ - * ( ) a ac r4 r4 r4 r r1 r1 6 r1 9 r2 r2 r2 r2 10 r3 r3 r3 r3 Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p41

117 Resolución de ambigüedad en yacc (1/2 n conflictos reducción-reducción se reduce la regla más arriba en el texto Para conflictos avance-reducción genera un avance por defecto, pero podemos asociar a los símbolos terminales (y a las reglas): Precedencia: cuál de dos terminales próximos de distinta precedencia se reduce antes Asociatividad: en caso de igual precedencia, si se reduce primero (a) el de la izquierda, (b) el de la derecha ó (c) no es posible Si no se especifica, la regla recibe mismos valores que su terminal más a la derecha Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p42

118 Resolución de ambigüedad en yacc (2/2 l generador no informa sobre si lo que hacemos es correcto o no s un recurso manual de cierto riesgo, incompletamente documentado (conflictos múltiples) A usar sólo en casos típicos de ambigüedad Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p43

119 Formato de un fichero bison Declaraciones en C entre %{ y %} Declaraciones especiales comenzadas por % % % Secuencia de reglas BNF, con acciones en C entre llaves que se ejecutarán al alcanzar ese punto el análisis: % % Normalmente al final de la regla (al reducir, pues) n otro punto de la parte derecha: bison inserta allí un nuevo símbolo ad-hoc I h y añade una regla I h ε (tras cuya reducción se ejecutan las acciones), lo que puede introducir conflictos Rutinas auxiliares al menos yyerror(char*) y/o main Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p44

120 Generación micompy bison -d -v micomptabh milexl flex micomptabc gcc micompoutput lexyyc micomp 1 ditamos un fichero de especificación micompy 2 Normalmente junto con un analizador léxico flex (con #include micomptabh ): 21 bison -d micompy 22 flex milexl 3 Si usamos main() que llame a yyparse(): gcc -o micomp micomptabc lexyyc -lfl Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p45

121 Contenido de micomptabc 1 Declaraciones C iniciales copiadas 2 Función yyparse() que analiza entrada según tabla LALR(1): Invoca yylex() automáticamente (códigos de símbolos en micomptabh) n caso de error invoca yyerror(char*) e intenta recuperación (resincronización) Va ejecutando los bloques de código C en el orden de avance-reducción 3 Rutinas auxiliares copiadas Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p46

122 Símbolos y declaraciones Los símbolos terminales pueden aparecer como: Caracter entre apóstrofos Nombre (al que bison asocia un código), que hay que declarar pe: %token NOMBR Posibilidad de declarar operadores en orden de menor a mayor precedencia, indicando asociatividad: %left, %right ó %nonassoc NOMBR Para asociar precedencia/asociatividad a una regla se le añade %prec NOMBR (es posible definir token auxiliar) %start nombre S permite declarar el símbolo inicial Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p47

123 Reglas y valores (atributos) de símbolos Formato reglas BNF: A : X 1 X n ; n las acciones, $i son atributos en la pila de análisis asociados a X i, y si i =0,-1,, corresponden a posiciones de la pila hacia el fondo Normalmente $$ (correspondiente a A) se calcula a partir de $i n flex ponemos el valor ( no el código!) del token en yylval de tipo YYSTYP Podemos hacer YYSTYP distinto de int, declarando %union {} y asociamos: %token <campo nomb term (o %left, etc) %type <campo nomb noterm1,nomb noterm2, Podemos usar asimismo $<campo i para $i (ídem $$) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p48

124 Algunas acciones especiales yydebug: la ponemos a 0 para que se visualice el análisis (precisa #define YYDBUG 1 u opción -t) YYABORT,YYACCPT: terminan el analizador con indicación de fracaso o éxito (0) YYRROR: fuerza iniciar recuperación de error Se puede llamar antes a yyerror( ) yyerrok: fuerza retorno a modo no-error yyclearin: borra antigua ventana errónea tras recuperación YYRCOVRING(): devuelve 0 si está en modo error Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p49

125 Detección de errores en LR y bison LR detecta error en cuanto (tras un avance) la secuencia pila más ventana deja de ser legal (detección inmediata de errores) Debido a la fusión de estados, LALR sólo garantiza que la pila es legal Se permiten reducciones adicionales, pero no se avanza en la entrada más allá de lo que lo haría LR (prefijo correcto) Las compactaciones de tabla de bison permiten algunas reducciones más, pero conservan la propiedad de prefijo correcto Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p50

126 Tratamiento de errores en bison l token especial error en partes derechas posibilita cierta recuperación ante errores Mecanismo ante error (vía YYRROR entra por 2): 1 Invoca yyerror( parse error ) 2 Mientras no pueda avanzar un token error, elimina el estado en la cima de la pila Avanza el token error 3 Mientras no pueda reanudar el análisis, elimina el terminal de la ventana y lee el siguiente Reanuda el análisis 4 Si consigue avanzar 3 terminales seguidos sin nuevo error: fin de la recuperación Si no, vuelve al punto 2 5 Si se acaba la pila, aborta análisis Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p51

127 jemplo bison (1/3) /* miinty: evaluador de lista de expresiones */ %{ #include <stdioh> extern FIL *yyin; /* declarado en léxico */ extern int numlin; /* léxico le da valores */ int yydebug=1; /* modo debug si -t */ %} %union { float real; int entero; } %token <real> RAL %token <entero> NTRO %type <real> exp %left - %left * Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p52

128 jemplo bison (2/3) %% lista : exp {printf("%f\n", $1);} ; lista /* admite 0 expresiones */ error ; {printf(" en expresion\n");} lista ; exp : exp - exp {$$ = $1 - $3;} exp * exp {$$ = $1 * $3;} ( exp ) {$$ = $2;} RAL {$$ = $1;} NTRO {$$ = $1;} ; Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p53

129 jemplo bison (3/3) %% int main(int argc, char** argv) { if (argc>1) yyin=fopen(argv[1],"r"); yyparse(); } void yyerror(char* mens) { printf("rror en linea %i: %s ",numlin,mens); } Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p54

130 jemplo bison: fichero flex asociado %{ #include "miinttabh" int numlin=1; %} dig [0-9] %% {dig}+ {yylvalentero=atoi(yytext); return NTR {dig}+\{dig}+ {yylvalreal=atof(yytext); return RAL;} \n numlin++; [ \t] ˆ#* [*-;()] return yytext[0]; yyerror("error lexico"); %% Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p55

131 Conclusión LR(1) y LALR(1) permiten considerable flexibilidad para definir una gramática s necesario usar un generador automático, dada la complejidad del cálculo Restricciones al orden en que se ejecutan las acciones semánticas y flujo de valores de atributos Más información en info bison y en libro lex & yacc, de Levine et al (681306) Generación de analizador sintáctico ascendente v11 c 2005 José Fortes Gálvez p56

Generador de analizadores sintácticos BISON

Generador de analizadores sintácticos BISON Generador de analizadores sintácticos BISON PROCESADORES DE LENGUAJES 4 o Informática http://ccia.ei.uvigo.es/docencia/pl noviembre-2008 2008 ccia PL 1. Introducción Traduce la especificación de una gramática

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

Generador de analizadores léxicos FLEX

Generador de analizadores léxicos FLEX Generador de analizadores léxicos FLEX Procesadores de Lenguajes 4 o Informática PL curso 2008-2009 (CCIA) CCIA Octubre 2008 PL 0809 (CCIA) Introducción a FLEX Octubre-2008 1 / 12 Uso de FLEX FLEX: traduce

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

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

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

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

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final Trabajo Final 1 Objetivo Comprender (en gran parte) un programa desarrollado en: C++ (Core ) Generador de código / Ejecución de comandos Flex (Lex) Lexer Genera un Analizador Léxico en C http://en.wikipedia.org/wiki/lex_(software)

Más detalles

Modelos de Computación I. Ingeniería Informática

Modelos de Computación I. Ingeniería Informática Prácticas Pag. 1 Modelos de Computación I Ingeniería Informática Práctica 1 Lex como localizador de expresiones regulares con acciones asociadas Curso 2008-2009 Profesores: Carlos J. Mantas Ruiz Aida Jiménez

Más detalles

Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1

Hoja técnica sobre yacc 1 y lex 2. Introducción. lex PL, 2014/2015 1 PL, 2014/2015 1 Introducción Hoja técnica sobre yacc 1 y lex 2 Los programas yacc y lex son herramientas de gran utilidad para un diseñador de compiladores. Muchos compiladores se han construido utilizando

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

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

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

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

Una Herramienta para el Análisis Léxico: Lex

Una Herramienta para el Análisis Léxico: Lex Una Herramienta para el Análisis Léxico: Lex Alejandro Viloria Lanero (aviloria@infor.uva.es) Teoría de Autómatas y Lenguajes Formales Universidad de Valladolid Como hemos ido viendo, el shell de los sistemas

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

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Repaso TALF Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 La Jerarquía de Chomsky Cuatro niveles de lenguajes formales

Más detalles

2ª Convocatoria 2008/2009 (15-IX-2009) 4º Ing. Informática. CPS. Universidad de Zaragoza Tiempo de realización: 3 horas

2ª Convocatoria 2008/2009 (15-IX-2009) 4º Ing. Informática. CPS. Universidad de Zaragoza Tiempo de realización: 3 horas Tiempo de realización: 3 horas Ejercicio 1 (3 puntos): Se ha definido una cierta sintaxis para representar información de unidades temáticas en un fichero de texto. En este ejercicio nos planteamos el

Más detalles

Unidad 4. Autómatas de Pila

Unidad 4. Autómatas de Pila Unidad 4. Autómatas de Pila Una de las limitaciones de los AF es que no pueden reconocer el lenguaje {0 n 1 n } debido a que no se puede registrar para todo n con un número finito de estados. Otro lenguaje

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

Tema: Autómata de Pila

Tema: Autómata de Pila Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 1 Tema: Autómata de Pila Contenido La presente guía aborda los autómatas de pila, y se enfoca en la aplicación que se le puede dar a estas

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

Introducción a Flex y Bison

Introducción a Flex y Bison Prácticas de Lenguajes, Gramáticas y Autómatas, cuarto cuatrimestre (primavera) de Ingeniería en Informática http://webdiis.unizar.es/asignaturas/lga Profesor Responsable: Rubén Béjar Hernández Dpto. Informática

Más detalles

Construcción de una calculadora con Flex y Bison. Construcción de una calculadora con Flex y Bison. Índice (I)

Construcción de una calculadora con Flex y Bison. Construcción de una calculadora con Flex y Bison. Índice (I) Construcción de una calculadora con Flex y Bison Índice (I) Marina de la Cruz Alfonso Ortega Descripción de la calculadora Reglas de la gramática Los tokens y sus expresiones regulares para Flex Cómo trabajan

Más detalles

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C Algoritmo y Estructura de Datos Ing. M. Laura López 1 Estructura de un programa en C 2 Estructura de un programa en C #include Archivos de cabecera # define Definición de constantes Declaraciones Globales

Más detalles

Teoría de Autómatas y Lenguajes Formales LEX BISON Dr. Eric Jeltsch F. Introducción para los laboratorios y actividades relacionadas.

Teoría de Autómatas y Lenguajes Formales LEX BISON Dr. Eric Jeltsch F. Introducción para los laboratorios y actividades relacionadas. Introducción para los laboratorios y actividades relacionadas. Flex y Bison son las herramientas desarrolladas en el proyecto GNU (Free Software Foundation) equivalentes a lex y yacc en el sistema operativo

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones 1 Curso Básico de Computación 5 Autómatas de pila 5.1 Descripción informal Un autómata de pila es esencialmente un autómata finito que controla una cinta de entrada provista de una cabeza de lectura y

Más detalles

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico

Más detalles

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales Profesor Federico Peinado Elaboración del material José Luis Sia Federico Peinado Facultad de Informática Universidad Complutense

Más detalles

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto EJERCICIOS del TEMA 3: Lenguajes independientes del contexto Sobre GICs (gramáticas independientes del contexto) 1. Sea G una gramática con las siguientes producciones: S ASB ε A aab ε B bba ba c ) d )

Más detalles

E Ú E +T T T Ú T * F F F Ú ( E ) NUM. Queremos calcular: Los pasos que seguiremos serán:

E Ú E +T T T Ú T * F F F Ú ( E ) NUM. Queremos calcular: Los pasos que seguiremos serán: Traductores, Compiladores e Intérpretes 1 Tema 4 Gramáticas Atribuidas. Además de comprobar que un programa cumple con las reglas de la gramática, hay que comprobar que lo que se quiere hacer tiene sentido.

Más detalles

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina.

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina. Traductores, Compiladores e Intérpretes 1 Tema 7 Generación de Código En el modelo de análisis y síntesis de un compilador, la etapa inicial traduce un programa fuente a una representación intermedia a

Más detalles

S Qué es el analizador sintáctico?

S Qué es el analizador sintáctico? Traductores, Compiladores e Intérpretes 1 Tema 3. Análisis Sintáctico. Todo lenguaje de programación tiene reglas que describen la estructura sintáctica de programas bien formados. En Pascal, por ejemplo,

Más detalles

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila.

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila. 0 Temas Definición de autómata de pila Autómata de pila determinístico y no determinístico Objetivo Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2)

Más detalles

Prácticas de Lenguajes, Gramáticas y Autómatas

Prácticas de Lenguajes, Gramáticas y Autómatas Prácticas de Lenguajes, Gramáticas y Autómatas Prácticas 3 y 4 Cuarto cuatrimestre (primavera) de Ingeniería en Informática Curso 2010-2011 http://webdiis.unizar.es/asignaturas/lga Profesor Responsable:

Más detalles

GENERADOR DE COMPILADORES BASADO EN

GENERADOR DE COMPILADORES BASADO EN GENERADOR DE COMPILADORES BASADO EN ANALIZADORES ASCENDENTES Memoria del Proyecto de Final de Carrera Ingeniería Informática realizado por Laia Felip Molina y dirigido por Xavier Sánchez Pujades Bellaterra,

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

Flex a la rápida. José Ignacio Medina

Flex a la rápida. José Ignacio Medina Flex a la rápida José Ignacio Medina Octubre, 2008 Este documento se distribuye bajo una licencia Creative Commons bync-sa 2.0. Usted es libre de copiar, distribuir, comunicar y ejecutar públicamente este

Más detalles

YACC: El Compilador-Compilador. 9.1 Introducción

YACC: El Compilador-Compilador. 9.1 Introducción YACC: El Compilador-Compilador 9.1 Introducción El input de un programa de ordenador tiene generalmente alguna estructura cada programa de ordenador que acepta input se puede pensar como definiendo un

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

Programación. Test Autoevaluación Tema 3

Programación. Test Autoevaluación Tema 3 Programación Test Autoevaluación Tema 3 Autores: M. Paz Sesmero Lorente Paula de Toledo Heras Fco. Javier Ordoñez Morales Juan Gómez Romero José A. Iglesias Martínez José Luis Mira Peidro SOLUCIONES 1.

Más detalles

GUÍA BÁSICA DE FLEX Y BISON

GUÍA BÁSICA DE FLEX Y BISON GUÍA BÁSICA DE FLEX Y BISON PRÁCTICAS COMPILADORES 4º INGENIERÍA INFORMÁTICA / 1º MÁSTER EN INFORMÁTICA Curso 2011/2012 LEX/FLEX: GENERADOR DE ANALIZADORES LÉXICOS 1. Introducción Lex es una de las herramientas

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

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

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

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. MODELOS DE COMPUTACION I Preguntas Tipo Test Indicar si son verdaderas o falsas las siguientes afirmaciones: 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. 2.

Más detalles

Un autómata con pila no determinista (APND) es una septupla Q A B F en la que

Un autómata con pila no determinista (APND) es una septupla Q A B F en la que AUTÓMATAS CON PILA Un autómata con pila no determinista (APND) es una septupla Q A F en la que δ q 0 Q es un conjunto finito de estados A es un alfabeto de entrada es un alfabeto para la pila δ es la función

Más detalles

Autómatas de Pila. Descripciones instantáneas o IDs. El Lenguaje de PDA. Equivalencia entre PDAs y CFGs INAOE (INAOE) 1 / 50

Autómatas de Pila. Descripciones instantáneas o IDs. El Lenguaje de PDA. Equivalencia entre PDAs y CFGs INAOE (INAOE) 1 / 50 INAOE (INAOE) 1 / 50 Contenido 1 2 3 4 (INAOE) 2 / 50 Pushdown Automata Las gramáticas libres de contexto tienen un tipo de autómata que las define llamado pushdown automata. Un pushdown automata (PDA)

Más detalles

FLEX: Un generador de analizadores léxicos. AT&T Lex (más común en UNIX) MKS Lex (MS-Dos) Flex Abraxas Lex Posix Lex ScanGen JLex...

FLEX: Un generador de analizadores léxicos. AT&T Lex (más común en UNIX) MKS Lex (MS-Dos) Flex Abraxas Lex Posix Lex ScanGen JLex... Como hemos visto, el paso de una expresión regular a un AF se puede hacer de manera automatizada Existen varias herramientas que relizan dicho trabajo Generadores de analizadores léxicos AT&T Lex (más

Más detalles

Expresiones regulares, gramáticas regulares

Expresiones regulares, gramáticas regulares Expresiones regulares, gramáticas regulares Los LR en la jerarquía de Chomsky La clasificación de lenguajes en clases de lenguajes se debe a N. Chomsky, quien propuso una jerarquía de lenguajes, donde

Más detalles

Lenguajes y Gramáticas

Lenguajes y Gramáticas Lenguajes y Gramáticas Teoría de Lenguajes Fernando Naranjo Introduccion Se desarrollan lenguajes de programación basados en el principio de gramática formal. Se crean maquinas cada vez mas sofisticadas

Más detalles

Escuela Politécnica Superior de Elche

Escuela Politécnica Superior de Elche EXAMEN DE SISTEMAS INFORMÁTICOS INDUSTRIALES ((SOLUCIÓN) (TEORÍA)jUJ jhshshs SEPTIEMBRE 2015 1. Indicar si las siguientes afirmaciones son verdaderas o falsas: (a) En C++, una clase derivada puede acceder

Más detalles

Fundamentos de Programación 2017-I

Fundamentos de Programación 2017-I Fundamentos de Programación 2017-I Fundamentos para la construcción de código a partir del algoritmo Objetivo: El alumno construirá programas utilizando el lenguaje de programación C a través de un análisis

Más detalles

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo: 1 Clase 3 SSL EXPRESIONES REGULARES Para REPRESENTAR a los Lenguajes Regulares. Se construyen utilizando los caracteres del alfabeto sobre el cual se define el lenguaje, el símbolo y operadores especiales.

Más detalles

Procesadores de lenguaje Tema 2 Análisis léxico

Procesadores de lenguaje Tema 2 Análisis léxico Procesadores de lenguaje Tema 2 Análisis léxico Departamento de Ciencias de la Computación Universidad de Alcalá de Henares Resumen del tema Objetivo: comprender la estructura, organización y funcionamiento

Más detalles

Procesadores de lenguaje Tema 6 La tabla de símbolos

Procesadores de lenguaje Tema 6 La tabla de símbolos Procesadores de lenguaje Tema 6 La tabla de símbolos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen La tabla de símbolos. Requerimientos de información. Diseño de la tabla de

Más detalles

Guía práctica de estudio 05: Diagramas de flujo

Guía práctica de estudio 05: Diagramas de flujo Guía práctica de estudio 05: Diagramas de flujo Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Revisado por: Ing. Laura Sandoval Montaño Guía práctica de estudio 05: Diagramas de

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES

PROGRAMA INSTRUCCIONAL AUTOMATAS Y LENGUAJES FORMALES UNIVERSIDAD FERMIN TORO VICE RECTORADO ACADEMICO UNIVERSIDAD FACULTAD DE INGENIERIA ESCUELA DE MANTENIMIENTO MECÁNICO ESCUELA DE TELECOMUNICACIONES ESCUELA DE ELÉCTRICA ESCUELA DE COMPUTACIÓN PROGRAMA

Más detalles

Estructuras de Datos Declaraciones Tipos de Datos

Estructuras de Datos Declaraciones Tipos de Datos Departamento de Informática Universidad Técnica Federico Santa María Estructuras de Datos Declaraciones Tipos de Datos Temas: 2-3-4 IWI-131, paralelo 01 Profesor: Teddy Alfaro O. Lenguaje de Programación

Más detalles

Gramática abstracta. Gramática abstracta. Forma de escribirlas: Pizquierda : Pderecha <Predicado> atributos o acc. semánticas}

Gramática abstracta. Gramática abstracta. Forma de escribirlas: Pizquierda : Pderecha <Predicado> atributos o acc. semánticas} Gramática abstracta Nos permite enlazar más fácilmente el análisis sintáctico con el semántico se comienza a manejar cuestiones que trabaja el semántico. Denota los aspectos importantes del lenguaje (equivalente

Más detalles

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J.

Sistemas Operativos: Programación de Sistemas. Curso 2006-07. Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Tema 2 : entorno programación linux Sistemas Operativos: Programación de Sistemas Oscar Déniz Suárez Alexis Quesada Arencibia Francisco J. Santana Pérez Curso 2006-07 Francisco J. Santana 1 Programación

Más detalles

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores. 1 Compiladores / Guía VII / Ciclo 02-2016 Centro de Investigación y Transferencia de Tecnología JavaCC Parte I Contenido Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores En la presente

Más detalles

Práctica 3: Construcción de una mini shell Diseño de Sistemas Operativos U.L.P.G.C.

Práctica 3: Construcción de una mini shell Diseño de Sistemas Operativos U.L.P.G.C. Práctica 3: Construcción de una mini shell David Jesús Horat Flotats Índice Introducción...2 Características principales... 3 Diagrama general de bloques... 5 Distribución de los ficheros...6 Lista de

Más detalles

Construcción de tablas de análisis sintáctico LL(1)

Construcción de tablas de análisis sintáctico LL(1) Construcción de tablas de análisis sintáctico LL(1) Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática Diego Centeno Gerardo Cortés Juan Diego Alfaro Resumen. A la medida en

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

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

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid C1 INTRODUCCIÓN AL LENGUAJE C Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid Índice 1. Lenguajes de Programación 1. Definición. 2. Niveles

Más detalles

Entorno de Programación Visual Studio 6

Entorno de Programación Visual Studio 6 Entorno de Programación Visual Studio 6 Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es Programación en C 1 Proceso de Programación Edición

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto Universidad Autónoma del Estado de México Centro Universitario UAEM Texcoco Departamento de Ciencias Aplicadas. Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer,

Más detalles

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA Compiladores APUNTES DE CÁTEDRA EL METACOMPILADOR FLEX 1. Qué es y qué hace FLEX? La característica más destacable de las herramientas que vamos a utilizar

Más detalles

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Lenguaje C Elementos de un Programa Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006 Objetivos Conocer los elementos que conforman un programa en C 1. Elementos léxicos de un Programa Cuando el programa

Más detalles

SOLUCION EXAMEN junio 2006

SOLUCION EXAMEN junio 2006 SOLUCION EXAMEN junio 2006 1. Explique razonadamente si las siguientes afirmaciones son verdaderas o falsas: I) (1 p) En UNIX únicamente se distinguen dos tipos de procesos: los procesos de usuario y los

Más detalles

LENGUAJE. Tema 1 - Introducción

LENGUAJE. Tema 1 - Introducción LENGUAJE Tema 1 - Introducción HISTORIA DEL LENGUAJE C El lenguaje de programación C fue creado por Dennis Ritchie cuando trabajaba en Bell Laboratories de AT&T junto con Ken Thompson en el diseño del

Más detalles

Figura 4.1 Clasificación de los lenguajes de bases de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos 1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje

Más detalles

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática Programación de Computadores 4 Iteraciones y Decisiones Prof. Javier Cañas Universidad Técnica Federico Santa María Departamento de Informática Contenido 1 Introducción 2 Operadores Relacionales y Lógicos

Más detalles

Diseño de Compiladores I YACC: Yet Another Compiler-Compiler

Diseño de Compiladores I YACC: Yet Another Compiler-Compiler Diseño de Compiladores I YACC: Yet Another Compiler-Compiler Introducción: Yacc provee una herramienta general para analizar estructuralmente una entrada. El usuario de Yacc prepara una especificación

Más detalles

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. 1.) (HOLUB). Escribir un traductor que reconozca definiciones de C siguiendo el estilo antiguo, tal como: prueba(uno, dos, tres, cuatro,

Más detalles

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>} Bloque II. 2. Objetos y acciones elementales Bloque II. 2. Objetos y acciones elementales Objetivos: Familiarizarse con conceptos de entorno, objeto y tipo Entender qué significa que un objeto sea de un

Más detalles

41 Jornadas Argentinas de Informática Concurso de Trabajos Estudiantiles 2012. Categoría: Teoría de la Computación, Modelos Formales y Compiladores.

41 Jornadas Argentinas de Informática Concurso de Trabajos Estudiantiles 2012. Categoría: Teoría de la Computación, Modelos Formales y Compiladores. 41 Jornadas Argentinas de Informática Concurso de Trabajos Estudiantiles 2012 Categoría: Teoría de la Computación, Modelos Formales y Compiladores. Título: Implementación de un compilador de C- -. Autor:

Más detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

Más detalles

Autómatas Deterministas. Ivan Olmos Pineda

Autómatas Deterministas. Ivan Olmos Pineda Autómatas Deterministas Ivan Olmos Pineda Introducción Los autómatas son una representación formal muy útil, que permite modelar el comportamiento de diferentes dispositivos, máquinas, programas, etc.

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Programación estructurada (Introducción a lenguaje C)

Programación estructurada (Introducción a lenguaje C) Programación estructurada (Introducción a lenguaje C) M. en C. Sergio Luis Pérez Pérez UAM CUAJIMALPA, MÉXICO, D. F. Trimestre 15-I Sergio Luis Pérez (UAM CUAJIMALPA) Curso de programación estructurada

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 11 Nombre: Manejo de archivos Contextualización En los lenguajes de programación estructurada como C, que carecían de una conexión a base

Más detalles

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen Fundamentos de Informática. Dpto. de ATC - Página 1 de 8 conceptos Manejo de ficheros en C Contienen los datos que se almacenan en dispositivos de almacenamiento masivo: disquetes, discos duros, DROM,

Más detalles

Capítulo 6 Tabla de símbolos

Capítulo 6 Tabla de símbolos Java a tope: Traductores y compiladores con Lex/Yacc, JFlex/Cup y JavaCC Capítulo 6 Tabla de símbolos 6.1 Visión general También llamada «tabla de nombres» o «tabla de identificadores», se trata sencillamente

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

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar.

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. Agenda BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. JLEX y JCUP Breve descripción del las herramientas para generar el parser o analizador sintáctico.

Más detalles

TEMA 3: EL LENGUAJE C: PRESENTACIÓN

TEMA 3: EL LENGUAJE C: PRESENTACIÓN TEMA 3: EL LENGUAJE C: PRESENTACIÓN Historia del lenguaje C Características del lenguaje C Estructura de un programa en C El editor de textos: elementos Funciones: de usuario y de librería Librerías de

Más detalles

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos. ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones

Más detalles

µ-c: Manual de referencia del lenguaje Micro-C

µ-c: Manual de referencia del lenguaje Micro-C µ-c: Manual de referencia del lenguaje Micro-C Introducción Este manual de referencia describe en detalle el lenguaje Micro-C, para ser implementado como proyecto de los cursos de Compíladores I y II en

Más detalles