TEMA 5 ANÁLISIS SINTÁCTICO DESCENDENTE

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

Download "TEMA 5 ANÁLISIS SINTÁCTICO DESCENDENTE"

Transcripción

1 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

2 Objetivos Conocer el análisis descendente con / sin retroceso Estudiar la técnica de análisis descendente Establecer las condiciones LL(1) Transformar gramáticas que no cumplen la condición LL(1) Construir analizadores predictivos Tratar los errores sintácticos Página 2

3 Contenido Introducción El problema del retroceso Análisis sintáctico descendente con retroceso Análisis sintáctico descendente sin retroceso Construcción de analizadores sintácticos descendentes Tratamiento de errores sintácticos. Página 3

4 Introducción Clasificación métodos análisis sintáctico A. Descendentes A. Ascendentes No Direccionales Direccionales Algoritmo de Unger No deterministas Predice / Concuerda 1º Profundidad 1º Anchura Algoritmo CYK Desplaza / Reduce 1º Profundidad 1º Anchura Deterministas Predice / Concuerda Gramática LL(k) - LL(1) Desplaza / Reduce Gramática LR(k) LR(0), SLR(1), LALR(1) Página 4

5 Introducción A. Sintáctico Descendente: Características Los analizadores sintácticos descendentes son llamados predictivos y orientados hacia un fin, debido a la forma en que trabajan y construyen el árbol sintáctico. Construyen el árbol sintáctico de la sentencia a reconocer de una forma descendente, comenzando por el símbolo inicial o raíz, hasta llegar a los símbolos terminales que forman la sentencia. Los algoritmos de análisis descendente deben de cumplir al menos dos condiciones: saber en todo momento dónde se encuentra dentro del árbol sintáctico y debe poder elegir la regla de producción que aplicará. Página 5

6 Introducción A. Sintáctico Descendente: Características Los compiladores dirigidos por sintaxis, en la forma de análisis descendente recursivo fue propuesta por Lucas (1961), para describir un compilador simplificado de ALGOL 60 mediante un conjunto de subrutinas recursivas. Problema: La elegancia y comodidad de la escritura de compiladores dirigidos por sintaxis fue pagada en tiempo de compilación por el usuario. El análisis sintáctico descendente sin retroceso, por medio del uso de gramáticas LL(1), obtenidas por Foster (1965) y Knuth (1967). Generalizadas posteriormente por Lewis, Rosenkrantz y Stearns en 1969, dando lugar a las gramáticas LL(k). Página 6

7 El problema del retroceso Análisis Sintáctico con retroceso El problema se presenta cuando a partir del nodo raíz, el analizador sintáctico no elige las producciones adecuadas para alcanzar la sentencia a reconocer. Se tienen que deshacer las producciones aplicadas hasta encontrar otras producciones alternativas, volviendo a tener que reconstruir parte del árbol sintáctico (backtracking). El retroceso puede afectar a otros módulos del compilador tales como tabla de símbolos, código generado, etc. teniendo que deshacerse también los procesos desarrollados en estos módulos. Página 7

8 El problema del retroceso Análisis Sintáctico con retroceso: Ejemplo VN={<PROGRAMA>, <DECLARACIONES>, <PROCEDIMIENTOS>} VT={module, d, p, ;, end} S=<PROGRAMA> Las reglas de producción: <PROGRAMA> ::= module <DECLARACIONES>; <PROCEDIMIENTOS> end <DECLARACIONES> ::= d d; <DECLARACIONES> <PROCEDIMIENTOS> ::= p p; <PROCEDIMIENTOS> Analizar la cadena de entrada: module d ; d ; p ; p end Página 8

9 El problema del retroceso Análisis Sintáctico con retroceso: Ejemplo 1. Se parte del símbolo inicial <PROGRAMA> 2. Aplicando la primera regla de producción de la gramática se obtiene <PROGRAMA> module <DECLARACIONES> ; <PROCEDIMIENTOS> end 3. Aplicando las derivaciones más a la izquierda, se tiene que: <PROGRAMA> module <DECLARACIONES> ; <PROCEDIMIENTOS> end d p Página 9

10 El problema del retroceso Análisis Sintáctico con retroceso: Ejemplo Se deriva con la segunda alternativa <PROGRAMA> module <DECLARACIONES> ; <PROCEDIMIENTOS> end Se debe volver atrás d p ; <PROCEDIMIENTOS> <PROGRAMA> module <DECLARACIONES> ; <PROCEDIMIENTOS> end d ; <DECLARACIONES> p d Página 10

11 El problema del retroceso Análisis Sintáctico con retroceso: Ejemplo Se debe volver atrás <PROGRAMA> module <DECLARACIONES> ; <PROCEDIMIENTOS> end d ; <DECLARACIONES> p ; <PROCEDIMIENTOS> d p Los tiempos de reconocimiento de sentencias de un lenguaje pueden dispararse a causa del retroceso. Página 11

12 Análisis sintáctico descendente con retroceso Algoritmo de ASD con retroceso 1. Se colocan las reglas de la gramática según un orden preestablecido. 2. Se comienza el árbol sintáctico a partir del símbolo inicial, y se aplican las reglas en forma recursiva. Al nodo en expansión se le llama nodo activo. A x 1 x 2...x n crea n descendientes directos. A x 1 x 2... x n se elegirá la alternativa de más a la izquierda. 3. Si el nodo activo es un terminal se compara con el símbolo actual de la cadena. Si son iguales se avanza un token de entrada y el nuevo símbolo actual será el situado más a la derecha del terminal analizado. Si no son iguales se retrocede hasta un nodo no terminal y se reintenta eligiendo la siguiente alternativa. Si se llega al símbolo inicial la cadena no pertenece al lenguaje Página 12

13 Análisis sintáctico descendente con retroceso Corolario Una gramática de contexto libre, si es una gramática limpia y no es recursiva a izquierdas, para cualquier cadena de símbolos de su alfabeto terminal existe un número finito de posibles análisis a izquierda desde el símbolo inicial para reconocerla o no. Se pueden construir analizadores sintácticos descendentes con retroceso. Su principal problema es el tiempo de ejecución. Página 13

14 Análisis sintáctico descendente sin retroceso Gramáticas LL(k) Las gramáticas LL(k) son un subconjunto de las GLC. Permiten un análisis descendente determinista por medio del reconocimiento de la cadena de entrada de izquierda a derecha ("Left to right") y que va tomando las derivaciones más hacia la izquierda ("Leftmost") con sólo mirar los k tokens situados a continuación de donde se halla. Si k=1 se habla de gramáticas LL(1). Las gramáticas LL(1) permiten construir un analizador determinista descendente con tan sólo examinar en cada momento el símbolo actual de la cadena de entrada para saber que producción aplicar. Página 14

15 Análisis sintáctico descendente sin retroceso Gramáticas LL(k) Teorema S-gramáticas Una gramática LL(k) es no ambigua Una gramática LL(k) no es recursiva a izquierdas Son un subconjunto muy restringido de las gramáticas LL(1) Debe cumplir las siguientes dos condiciones: 1. Todas las partes derechas de cada producción comienzan con un símbolo terminal. 2. Si dos producciones tienen la misma parte izquierda, entonces su parte derecha comienza con diferentes símbolos terminales. A: A a 1 α 1 a 2 α 2... a m α m se debe cumplir que: a i a j i j a i VT α i V * 1 i m Página 15

16 Análisis sintáctico descendente sin retroceso Gramáticas LL(k) Corolario de la definición de S-gramática Toda S-gramática es LL(1), la inversa no es cierta. Ejemplos: S a T S T b S T b T T b a S a b R S b R b S R a R b R S p X S q Y X a X b X x Y a Y d Y y No es S-gramática Página 16

17 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Conjunto de símbolos INICIALES Se define el conjunto de símbolos iniciales o cabecera de un símbolo α (VT VN) *, como el conjunto de símbolos terminales que pueden aparecer al principio de cadenas derivadas de α. La definición anterior se puede expresar como: INICIALES(α) = {a / α a... siendo a VT } * Si α a σ 1...σ n entonces {a} INICIALES(α) con a VT * Si α λ entonces {λ} INICIALES(α) Página 17

18 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Algoritmo para calcular el conjunto de iniciales Repetir hasta que no se puedan añadir más símbolos terminales o λ al conjunto 1. Si X es un terminal o λ, entonces INICIALES (X) = {X} 2. Si X es un no-terminal, entonces para cada producción de la forma X X 1 X 2...X n, INICIALES (X) contiene a INICIALES (X 1 ) {λ}. Si también para algún i < n todos los conjuntos INICIALES (X 1 )... INICIALES (X i ) contienen a λ, entonces INICIALES (X) contiene a INICIALES (X i+1 ) {λ}. Si todos los conjuntos INICIALES (X 1 )... INICIALES (Xn) contiene λ, entonces INICIALES (X) también contiene a λ. Página 18

19 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Algoritmo para calcular el conjunto de iniciales 3. Se define INICIALES (α), para cualquier cadena α = X 1 X 2...X n, de terminales y no-terminales, de la manera siguiente. INICIALES (α) contiene a INICIALES (X 1 ) {λ}. Para cada i = 2,...,n si INICIALES (X k ) contiene a λ para toda k = 1,...i-1, entonces INICIALES(α) contiene a INICIALES (X i ) - {λ}. Finalmente, si para todo i = 1...n, INICIALES (X i ) contiene λ, entonces INICIALES (α) contiene a λ. Página 19

20 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Seudocódigo del algoritmo para todo no terminal A for todo no terminal A do INICIALES(A) := {} while existan cambios en cualquier INICIALES(A) do for cada selección de producción A X 1 X 2...X n do k :=1; continuar = verdadero; while contiuar = verdadero and k <= n do añadir INICIALES(X k )- {λ} a INICIALES(A) if λ no esta en INICIALES(X k ) then continuar := falso; k := k+1; if continuar = verdadero then agregar λ a INICIALES(A); Página 20

21 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Ejemplos: S A B e A d B A a S A c B A S B b Conjunto de Símbolos Iniciales INICIALES (A) = {d, a, c} INICIALES (S) = INICIALES(A)={d, a, c} INICIALES (B) = INICIALES(A) {b} ={d, a, c, b} exp term exp exp opsuma term exp λ opsuma + - term factor term term opmult factor term λ opmult * factor ( exp ) numero INICIALES (exp) = {(, numero} INICIALES (exp ) = {+,-, λ} INICIALES (opsuma) = {+, -} INICIALES (term) = {(, numero} INICIALES (term ) = {*, λ} INICIALES (opmult) = {*} INICIALES (factor) = {(, numero} Página 21

22 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Gramáticas LL(1) simples Las gramáticas LL(1) simples son un subconjunto de las gramáticas LL(1), con las dos restricciones siguientes: 1. No se permiten símbolos no terminales que deriven a vacío. 2. Las distintas producciones de cada no terminal A VN A α 1 α 2... α n deben cumplir que los conjuntos INICIALES(α 1 ), INICIALES(α 2 ),..., INICIALES(α n ) sean disjuntos entre sí. INICIALES(α i ) INICIALES(α j ) = i j Página 22

23 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Corolario de las gramáticas LL(1) simples Toda gramática LL(1) simple es LL(1), lo contrario no es cierto. Teorema de equivalencia entre gramáticas LL(1) y S-gramáticas Dada una gramática LL(1) simple siempre es posible encontrar una S-gramática equivalente. Ejemplo: S A B e A d B A a S A c B A S B b Página 23

24 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Conjunto de símbolos SEGUIDORES Se define el conjunto de símbolos seguidores o siguientes para un símbolo no terminal A como el conjunto de símbolos terminales que en cualquier momento de la derivación pueden aparecer inmediatamente a la derecha de (o después de) A SEGUIDORES (A) = { a / S βaaδ con β, δ (VT VN) * } Página 24

25 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Algoritmo para calcular el conjunto de Seguidores Repetir hasta que no cambie el conjunto de seguidores 1. Si A es el símbolo inicial, entonces $ está en SEGUIDORES (A). 2. Si hay una producción B αaγ, entonces INICIALES (γ) {λ} SEGUIDORES (A) 3. Si existe una producción B αa ó B αaγ tal que λ INICIALES (γ) entonces SEGUIDORES (B) SEGUIDORES (A) Página 25

26 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Seudocódigo del algoritmo para el cálculo de conjuntos de Seguidores SEGUIDORES (símbolo-inicial) := {$}; for todos los no terminales A símbolo-inicial do SEGUIDORES(A):={}; while existan cambios en cualquier conjunto SEGUIDORES do for cada producción A X 1 X 2...X n do for cada X i que sea un no terminal do añadir INICIALES (X i+1 X i+2...x n ) - {λ} a SEGUIDORES (X i ) (* NOTA: si i=n, entonces X i+1 X i+2...x n = λ *) if λ está en INICIALES(X i+1 X i+2...x n ) then añadir SIGUIENTE (A) a SIGUIENTE (X i ) Página 26

27 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Ejemplos: Conjunto de Símbolos Seguidores sentencia sent-if otra sent-if if (exp) sentencia parte-else parte-else else sentencia λ exp 0 1 SEGUIDORES (sentencia) = {$, else} SEGUIDORES (sent-if) = {$, else} SEGUIDORES (parte-else) = {$, else} SEGUIDORES (exp) = {)} exp term exp exp opsuma term exp λ opsuma + - term factor term term opmult factor term λ opmult * factor ( exp ) numero SEGUIDORES (exp) = {$, )} SEGUIDORES (exp ) = {$, )} SEGUIDORES (opsuma) = {(, numero} SEGUIDORES (term) = {$, ), +, -} SEGUIDORES (term ) = {$, ), +, -} SEGUIDORES (opmult) = {(, numero} SEGUIDORES (factor) = {$, ), +,-,*} Página 27

28 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Conjunto de símbolos DIRECTORES Los símbolos directores de una producción A αson los que dirigen al analizador sintáctico para elegir la alternativa adecuada. Se definen como el conjunto de símbolos terminales que determinarán que expansión de un no terminal se ha de elegir en un momento dado, con solo mirar un símbolo hacia delante. SD (A, α ) INICIALES (α) si α es no anulable INICIALES (α) SEGUIDORES (A) si α es anulable Página 28

29 Análisis sintáctico descendente sin retroceso Gramáticas LL(1) Definición La condición necesaria y suficiente para que una gramática limpia sea LL(1), es que los símbolos directores correspondientes a las diferentes expansiones de cada símbolo no terminal sean conjuntos disjuntos. La condición es necesaria, puesto que si un símbolo aparece en dos conjuntos de símbolos directores, el analizador sintáctico descendente no puede decidir que expansión aplicar. La condición es suficiente, puesto que el analizador siempre puede escoger una alternativa correcta. Si el símbolo no está contenido en ninguno de los conjuntos, la cadena de entrada no pertenece al lenguaje. Página 29

30 Análisis sintáctico descendente sin retroceso Condiciones de las gramáticas LL(1) Primera condición de Knuth No se permitirán producciones de la forma A A α donde A a VN y α V *. Esta condición equivale a no admitir la recursividad a izquierdas. Segunda condición de Knuth Los símbolos terminales que pueden encabezar las distintas alternativas de una regla de producción deben formar conjuntos disjuntos. No debe ocurrir que: A * Bβ Cγ A,B,C VN β, γ V * * B ds d VT C * dψ S, ψ V * Página 30

31 Análisis sintáctico descendente sin retroceso Condiciones de las gramáticas LL(1) Tercera condición de Knuth Si una alternativa de un símbolo no terminal origina la cadena vacía, entonces: (INICIALES (A) SEGUIDORES(A) = ) Sea la cadena A 1... A 2... A 3 A 4 A 5 y sea A 3 el símbolo que se está analizando, además se tienen las producciones: A 3 ax λ A 4 A 3 ay Dado que A 3 puede derivar a la cadena vacía, puede darse el caso de que: INICIALES(A 3 )= { a } INICIALES(A 4 )= { a } y no puede determinarse si se ha de elegir la producción de A 3 o de A 4 Página 31

32 Análisis sintáctico descendente sin retroceso Condiciones de las gramáticas LL(1) Cuarta condición de Knuth Ningún símbolo no terminal puede tener dos o más alternativas que conduzcan a la cadena vacía. Esta condición deriva de la anterior. Así por ejemplo no se permite. X A B A λ C B λ D Página 32

33 Análisis sintáctico descendente sin retroceso Transformación de gramáticas No se puede saber si un determinado lenguaje puede ser generado o no por una gramática LL(1), hasta que no se encuentre esta gramática. GRAMÁTICAS LIBRES DE CONTEXTO No existe ningún algoritmo general que transforme una gramática a LL(1). NO AMBIGUAS LL(1) En algunos casos, se puede obtener una gramática equivalente por medio de las transformaciones. Página 33

34 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Eliminación de la recursividad a izquierdas Se dice que una gramática tiene recursividad a izquierdas, si existe un no terminal A, tal que para algún α V * existe una derivación de la forma: Α + Α α EJEMPLO (1) (2) (3) (4) (5) S aac A Ab λ S S a A c S a A c S a A c S a A c A b A b A b Reconocer la cadena abbc A b A b A b Página 34

35 Análisis sintáctico descendente sin retroceso Transformación de gramáticas 1ª) Transformación (1) (2) (3) (4) (5) S aac A λ Ab S S a A c S a A c S a A c S a A c A b A b A b 2ª) Transformación (1) (2) (3) (4) (5) S aac A λ ba S S a A c S a A c S a A c S a A c b A b A b A b A b A Página 35

36 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Eliminación de la recursividad a izquierdas directa A A α β A A A ß C Se sustituye por: A β C C αc λ A A C C Caso general Bucle infinito A A α 1 A α 2... A α n β 1 β 2 β 3... β n β i no comienza por A A β 1 C β 2 C... β n C C α 1 C α 2 C... α n C λ Página 36

37 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Eliminación de la recursividad a izquierdas indirecta El método para resolver las recursividades indirectas es convertirlas a recursividades directas por medio de sustituciones. Ejemplo: <PROGRAMA> ::= <BLOQUE>. <BLOQUE> ::= <SENTENCIAS> ; <SENTENCIAS> ::= <PROCEDURE> return end <PROCEDURE> ::= <BLOQUE> exit Gramática equivalente <PROCEDURE> ::= <BLOQUE> exit <PROCEDURE> ::= <SENTENCIAS> ; exit <PROCEDURE> ::= <PROCEDURE> return ; exit <PROCEDURE> ::= end ; exit <PROGRAMA> ::= <BLOQUE>. <BLOQUE> ::= <SENTENCIAS> ; <SENTENCIAS> ::= <PROCEDURE> return end <PROCEDURE> ::= end ; exit <C> <C> ::= return ; exit <C> λ Página 37

38 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Factorización y sustitución Trata de agrupar las producciones que comienzan por el mismo símbolo no anulable, realizar sustituciones de reglas o incluir nuevos símbolos no terminales. Algoritmo A αβ 1 αβ 2... αβn γ Primer paso: para cada no terminal A buscar el prefijo más largo común a dos o más alternativas de dicho no terminal. Segundo paso: Si α ε, sustituir todas las producciones de A por: A α C γ C β 1 β 2... β n Página 38

39 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Ejemplo: Factorización y sustitución <EXP> ::= <EXP> + <TERMINO> <EXP> - <TERMINO> <TERMINO> <TERMINO> ::= <TERMINO> * <FACTOR> <TERMINO> / <FACTOR> <FACTOR> <FACTOR> ::= <PRIMARIO> ^ <FACTOR> <PRIMARIO> <PRIMARIO> ::= - <PRIMARIO> <ELEMENTO> <ELEMENTO> ::= ( <EXP> ) identificador constante Aplicando factorización y sustitución <N1> ::= + <TERMINO> - <TERMINO> <N2> ::= * <FACTOR> / <FACTOR> <N3> ::= ^ <FACTOR> <vacío> <EXP> ::= <EXP> <N1> <TERMINO> <TERMINO> ::= <TERMINO> <N2> <FACTOR> <FACTOR> ::= <PRIMARIO> <N3> <PRIMARIO> ::= - <PRIMARIO> <ELEMENTO> <ELEMENTO> ::= ( <EXP> ) identificador constante Página 39

40 Análisis sintáctico descendente sin retroceso Transformación de gramáticas <EXPRESION> ::= <TERMINO> <MAS_TERMINOS> <MAS_TERMINOS> ::= + <TERMINO> <MAS_TERMINOS> <MAS_TERMINOS> ::= - <TERMINO> <MAS_TERMINOS> <MAS_TERMINOS> ::= <VACIO> <TERMINO> ::= <FACTOR> <MAS_FACTORES> <MAS_FACTORES> ::= * <FACTOR> <MAS_FACTORES> <MAS_FACTORES> ::= / <FACTOR> <MAS_FACTORES> <MAS_FACTORES> ::= <VACIO> <FACTOR> ::= <PRIMARIO> <EXP> <EXP> ::= ^ <FACTOR> <EXP> ::= <VACIO> <PRIMARIO> ::= - <PRIMARIO> <PRIMARIO> ::= <ELEMENTO> <ELEMENTO> ::= ( <EXPRESION> ) <ELEMENTO> ::= identificador <ELEMENTO> ::= constante <VACIO> ::= λ Página 40

41 Análisis sintáctico descendente sin retroceso Transformación de gramáticas Transformación mediante aspectos semánticos En algunos lenguajes de programación es necesario conocer más información que la estrictamente sintáctica, para elegir el símbolo director en cada momento. Ejemplo: <BLOQUE> ::= begin <ETIQ_SENT> end (1) aa: x:= 5 <ETIQ_SENT> ::= <ETIQUETA> <SENT> (2) yy:= 5 <ETIQUETA> ::= identificador : λ <SENT> ::= while <COND> DO <SENT> <VARIABLE> := <EXPRESION> repeat <SENT> until <EXPRESION> for <VARIABLE> := <EXPRESION> do <SENT> goto constante case <EXPRESION> of <lista_case> end... <VARIABLE> ::= identificador... Página 41

42 Construcción de analizadores sintácticos descendentes Técnicas de construcción Métodos basados directamente en la sintaxis. Analizadores sintácticos descendentes recursivos. Analizadores sintácticos descendentes dirigidos por tabla. Analizadores sintácticos descendentes basados en máquinas de tipo 2 o de pila. Analizadores sintácticos descendentes dirigidos por estructuras de datos. Página 42

43 Construcción de analizadores sintácticos descendentes Métodos basados directamente en la sintaxis Reglas de construcción de diagramas sintácticos Operación BNF Diagrama Conway Secuencial AB A B Métodos sencillos para dar los primeros pasos entre teoría e implementación. A B A Alternativa B Repetitiva λ B {B} 1 o más [B] 0 o más B B Toda gramática reconocible mediante el método de los diagramas de Conway es LL(1). B Página 43

44 Construcción de analizadores sintácticos descendentes Métodos basados directamente en la sintaxis Traducción de reglas sintácticas a programas Los símbolos no terminales son procedimientos, funciones o métodos. Los símbolos terminales son tokens enviados por el analizador léxico. Las reglas de producción se traducen a estructuras de control. Página 44

45 Construcción de analizadores sintácticos descendentes Métodos basados directamente en la sintaxis Ejemplo 1: Factor La regla de producción A S 1 S 2 S 3... S n se traduce a una sentencia multialternativa identificador factor ( ){ switch (token) { case ID : get_token ( ); break; case NUM : get_token ( ); break; case NOT : get_token ( ); factor ( ); break; case AB_PAR : get_token ( ); expresion ( ); if (token!= CE_PAR) {Error: Paréntesis de cierre} else get_token ( ); break; default : Error : Expresión no válida. } } donde token Símbolos Directores (A, S 1 S 2... S n ) numero NOT factor ( expresion ) Página 45

46 Construcción de analizadores sintácticos descendentes Métodos basados directamente en la sintaxis Ejemplo 2: Expresión-simple La regla de producción A SA λ o A SA S se traduce a una sentencia repetitiva + - termino + expr_simple ( ) { OR if ((token == MAS) (token == MENOS)) { get_token( ); } termino ( ); while ((token == MAS) (token == MENOS) (token == OR)) { get_token( ); termino ( ); } } - termino Página 46

47 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos La condición necesaria para que un analizador descendente recursivo opere correctamente es que la gramática del lenguaje fuente sea LL(1). Se considera a cada regla de la gramática como la definición de una función o método que reconocerá al no terminal de la parte izquierda. El lado derecho de la regla especifica la estructura del código para ese método o función. Los símbolos terminales corresponden a concordancias con la entrada. Los símbolos no terminales con llamadas a funciones o métodos. Las diferentes alternativas a casos condicionales en función de lo que se esté examinando en la entrada. Página 47

48 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos Implementación de un analizador sintáctico descendente recursivo Una función denominada Match Funcion Match(terminal) inicio si (token-actual == terminal) entonces obtener siguiente token sino error sintáctico fin Una función para cada no terminal con la siguiente estructura: Para las reglas de la forma A α 1 α 2... α n decidir la producción a utilizar en función de los conjuntos INICIALES(α i ).. Página 48

49 Construcción de analizadores sintácticos descendentes Analizadores sintácticos recursivos descendentes Funcion A() inicio segun token-actual está en: INICIALES(α 1 ): { proceder según alternativa α 1 } INICIALES(α 2 ): { proceder según alternativa α 2 }... INICIALES(α n ): { proceder según alternativa α n } Fin-segun si token-actual no pertenece a ningún INICIALES (α n ) entonces error sintáctico, excepto si existe la alternativa A ε en cuyo caso no se hace nada. Fin Página 49

50 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos Para cada alternativa α i del no terminal, proceder analizando secuencialmente cada uno de los síımbolos que aparece en la parte derecha. Si es un no terminal entonces hacer una llamada a su función Si es un terminal entonces hacer una llamada a la función Match con ese terminal como argumento. Para lanzar el analizador sintáctico se hace una llamada a la función asociada al símbolo inicial de la gramática. No olvidar hacer una llamada previa al analizador léxico para inicializar la variable con el primer token del fichero de entrada. Página 50

51 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos Ejemplo: Construir un ASD recursivo para la siguiente gramática instruccion identificador = exp ; exp termino mastermino mastermino + termino mastermino λ termino identificador constante #include<stdio.h> #include"tokens.h int tokenactual;... /* otras declaraciones */ void main(){ tokenactual=yylex(); instruccion(); } SDescendente.c Página 51

52 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos void terminal(int token, char *menscasoerror){ if(tokenactual==token) tokenactual=yylex(); else hayerror(menscasoerror); instruccion } identificador = exp ; void instruccion(){ terminal(identificador, Se esperaba ID ); terminal(asignacion, Se esperaba = ); expresion(); terminal((int) ;, Se esperaba ; ); } void expresion(){ exp termino termino(); mastermino mastermino(); } Página 52 SDescendente.c

53 Construcción de analizadores sintácticos descendentes Analizadores sintácticos descendentes recursivos void termino(){ if(tokenactual==identificador) terminal(identificador, "Se esperaba ID"); termino else if(tokenactual==constante { identificador terminal(constante, "Se esperaba CTE"); constante else hayerror("se esperaba un ID o CTE"); } void mastermino(){ mastermino + termino mastermino λ if(tokenactual=='+'){ terminal((int) +, Se esperaba + ); termino(); mastermino(); } /* el else: corresponde a la producción λ */} SDescendente.c /*... funcion hayerror */ Página 53

54 Construcción de analizadores sintácticos descendentes Analizadores sintácticos dirigidos por tabla El hecho de que haya reglas recursivas hace que el analizador predictivo implementado directamente sea recursivo. Sin embargo, la recursividad se puede evitar mediante el uso explícito de una pila. Esquema general Entrada Analizador... b c a...$ Sintáctico Z Y K $ Pila de símbolos (a reconocer) Salida A X X Z Y k Matriz bidimensional. Es lo único que cambia de un analizador a otro. Tabla de análisis M[X,a] Producciones utilizadas en el análisis de la secuencia de entrada.. Página 54

55 Construcción de analizadores sintácticos descendentes Analizadores sintácticos dirigidos por tabla Construcción de la tabla de análisis sintáctico Entrada: una gramática G Salida: la tabla de análisis sintáctico, con una fila para cada no-terminal, una columna para cada terminal y otra para $ Método: Ampliar la gramática con una producción S S$ Para cada producción de la gramática A α hacer: Para cada terminal a PRIMEROS(α), añadir la producción A α en la casilla M[A,a]. Si λ PRIMEROS(α), añadir A α en la casilla M[A,b] b SIGUIENTES(A). Las celdas de la tabla que hayan quedado vacías se definen como error. Las gramáticas LL(1) garantizan que solo aparezca una producción por casilla Página 55

56 Construcción de analizadores sintácticos descendentes Analizadores sintácticos dirigidos por tabla Ejemplo: id + * ( ) $ E ::= T E E TE TE E ::= + T E λ T ::= F T T ::= * F T λ F ::= ( E ) Id E T T FT +TE λ *FT FT λ λ λ λ INIC (T E ) = {(, id} INIC (+T E ) = {+} INIC (λ ) = {λ} INIC (F T ) = {(,id} INIC (* F T ) = {*} INIC ( ( E ) ) = {(} INICIALES (id) = {id} F SEG (E ) = {$, )} SEG (T ) = {+,$,)} id (E) Tabla de análisis sintáctico Página 56

57 Construcción de analizadores sintácticos descendentes Analizadores sintácticos dirigidos por tabla Pila Entrada Producción $ E $ E T $ E T F $ E T Id $ E T $ E T F * $ E T F $ E T Id $ E T $ E $ E T + $ E T $ E T F $ E T Id $ E T $ E $ Id * Id + Id $ Id * Id + Id $ Id * Id + Id $ Id * Id + Id $ * Id + Id $ * Id + Id $ Id + Id $ Id + Id $ + Id $ + Id $ + Id $ Id $ Id $ Id $ $ $ $ E::= T E T::= F T F::= Id T ::= * F T F::= Id T ::= λ E ::= + T E T::= F T F::= Id T ::= λ E ::= λ Página 57

58 Construcción de analizadores sintácticos descendentes Analizadores sintácticos basados en AP Si la gramática es LL(1) el autómata de pila será determinista. entrada Entrada: La cadena w$ a reconocer y una gramática G. Salida: Si w$ L(G), la derivación más a la izquierda de la cadena de entrada, sino una indicación de error. Método: Como configuración inicial se tiene en el fondo de la pila el símbolo $, el símbolo inicial de la gramática S en la cima y la cadena w$ en el buffer de entrada. token1 token2 token3... tokenn-1 tokenn cabeza de lectura CONTROL DE ESTADOS tope Z Y X. A $ Pila apila desapila Página 58

59 Construcción de analizadores sintácticos descendentes Analizadores sintácticos basados en AP Algoritmo para el análisis sintáctico descendente determinista REPETIR SEGÚN sea el símbolo del tope de la pila Terminal: Si el símbolo de entrada (token) coincide con el terminal entonces Coger siguiente token Extraer el símbolo de la pila Sino Error No-Terminal: Utilizar el símbolo no-terminal y el símbolo de entrada (token) para determinar la producción correspondiente Si se encuentra la producción X Y 1 Y 2... Y k entonces Extraer el símbolo no-terminal X Introducir Y k, Y k-1,... Y 1 en la pila Sino Error HASTA (Pila vacía o error) Si la pila está vacía entonces Aceptar la cadena de entrada Sino Error (Y 1 estaría en el tope de la pila) Página 59

60 Construcción de analizadores sintácticos descendentes Analizadores sintácticos dirigidos por ED Se supone que una gramática está formada por un conjunto determinista de grafos sintácticos. Cada nodo se puede representar por: Secuencial - Símbolo terminal Alternativa - Símbolo no terminal puntero a la estructura de datos que representa el símbolo. S 1 Símbolo Sucesor Alternativa S 3 Fueron propuestos por Wirth con el objetivo de construir analizadores genéricos Repetitiva S S 1 S 2 S 3 S n S 2 vacío S n NIL NIL Página 60

61 Tratamiento de errores sintácticos Los errores en programación pueden ser: Léxicos: producidos al escribir mal un identificador, una palabra clave, un operador, etc Sintácticos: cuando la secuencia de tokens enviados por el analizador léxico no son reconocidos por la gramática que describe el lenguaje. Pueden ser producidos por una expresión aritmética o paréntesis no equilibrados, etc. Semánticos: producidos como consecuencia de la aplicación de un operador a un operando incompatible, etc. Página 61

62 Tratamiento de errores sintácticos Un gestor de errores debe proporcionar las siguientes funciones: Determinar si el programa es sintácticamente correcto. Proporcionar un mensaje de error significativo: parser error: linea 10 columna 4, simbolo encontrado f símbolo esperado ; Declarar que ha ocurrido un error tan pronto como sea posible. Esperar demasiado tiempo significa que la ubicación real del error puede haberse perdido. Reanudar el análisis tan pronto como sea posible. Debería intentar analizar tanto código como fuera posible para detectar los errores reales. Evitar errores en cascada. Un error genera una secuencia de mensajes de error falsos. Evitar bucles infinitos en los que se genera una cascada sin fin de mensajes de error. Para evitarlo se debe ignorar parte de la entrada. Realizar una reparación del error. El analizador intenta inferir un programa correcto de uno incorrecto. Página 62

63 Tratamiento de errores sintácticos Recuperación de errores Los métodos de recuperación de errores suelen ser métodos ad-hoc, en el sentido de que se aplican a lenguajes específicos y a métodos concretos de análisis Sintáctico (descendente, ascendente. etc), con muchas situaciones particulares. Existen varias estrategias para corregir errores, una vez detectados Recuperación en modo de alarma (Panic mode ): Consiste en ignorar el resto de la entrada hasta llegar a una condición de seguridad, un token especial (por ejemplo un ; o un END ). Error id = id [ id ] id [ id ] = id [ id ] ; id [ id ] = id ; Token especial utilizado para continuar la compilación a partir de él Ejemplo: aux = a[i] a[i] = a[j]; a[j] = aux; Página 63

64 Tratamiento de errores sintácticos Recuperación de errores Recuperación a nivel de frase: Intenta recuperar el error una vez descubierto. En el caso anterior, por ejemplo, podría haber sido lo suficientemente inteligente como para insertar el token ;. Hay que tener cuidado con este método ya que caben varias posibilidades. Reglas de producción adicionales para el control de errores:la gramática se puede aumentar con las reglas que reconocen los errores más comunes. sent_errónea sent_sin_acabar sentencia_acabada sentencia_acabada sentencia ; sent_sin_acabar sentencia Corrección Global: el analizador sintáctico le pide toda la secuencia de tokens al léxico, y lo que hace es devolver lo más parecido a la cadena de entrada pero sin errores, así como el árbol que lo reconoce. Página 64

65 Tratamiento de errores sintácticos Recuperación de errores en ASD recursivos Una forma estándar de recuperación de errores en los ASD recursivos se denomina Modo de alarma. Consiste en proporcionar a cada procedimiento (cada no-terminal de la gramática) un parámetro extra, un conjunto de tokens de sincronización. Según se va efectuando el análisis, los tokens que pueden funcionar como tokens de sincronización se agregan según se vayan realizando las llamadas. Si se encuentra un error, el analizador explora hacia delante, desechando tokens hasta encontrar uno que pertenezca al conjunto reanudándose así el análisis. Las cascadas de error se evitan al no generar nuevos errores mientras tiene lugar esta exploración. Página 65

66 Tratamiento de errores sintácticos Recuperación de errores en ASD recursivos Qué tokens se agregan al conjunto de sincronización en cada punto del análisis sintáctico? Los conjuntos de SEGUIDORES Los conjuntos de INICIALES para evitar que el manejador de errores omita tokens importantes que inicien nuevas construcciones (sentencias, expresiones) Ejemplo: Sea la gramática de expresiones: exp term exp exp opsuma term exp λ opsuma + - term factor term term opmult factor term λ opmult * factor ( exp ) numero Página 66

67 Tratamiento de errores sintácticos Recuperación de errores en ASD recursivos Además del procediemiento Match y los correspondientes a cada símbolo no terminal se añaden dos procedimientos nuevos: checkinput y scanto. Esquematizado en seudocódigo quedaría de la siguiente forma: procedimiento scanto(synchset); begin while not (token in synchset {$}) do gettoken; end scanto; procedimiento checkinput(firstset, FOLLOWSet); begin if not (token in FIRSTSet) then error; scanto (FIRSTSet FOLLOWSet); end if; end checkinput; Es el consumidor de tokens en modo de alarma Realiza la verificación temprana en modo de alarma Página 67

68 Tratamiento de errores sintácticos Recuperación de errores en ASD recursivos Estos procedimientos se utilizan como sigue en los procedimientos exp y factor: procedimiento exp(synchset); begin checkinput ({(,numero}, synchset); if not (token in synchset) then term (synchset); while token = + or token = - do match (token); term (synchset); end while; checkinput(synchset, {(,numero}); end if; end exp; procedimiento factor(synchset); begin checkinput ({(,numero}, synchset); if not (token in synchset) then case token of ( : match ((); exp ({)}); match ()); numero: match(numero); else error; end case; checkinput(synchset, {(,numero}); end if; end factor; Página 68

69 Tratamiento de errores sintácticos Recuperación de errores en ASD recursivos checkinput es llamado dos veces en cada procedimiento: Para verificar que un token en el conjunto Iniciales sea el token siguiente en la entrada. Para verificar que un token en el conjunto Siguiente sea el token siguiente en la salida. En general synchset se pasa en las llamadas recursivas con nuevos tokens de sincronización agregados de manera apropiada. Para obtener los mejores mensajes de error y recuperación de errores, toda prueba de token se debe examinar por la probabilidad de que una prueba más general o más temprana mejore el comportamiento del error. Página 69

70 Tratamiento de errores sintácticos Recuperación de errores Wirth especifica las características de un buen analizador sintáctico: 1. Ninguna sentencia debe dar lugar a que el analizador sintáctico pierda el control. 2. Todos los errores sintácticos deben de ser detectados y señalados. 3. Los errores muy frecuentes e imputables a verdaderos fallos de comprensión o descuido del programador, habrán de ser diagnosticados correctamente (evitar los llamados mensajes de rebote). Esta tercera característica es la más difícil de lograr, ya que incluso compiladores de gran calidad emiten dos o más mensajes para un determinado error. Página 70

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

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

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

Estructuras de control

Estructuras de control Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando

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

Tema 7. Generación de código

Tema 7. Generación de código Departamento de Tecnologías de la Información Tema 7 Generación de código Ciencias de la Computación e Inteligencia Artificial Índice 7.1 Visión general 7.2 Código de tres direcciones 2 Índice 7.1 Visión

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

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

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

Autómatas de Pila y Lenguajes Incontextuales

Autómatas de Pila y Lenguajes Incontextuales Autómatas de Pila y Lenguajes Incontextuales Elvira Mayordomo Universidad de Zaragoza 5 de noviembre de 2012 Contenido de este tema 1. Introducción a los autómatas de pila 2. Definiciones 3. Equivalencia

Más detalles

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción.

2007/ PROGRAMACIÓN. Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS. 1.-Introducción. 2007/2008 Tipo: TRO Curso: 1 Semestre: AB CREDITOS Totales TA TS AT AP PA OBJETIVOS 1.-Introducción. -Comprender cómo funciona un lenguaje de programación 2. Características del lenguaje C -Entender las

Más detalles

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus

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

Tabla de Símbolos. Programación II Margarita Álvarez

Tabla de Símbolos. Programación II Margarita Álvarez Programación II Margarita Álvarez La tabla de símbolos es una estructura global utilizada por distintos módulos del compilador. Es el principal atributo heredado. Almacena todos los nombres declarados

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

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

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo TEMA 2: CONCEPTOS BÁSICOS DE ALGORÍTMICA 1. Definición de Algoritmo 1.1. Propiedades de los Algoritmos 2. Qué es un Programa? 2.1. Cómo se construye un Programa 3. Definición y uso de herramientas para

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

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I Table of contents 1 INFORMACIÓN GENERAL...2 2 INTRODUCCIÓN... 2 3 OBJETIVOS GENERALES DE LA ASIGNATURA... 3 4 OBJETIVOS, TEMAS Y SUBTEMAS... 3 5 PLAN TEMÁTICO...6

Más detalles

APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES

APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES Ignacio López Torres. Reservados todos los derechos. Prohibida la reproducción total o parcial de esta obra, por cualquier medio electrónico

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

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal. LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado

Más detalles

6. Autómatas a Pila. Grado Ingeniería InformáDca Teoría de Autómatas y Lenguajes Formales

6. Autómatas a Pila. Grado Ingeniería InformáDca Teoría de Autómatas y Lenguajes Formales 6. Autómatas a Pila Araceli Sanchis de Miguel Agapito Ledezma Espino José A. Iglesias Mar

Más detalles

Estructuras de Control

Estructuras de Control Algorítmica y Lenguajes de Programación Estructuras de Control Estructuras de Control. Introducción Hasta ahora algoritmos han consistido en simples secuencias de instrucciones Existen tareas más complejas

Más detalles

Clase 17: Autómatas de pila

Clase 17: Autómatas de pila Solicitado: Ejercicios 14: Autómatas de pila de GLC M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom edfrancom@ipn.mx 1 Contenido Autómata de pila Definición

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

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

Tema 2 Introducción a la Programación en C.

Tema 2 Introducción a la Programación en C. Tema 2 Introducción a la Programación en C. Contenidos 1. Conceptos Básicos 1.1 Definiciones. 1.2 El Proceso de Desarrollo de Software. 2. Lenguajes de Programación. 2.1 Definición y Tipos de Lenguajes

Más detalles

5. Sentencias selectivas o condicionales

5. Sentencias selectivas o condicionales 60 A. García-Beltrán y J.M. Arranz 5. Sentencias selectivas o condicionales Objetivos: a) Describir el funcionamiento de las sentencias selectivas o condicionales (if-else y switch) b) Interpretar el resultado

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

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) APRENDERAPROGRAMAR.COM LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

Estructuras de Control. Secuencia y Selección

Estructuras de Control. Secuencia y Selección Estructuras de Control. Secuencia y Selección InCo - FING Programación 1 InCo - FING Estructuras de Control. Secuencia y Selección Programación 1 1 / 35 Estructuras de control InCo - FING Estructuras de

Más detalles

Equivalencia Entre PDA y CFL

Equivalencia Entre PDA y CFL Equivalencia Entre PDA y CFL El Lenguaje aceptado por un Autómata con Pila Universidad de Cantabria Esquema 1 Introducción 2 3 Lenguaje Aceptado por un Autómata Como en los autómatas finitos, se puede

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

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

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

Tema 3: Análisis sintáctico descendente. Cómo funciona el analizador sintáctico?

Tema 3: Análisis sintáctico descendente. Cómo funciona el analizador sintáctico? Tema 3: Análisis sintáctico descendente Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente

Más detalles

1. Cuántas sentencias hay en la secuencia principal del siguiente programa?

1. Cuántas sentencias hay en la secuencia principal del siguiente programa? 1. Cuántas sentencias hay en la secuencia principal del siguiente programa? public class PruebaSwitch { System.out.print ("Opcion: "); case 3: System.out.println ("miércoles "); A. 1. B. 4. C. Más de 10.

Más detalles

Computabilidad y Lenguajes Formales: Autómatas Finitos

Computabilidad y Lenguajes Formales: Autómatas Finitos 300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V. No Determinismo Hasta ahora cada

Más detalles

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González. Programación Básica Arturo Vega González a.vega@ugto.mx Division de Ciencias e Ingenierías Universidad de Guanajuato Campus León Sesión 5 Universidad de Guanajuato, DCI, Campus León 1 / 31 Universidad

Más detalles

Segunda Práctica. Teoría de Autómatas y Lenguajes Formales I. Escuela Politécnica Superior Universidad Autónoma de Madrid.

Segunda Práctica. Teoría de Autómatas y Lenguajes Formales I. Escuela Politécnica Superior Universidad Autónoma de Madrid. Segunda Práctica Teoría de Autómatas y Lenguajes Formales I Escuela Politécnica Superior Universidad Autónoma de Madrid Curso 2009-2010 Fechas de Entrega Electrónica (por grupos): grupo 2a : miércoles

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

Estatutos de Control C# Estatutos de Decisión (Selección)

Estatutos de Control C# Estatutos de Decisión (Selección) SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente

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

Fundamentos de programación

Fundamentos de programación Fundamentos de programación Estructuras de Control Estructuras de control Estructuras de control Estructura secuencial Estructura alternativa Sentencias if, if else Sentencias if else anidadas El operador

Más detalles

ANEXO XVII DE LA RESOLUCION N

ANEXO XVII DE LA RESOLUCION N Hoja 1 de 7 UNIVERSIDAD NACIONAL DE CÓRDOBA Facultad de Ciencias Exactas Físicas y Naturales República Argentina Programa de: Código: Informática Carrera: Materia común Res. Nº Plan: Puntos:3.5 Escuela:

Más detalles

Convertir un AFND a un AFD

Convertir un AFND a un AFD Convertir un AFND a un AFD Existe una equivalencia entre los AFD y AFN, de forma que un autómata M es equivalente a un autómata M' si L(M) ) L(M'). Ejemplo: Los autómatas de la siguiente figura son equivalentes.

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

Técnicas de Programación

Técnicas de Programación Técnicas de Programación 2.1.- Introducción: unos conceptos previos y primeros conceptos de la API Introducción La resolución de un problema con medios informáticos implica generalmente la siguiente secuencia

Más detalles

Complejidad computacional (Análisis de Algoritmos)

Complejidad computacional (Análisis de Algoritmos) Definición. Complejidad computacional (Análisis de Algoritmos) Es la rama de las ciencias de la computación que estudia, de manera teórica, la optimización de los recursos requeridos durante la ejecución

Más detalles

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos

Más detalles

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación COMPILADORES Unidad I: Introducción al proceso de compilación Flor Prof. Flor Narciso GIDyC-Departamento de Computación LABSIULA-Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de

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

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

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013 TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Ingeniería Técnica en Informática de Sistemas Segundo curso Departamento de Informática y Análisis Numérico Escuela Politécnica Superior Universidad de Córdoba

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

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

OPTIMIZACIÓN DE CÓDIGO

OPTIMIZACIÓN DE CÓDIGO OPTIMIZACIÓN DE CÓDIGO INTRODUCCION La finalidad de la optimización de código es producir un código objeto lo más eficiente posible. En algunos casos también se realiza una optimización del código intermedio.

Más detalles

TEMA 4. ESTRUCTURAS DE CONTROL

TEMA 4. ESTRUCTURAS DE CONTROL M.P. Sesmero, P. de Toledo, F.J. Ordoñez, J. Gómez-Romero, J.A. Iglesias, J.L. Mira Programación TEMA 4. ESTRUCTURAS DE CONTROL Grado en Ingeniería en Tecnologías Industriales Programación CONTENIDOS 4.1.

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

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Instrucciones de control

Instrucciones de control Instrucciones de control Instrucciones de control de flujo C# ofrece un conjunto de sentencias similar al de C, C++ o Java. A continuación se estudian muy brevemente cada una de ellas. if if se utiliza

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

Programación Estructurada

Programación Estructurada Programación Estructurada PROGRAMACIÓN ESTRUCTURADA 1 Sesión No. 2 Nombre: El lenguaje de programación C Contextualización Una constante en todos los lenguajes de programación (viejos y nuevos) es la implementación

Más detalles

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO Control de Flujo Estructuras de Control Experiencia Educativa de Algorítmica 1 Introducción El estilo de como escribimos y analizamos un algoritmo se convierte en una de las principales características

Más detalles

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA Nombre del Módulo: PROGRAMACIÓN EN JAVASCRIPT Código: CSTI0087 total: 51 Horas Objetivo General: Crear contenido web basado en

Más detalles

Teoría de grafos y optimización en redes

Teoría de grafos y optimización en redes Teoría de grafos y optimización en redes José María Ferrer Caja Universidad Pontificia Comillas Definiciones básicas Grafo: Conjunto de nodos (o vértices) unidos por aristas G = (V,E) Ejemplo V = {,,,,

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

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Guía práctica de estudio 03: Algoritmos

Guía práctica de estudio 03: Algoritmos Guía práctica de estudio 03: Algoritmos 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 03: Algoritmos Objetivo:

Más detalles

TEMA 8. GEOMETRÍA ANALÍTICA.

TEMA 8. GEOMETRÍA ANALÍTICA. TEMA 8. GEOMETRÍA ANALÍTICA. 8..- El plano. Definimos el plano euclideo como el conjunto de puntos ( x, y) R. Así, cada punto del plano posee dos coordenadas. Para representar puntos del plano utilizaremos

Más detalles

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación INDICE Prologo XI Capitulo 1. Algoritmos y programas 1.1. Configuraciones de una computadora 1 1.2. Lenguajes de programación 2 1.3. Resolución de problemas 1.3.1. Fase de resolución del problema 3 1.3.1.1.

Más detalles

Tema 13: Apuntadores en C

Tema 13: Apuntadores en C Tema 13: Apuntadores en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción

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

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * / undamentos de sintaxis en algunas instrucciones de C#.Net Dr. Ramón Roque Hernández Identificadores Un identificador le da nombre único a un elemento en un programa (ariables, procedimientos, etc.). No

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

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas Fundamentos de Programación Flujo de Control I: Estructuras selectivas El Flujo de Control de un Programa Un algoritmo puede ser construido utilizando combinaciones de tres estructuras de control de flujo

Más detalles

Universidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II

Universidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II Universidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II Ejercicios del Tema 1: Construcción y Pruebas del Software Ejercicio 1 Se desean realizar pruebas de

Más detalles

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY ALGORITMO DEFINICIÓN: CONSISTE EN LA DESCRIPCIÓN CLARA Y DETALLADA DEL PROCEDIMIENTO A SEGUIR PARA ALCANZAR LA SOLUCIÓN A UN PROBLEMA EN DONDE SE ESTABLECE

Más detalles

Problemas de Espacios Vectoriales

Problemas de Espacios Vectoriales Problemas de Espacios Vectoriales 1. Qué condiciones tiene que cumplir un súbconjunto no vacío de un espacio vectorial para que sea un subespacio vectorial de este? Pon un ejemplo. Sean E un espacio vectorial

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

Algebra lineal y conjuntos convexos

Algebra lineal y conjuntos convexos Apéndice A Algebra lineal y conjuntos convexos El método simplex que se describirá en el Tema 2 es de naturaleza algebraica y consiste en calcular soluciones de sistemas de ecuaciones lineales y determinar

Más detalles

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1 Prologo Agradecimientos Nota de los autores Índice general I III V VII 1 Problemas, algoritmos y programas 1 1.1 Programas y la actividad de la programación.................... 4 1.2 Lenguajes y modelos

Más detalles