TEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0

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

Download "TEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0"

Transcripción

1 TEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0 En este tema vamos a mostrar una estrategia para llevar a cabo, partiendo del ASA obtenido en el tema 4, el resto de comprobaciones semánticas (además de la resolución de nombres) a las que es necesario someter a L-0, y que son: comprobación de tipos, L/R value y otras comprobaciones semánticas. 1.- TIPOS Y EXPRESIONES El sistema de tipos de un lenguaje de programación suele constar de 5 componentes: (a) un conjunto de tipos predefinidos simples, (b) constructores de nuevos tipos a partir de los existentes, (c) reglas de equivalencia de tipos, (d) reglas de inferencia de tipo para expresiones y (e) reglas de compatibilidad de tipos. Estos componentes en L-0 presentan la siguiente forma: (a) Los tipos predefinidos simples en L-0 son: entero, real, logico, caracter. (b) Los constructores de nuevos tipos en L-0 se clasifican en: I. tipos predefinidos compuestos: formacion. II. tipos no predefinidos: clase. Los tipos predefinidos compuestos permiten construir nuevos tipos anónimos (tipos sin nombre). (c) Las reglas de equivalencia 1. Cuándo dos tipos son equivalentes? La respuesta a esta pregunta define lo que se denomina las reglas de equivalencia de tipos del lenguaje. La equivalencia de tipos se puede considerar desde dos puntos de vista: Equivalencia por Nombre: Se dice que dos tipos T y T son equivalentes por nombre sii el nombre de T coincide con el nombre de T. Equivalencia por Estructura: Se dice que dos tipos T y T son equivalentes por estructura sii T y T tienen definiciones con estructuras equivalentes. EJEMPLO: inst clase Elemento real e consultar() dev real 1 No debemos confundir la equivalencia de tipos con la compatibilidad de tipos, concepto este último que veremos posteriormente.

2 dev e modificar(real n) e:=consultar() inst clase Elemento oculto entero e consultar() dev entero dev e modificar(entero n) e:=n Las declaraciones anteriores en L-0 definen dos tipos equivalentes si se aplica equivalencia por nombre y dos tipos no equivalentes si se aplica equivalencia estructural. EJEMPLO : inst clase Elemento1 real e consultar() dev real dev e modificar(real n) e:=consultar() inst clase Elemento2 real e consultar() dev real dev e modificar(real n) e:=consultar() Las declaraciones anteriores en L-0 definen dos tipos equivalentes si se aplica equivalencia estructural o dos tipos no equivalentes si se aplica equivalencia por nombre.

3 Cada aproximación tiene pros y contras. La equivalencia por nombre tiene una implementación más simple porque sólo necesita comparar nombres para decidir si los tipos implicados son equivalentes. La equivalencia estructural requiere almacenar la estructura de los tipos para compararlos. L-0 dispone de tipos con nombres y de tipos anónimos. Al diseñar el sistema de tipos del lenguaje L-0, tomamos las siguientes decisiones: Dos tipos anónimos L-0 son equivalentes sii tienen la misma Estructura. Dos tipos con nombre L-0 son equivalentes sii tienen el mismo Nombre. (d) Las reglas para inferir el tipo 2 de una expresión en L-0 son: a. (Base) Si v es una variablelocal/parámetro/literal de tipo T entonces v es una expresión bien formada de tipo T. b. (Base) Si atr es un atributo visible de tipo T declarado en una clase C no instanciable entonces la expresión C.atr usada es una expresión bien formada de tipo T. c. (Base) Si atr es un atributo visible de tipo T declarado en una clase C instanciable entonces la expresión o.atr es una expresión bien formada de tipo T siendo o una instancia de C. d. (Base) Si atr es un atributo de tipo T declarado en una clase C entonces la expresión atr usada en la propia clase/objeto es una expresión bien formada de tipo T. e. (Inducción) Sean exp1,..., expk un conjunto de expresiones bien formadas de tipo ENTERO y t una expresión Base bien formada de tipo FORMACION de dimensión k y tipo base T, entonces t[exp1,...,expk] es una expresión bien formada de tipo T. f. (Inducción) Sean exp1,..., expk un conjunto de expresiones bien formadas de tipo T T1,...Tk respectivamente y f un método visible con dominio T1,...Tk y rango T declarado en una clase C no instanciable entonces C.f(exp1,...,expk) es una expresión bien formada de tipo T. g. (Inducción) Sean exp1,..., expk un conjunto de expresiones bien formadas de tipo T T1,...Tk respectivamente y f un método visible con dominio T1,...Tk y rango T declarado en una clase C instanciable entonces o.f(exp1,...,expk) es una expresión bien formada de tipo T siendo o una instancia de C. h. (Inducción) Sean exp1,..., expk un conjunto de expresiones bien formadas de tipo T T1,...Tk respectivamente y f un método con dominio T1,...Tk y rango T declarado en una clase C entonces f(exp1,...,expk) usada en la propia clase/objeto es una expresión bien formada de tipo T. i. (Inducción) Sean exp1,..., expk un conjunto de expresiones bien formadas de tipo T1,...Tk respectivamente y f una función definida en un tipo predefinido de L-0 con dominio T1,...,Tk y rango T entonces la expresión f(exp1,...,expk) es una expresión bien formada de tipo T. 2 Siempre teniendo en cuenta que en L-0 no se permiten referencias adelantadas.

4 El conjunto de reglas anteriores nos permite determinar el tipo y la corrección de las expresiones bases de L-0. Entendiendo por expresiones bases los accesos a variables (atributos, parámetros y variables locales), literales y llamadas a métodos. Sin embargo, también debemos dotar al sistema con el conjunto de reglas que nos permita inferir los tipos de expresiones compuestas, como las que incluyen operadores binarios y unarios. Puesto que una expresión compuesta involucra a más de una expresión (base o no), debemos establecer también un conjunto de reglas que nos especifique que tipos pueden combinarse mediante un operador (compatibilidad de tipos). (e) Las reglas de compatibilidad. Cuándo dos tipos son compatibles? La pregunta está mal planteada, ya que dos tipos pueden ser compatibles cuando se combinan con un operador e incompatibles con otro. La compatibilidad de tipos siempre se hace respecto a los operadores y depende de la definición del lenguaje. En L-0 la regla de compatibilidad es muy simple, ya que L-0 no acepta coerciones de tipos, es decir, los tipos de las expresiones que forman una expresión compuesta deben ser equivalentes. Hay que decir que L-0 presenta un tipado estático (la inferencia y chequeo de tipos se realiza en tiempo de compilación) y fuerte (toda expresión bien formada tiene un único tipo). Ejercicio.- Partiendo del ejemplo del capítulo anterior, vamos a calcular tipos de distintas expresiones: p, p.apilar y p.apilar(i). (Solución en clase) 2.- EVALUACIÓN L/R EN LAS ASIGNACIONES La asignación es la instrucción fundamental de cualquier lenguaje de programación imperativo con la siguiente semántica informal: expresion de tipo T + lugar de almacenamiento := expresion de tipo T Adoptamos dos visiones diferentes al evaluar las expresiones situadas a izquierda y a la derecha del símbolo :=. La evaluación a de la parte izquierda produce lugares de almacenamiento (Lvalues) y la evaluación de la parte derecha produce valores funcionales clásicos (R-values). Desde el punto de vista sintáctico no hay diferencias entre la expresión de la izquierda y la expresión de la derecha. Por ejemplo, sean x e y variables enteras y la asignación x := y está compuesta de una expresión a la izquierda de tipo entero y una expresión a la derecha de tipo entero. Sin embargo, y adicionalmente, la expresión a la izquierda denota un L-value, es decir, un lugar donde ubicar el valor producido por la evaluación de la expresión y (R-value). Por ejemplo, la siguiente asignación sería incorrecta 1 := y aunque las expresiones a la izquierda y derecha concuerden en tipo porque 1 no denota lugar de almacenamiento. Concluyendo, para que una asignación sea correcta desde un punto de vista semántico debe ocurrir que las expresiones a izquierda y derecha coincidan en tipo y además que la expresión

5 de la izquierda denote un lugar para almacenar. Por lo tanto, al procesar asignaciones en L-0 es necesario realizar no sólo un test de equivalencia de tipos entre las expresiones a la izquierda y derecha del símbolo := sino un test para decidir si la expresión a la izquierda es un atributo (visible) o variable local. 3.- TREEPARSER PARA EL ANÁLISIS SEMÁNTICO EN L-0 En este apartado nos vamos a limitar a mostrar el treeparser para el análisis semántico de L-0. En las siguientes secciones describiremos tantos las estructuras de datos usadas como las funciones auxiliares. header... class AnaSem extends TreeParser options buildast=true int cont_dev // variable contador del número de instrucciones DEV en un método // Incluir todas las funciones de Análisis Semántico declaracion_modulo: #(MODULO nombre_modulo definicion_modulo) nombre_modulo : IDENT definicion_modulo: lista_declaraciones_clases lista_declaraciones_clases: (declaracion_clase)* declaracion_clase : #(CLASE nombre_clase cualificador_clase definicion_clase) cualificador_clase : INST NO_INST nombre_clase : IDENT definicion_clase : declaraciones_elementos_clase declaraciones_elementos_clase : (declaracion_elemento_clase)* declaracion_elemento_clase : #(METODO declaracion_metodo cualificador_elemento_clase) #(ATRIBUTO IDENT tipo cualificador_elemento_clase) cualificador_elemento_clase: OCULTO VISIBLE declaracion_metodo AST tipodev : tipodev =prototipo_metodo definicion_metodo[tipodev] if (cont_dev == 0)

6 error // método funcional que no devuelve nada prototipo_metodo returns [AST tipodev]: #(PROTOTIPO IDENT #(PARAMETROS declaracion_parametros) #(RESULTADO ( t: tipo cont_dev = 0 // inicializa el contador de instrucciones DEV tipodev = t v: VACIO cont_dev = -1 // marca a -1 para indicar que es un procedimiento tipodev = v ))) declaracion_parametros : (declaracion_parametro)* declaracion_parametro : #(PARAMETRO IDENT tipo) definicion_metodo [AST tipodev]: #(DEFINICION #(VARIABLES_LOCALES declaracion_variables_locales) #(INSTRUCCIONES instrucciones[tipodev]) declaracion_variables_locales : (declaracion_variable_local)* declaracion_variable_local : #(VARIABLE_LOCAL IDENT tipo) instrucciones [AST tipodev] : (instrucción[tipodev])* instruccion [AST tipodev] : #(INSTRUCCION ( instruccion_simple[tipodev] instruccion_compuesta[tipodev]) instruccion_simple [AST tipodev] : llamada_metodo asignacion retorno [tipodev] instruccion_compuesta [AST tipodev] : condicion [tipodev] iteracion [tipodev] asignacion Atr_Expr e1, e2: #(ASIGNACION e1=expresion e2=expresion ) AS_Asignacion(e1,e2) retorno [AST tipodev] Atr_Expr e: #(DEV e=expresion) cont_dev=as_devolucion( tipodev, e, cont_dev) llamada_metodo Atr_Expr a, res LinkedList l: #(LLAMADA a=acceso #(EXPRESIONES l=lista_expresiones)) res=as_llamada( a, l) if (res.gettipo().gettype()!= VACIO) error // No es un procedimiento lista_expresiones returns [LinkedList l= new LinkedList()] Atr_Expr e: (e=expresion l.add(e))*

7 condicion [AST tipodev] Atr_Expr e : #(SI e=expresion #(INSTRUCCIONES instrucciones[tipodev]) #(INSTRUCCIONES instrucciones[tipodev])) AS_Condicion( e) iteracion [AST tipodev] Atr_Expr e : #(MIENTRAS e=expresion #(INSTRUCCIONES instrucciones[tipodev])) AS_Condicion( e) expresion returns [Atr_Expr res] Atr_Expr e1,e2 LinkedList l: #(O e1=expresion e2=expresion) res=as_exp_bin_log( e1, e2) #(Y e1=expresion e2=expresion) res=as_exp_bin_log( e1, e2) #(NO e1=expresion) res=as_exp_una_log( e1) #(MAYOR e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(MAYOR_IGUAL e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(MENOR e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(MENOR_IGUAL e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(IGUAL e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(DISTINTO e1=expresion e2=expresion) res=as_exp_bin_rel( e1, e2) #(MAS e1=expresion e2=expresion) res=as_exp_bin_arit( e1, e2) #(MENOS e1=expresion e2=expresion) res=as_exp_bin_arit( e1, e2) #(MENOSUNARIO e1=expresion) res=as_exp_una_arit( e1) #(POR e1=expresion e2=expresion) res=as_exp_bin_arit( e1, e2) #(DIVISION e1=expresion e2=expresion) res=as_exp_bin_arit( e1, e2) #(LLAMADA e1=acceso #(EXPRESIONES l=lista_expresiones)) res=as_llamada( e1, l) if (res.gettipo().gettype() == VACIO) error // No es un método funcional #(ACCESO_TABLA e1=acceso #(EXPRESIONES l=lista_expresiones_nv)) res=as_acceso_tabla( e1, l) e1=acceso res=e1 i:lit_entero res=as_literal( i) j:lit_real res=as_literal( j) k:lit_car res=as_literal( k) m:cierto res=as_literal( m) n:falso res=as_literal( n) acceso returns [Atr_Expr res] Atr_Expr e: e=acceso_simple res=e #(ACCESO_OBJETO r:e=acceso_simple a:ident) res=as_acceso_objeto( e, r, a) acceso_simple returns [Atr_Expr res]: #(ACCESO_SIMPLE IDENT d:declaracion_acceso) res=as_acceso_simple(d) declaracion_acceso: declaracion_modulo declaracion_clase_1 declaracion_elemento_clase_1 declaracion_parametro_1 declaracion_variable_local_1

8 lista_expresiones_nv returns [LinkedList l= new LinkedList()] Atr_Expr e: (e=expresion l.add(e))+ tipo : tipo_predefinido_simple tipo_predefinido_compuesto declaracion_clase_1 tipo_predefinido_simple : ENTERO REAL LOGICO CARACTER tipo_predefinido_compuesto : formacion formacion : #(FORMACION #(LlSTA_ENTEROS lista_enteros) (tipo_predefinido_simple declaracion_clase_1)) lista_enteros : (LIT_ENTERO)+ // DECLARACION DE CLASES EN ACCESOS SIMPLES E IDENTIFICADORES DE TIPO. NO ES NECESARIO EL ANÁLISIS SEMÁNTICO EN ESTOS ÁRBOLES. declaracion_clase_1 : #(CLASE nombre_clase_1 cualificador_clase_1 definicion_clase_1) cualificador_clase_1 : INST NO_INST nombre_clase_1 : IDENT definicion_clase_! : declaraciones_elementos_clase_1 declaraciones_elementos_clase_1 : (declaracion_elemento_clase_1)* declaracion_elemento_clase_1 : #(METODO declaracion_metodo_1 cualificador_elemento_clase_1) #(ATRIBUTO IDENT tipo_1 cualificador_elemento_clase_1) cualificador_elemento_clase_1: OCULTO VISIBLE declaracion_metodo_1: prototipo_metodo_1 definicion_metodo_1 prototipo_metodo_1: #(PROTOTIPO IDENT #(PARAMETROS declaracion_parametros_1) #(RESULTADO ( tipo_1 VACIO_1))) declaracion_parametros_1 : (declaracion_parametro_1)*

9 declaracion_parametro_1 : #(PARAMETRO IDENT tipo_1) definicion_metodo_1: #(DEFINICION #(VARIABLES_LOCALES declaracion_variables_locales_1) #(INSTRUCCIONES instrucciones_1) declaracion_variables_locales_1 : (declaracion_variable_local_!)* declaracion_variable_local_1 : #(VARIABLE_LOCAL IDENT tipo_1) instrucciones_1: (instrucción_1)* instruccion_1 : #(INSTRUCCION ( instruccion_simple_1 instruccion_compuesta_1) instruccion_simple_1 : llamada_metodo_1 asignacion_1 retorno_1 instruccion_compuesta_1 : condicion_1 iteracion_1 asignacion_1: #(ASIGNACION expresion_1 expresion_1 ) retorno_1: #(DEV expresion_1) llamada_metodo_1: #(LLAMADA acceso_1 #(EXPRESIONES lista_expresiones_1)) lista_expresiones_1: (expresion_1)* condicion_1 : #(SI expresion_1 #(INSTRUCCIONES instrucciones_1) #(INSTRUCCIONES instrucciones_1)) iteracion_1: #(MIENTRAS expresion_1 #(INSTRUCCIONES instrucciones_1)) expresion_1: #(O expresion_1 expresion_1) #(Y expresion_1 expresion_1) #(NO expresion_1) #(MAYOR expresion_1 expresion_1) #(MAYOR_IGUAL expresion_1 expresion_1) #(MENOR expresion_1 expresion_1) #(MENOR_IGUAL expresion_1 expresion_1) #(IGUAL expresion_1 expresion_1) #(DISTINTO expresion_1 expresion_1) #(MAS expresion_1 expresion_1) #(MENOS expresion_1 expresion_1) #(MENOSUNARIO expresion_1) #(POR expresion_1 expresion_1)

10 #(DIVISION expresion_1 expresion_1) #(LLAMADA acceso_1 #(EXPRESIONES lista_expresiones_1)) #(ACCESO_TABLA acceso_1 #(EXPRESIONES lista_expresiones_nv_1)) acceso_1 LIT_ENTERO LIT_REAL LIT_CAR CIERTO FALSO acceso_1: acceso_simple_1 #(ACCESO_OBJETO acceso_simple_1 IDENT) acceso_simple_1: #(ACCESO_SIMPLE IDENT declaracion_acceso_1) declaracion_acceso_1: declaracion_clase_1 declaracion_elemento_clase_1 declaracion_parametro_1 declaracion_variable_local_1 lista_expresiones_nv_1: (expresion )+ tipo_1 : tipo_predefinido_simple_1 tipo_predefinido_compuesto_1 declaracion_clase_1 tipo_predefinido_simple_1 : ENTERO REAL LOGICO CARACTER tipo_predefinido_compuesto_1 : formacion_1 formacion_1 : #(FORMACION #(LlSTA_ENTEROS lista_enteros_1) (tipo_predefinido_simple_1 declaracion_clase_1)) lista_enteros_1 : (LIT_ENTERO)+ 4.- ESTRUCTURA DE DATOS Vamos a usar una clase, a la que denominaremos Atr_Expr, para almacenar la información del tipo, L-val y R-val de cada expresión que aparezca en el programa. La información del tipo es necesaria para realizar las comprobaciones de tipos en los distintos contextos, y las

11 características de L-val y R-val son requeridas si la expresión se encuentra dentro del ámbito de una asignación. Veamos los atributos métodos de esta clase. Atr_Expr.- Atributos: o tipo (AST) AST del tipo de la expresión. o Lval (boolean) Indica la expresión tiene L-value. o Rval (boolean) Indica si la expresión tiene R-value. Métodos: o Atr_Expr() Constructor de la clase vacía. o AST gettipo() Devuelve el AST del tipo de la expresión. o boolean getlval() Devuelve el valor del atributo LVal. o boolean getrval() Devuelve el valor del atributo RVal. o settipo(ast tipo) Establece el AST del tipo de la expresión. o setlval(boolean lval) Establece el valor del atributo LVal. o setrval(boolean rval) Establece el valor del atributo RVal. 5.- FUNCIONES PARA EL ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES EN L ANÁLISIS SEMÁNTICO DE LOS LITERALES Esta rutina se limita a calcular el tipo, Lval y Rval de los literales (entero, real, carácter y lógico) que aparezcan. Atr_Expr As_Literal(AST lit) Atr_Expr result=new Atr_Expr() AST tipo=null switch(lit.gettype()) case LIT_ENTERO: tipo=#(#[entero,"entero"]) break case LIT_REAL: tipo=#(#[real,"real"]) break case LIT_CAR: tipo=#(#[caracter,"caracter"]) break case CIERTO: case FALSO: tipo=#(#[logico,"logico"]) break result.settipo(tipo) result.setlval(false) result.setrval(true) return result ANÁLISIS SEMÁNTICO DE LOS ACCESOS SIMPLES

12 Esta función calcula el tipo, Lval y Rval de los accesos simples en función de la declaración que se le asoció en la etapa de resolución de nombres. Recibe como parámetro el árbol de declaración de acceso simple. Atr_Expr As_Acceso_Simple(AST dec) Atr_Expr result=new Atr_Expr() AST tipo=null switch(dec.gettype()) case MODULO: System.out.println("ERROR ) break case CLASE: tipo=dec result.setlval(false) result.setrval(false) break case ATRIBUTO: tipo=dec.getfirstchild().getnextsibling() result.setlval(true) result.setrval(true) break case METODO: tipo=dec.getfirstchild() result.setlval(false) result.setrval(false) break case PARAMETRO: tipo=dec.getfirstchild().getnextsibling() result.setlval(false) result.setrval(true) break case VARIABLE_LOCAL: tipo=dec.getfirstchild().getnextsibling() result.setlval(true) result.setrval(true) break result.settipo(tipo) return result ANÁLISIS SEMÁNTICO DE LOS ACCESOS A OBJETOS La estructura sintáctica de un acceso a objeto es la siguiente: raiz. atrib En el ASA de la expresión, raiz es un acceso simple (cuyo Atr_Expr se ha calculado con al función del apartado anterior) y atrib es un nodo IDENT.

13 La función que lleva a cabo el análisis semántico de los accesos a objeto, al igual que todas las rutinas de análisis semántico de expresiones, calcula el tipo, Lval y Rval de la expresión. Pero además realiza otros chequeos semánticos. Esta función hace lo siguiente: 1. Comprobar que la expresión raiz sea de tipo clase. 2. Si la raiz es una clase, entonces se debe comprobar que sea no instanciable. Si la raiz es un objeto, entonces se debe comprobar que sea de una clase instanciable. 3. Comprobar que atrib es un atributo/método visible del tipo clase de la raiz. 4. Resultado (Atr_Expr que devuelve la función): Si atrib es un atributo: el tipo es el tipo del atributo, Lval y Rval son true. Si atrib es un método: el tipo es el prototipo del método, Lval y Rval son false. Recibe los siguientes parámetros: Atr_Expr de la raiz (necesario para 1,2,3 y 4), AST de la raiz (necesario para 2) y el AST del atrib (necesario para 3). Atr_Expr As_Acceso_Objeto(Atr_Expr atrraiz, AST raiz, AST atrib) Atr_Expr result=new Atr_Expr() AST tiporaiz, aux, tipo // 1 tiporaiz=atrraiz.gettipo() if (tiporaiz.gettype()!= CLASE) System.out.println("ERROR ") // 2 If (raiz.getfirstchild().getnextsibling().gettype() == CLASE) if (tiporaiz.getfirstchild().getnextsibling().gettype()!= NO_INST) System.out.println("ERROR ) else if (tiporaiz.getfirstchild().getnextsibling().gettype()!= INST) System.out.println("ERROR ) // 3 aux = tiporaiz.getfirstchild().getnextsibling().getnextsibling() while(aux!= null) if (aux.gettype() == METODO) if(aux.getfirstchild().getfirstchild().equals(atrib)) break else if(aux.getfirstchild().equals(atrib)) break aux = aux.getnextsibling() if(aux==null)

14 System.out.println("ERROR ") if(aux.getfirstchild().getnextsibling().getnextsibling().gettype()!= VISIBLE) System.out.println("ERROR ") // 4 if(aux.gettype()==atributo) tipo=aux.getfirstchild().getnextsibling() result.setlval(true) result.setrval(true) else tipo=aux.getfirstchild() result.setlval(false) result.setrval(false) result.settipo(tipo) return result ANÁLISIS SEMÁNTICO DE LLAMADAS A MÉTODOS La estructura sintáctica de una llamada a un método es la siguiente: raiz ( expresiones ) En el ASA de la expresión, raiz es un acceso simple o un acceso a objeto (cuyo Atr_Expr se ha calculado con alguna de las funciones de los apartados anteriores) y expresiones es una lista de expresiones (cuyos Atr_Expr están calculados y almacenados en una LinkedList durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que la expresión raiz sea de tipo método (prototipo). 2. Comprobar que los parámetros formales (descritos en el prototipo del método) coinciden en número y tipo con los parámetros reales ( expresiones ). 3. Resultado (Atr_Expr que devuelve la función): El tipo es el rango del método, Lval es false y Rval es true. Recibe los siguientes parámetros: Atr_Expr de la raiz (necesario para 1,2 y 3), LinkedList con los Atr_Expr de todos los parámetros reales (necesario para 2). Atr_Expr As_Llamada(Atr_Expr atr_raiz, LinkedList expresiones) Atr_Expr res=new Atr_Expr() Atr_Expr par_r AST par_f Iterator it=expresiones.iterator() // 1

15 if(atr_raiz.gettipo().gettype()!=prototipo) System.out.println("ERROR ") // 2 par_f=atr_raiz.gettipo().getfirstchild().getnextsibling().getfirstchild() while(par_f!= null && it.hasnext()) par_r=(atr_expr) it.next() if(!par_r.gettipo().equalstree(par_f.getfirstchild().getnextsibling())) System.out.println("ERROR ") par_f=par_f.getnextsibling() if(par_f == null && it.hasnext()) System.out.println("ERROR ") if(par_f!= null &&! it.hasnext()) System.out.println("ERROR ") // 3 res.settipo(atr_raiz.gettipo().getfirstchild().getnextsibling().getnextsibling().getfirstchild()) res.setlval(false) res.setrval(true) return res ANÁLISIS SEMÁNTICO DE LOS ACCESOS A TABLAS La estructura sintáctica de un acceso a tabla es la siguiente: raiz [ expresiones ] En el ASA de la expresión, raiz es un acceso simple o un acceso a objeto (cuyo Atr_Expr se ha calculado con alguna de las funciones de los apartados anteriores) y expresiones es una lista de expresiones (cuyos Atr_Expr están calculados y almacenados en una LinkedList durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que la expresión raiz sea de tipo formación. 2. Comprobar que las expresiones son de tipo entero y que coinciden en número con las dimensiones de la formación. 3. Resultado (Atr_Expr que devuelve la función): El tipo es el tipo base de la formación, Lval y Rval lo heredan de la raiz. Recibe los siguientes parámetros: Atr_Expr de la raiz (necesario para 1,2 y 3), LinkedList con los Atr_Expr de todas las expresiones (necesario para 2). Atr_Expr As_Acceso_Tabla(Atr_Expr atr_raiz, LinkedList expresiones) Atr_Expr res=new Atr_Expr() Atr_Expr aux Iterator it=expresiones.iterator()

16 // 1 if(atr_raiz.gettipo().gettype()!=formacion) System.out.println("ERROR ") // 2 while(it.hasnext()) aux=(atr_expr) it.next() if(aux.gettipo().gettype()!= ENTERO) System.out.println("ERROR ") if(expresiones.size()!= atr_raiz.gettipo().getfirstchild().getnumberofchildren()) System.out.println("ERROR ") // 3 res.settipo(atr_raiz.gettipo().getfirstchild().getnextsibling()) res.setlval(atr_raiz.getlva()) res.setrval(atr_raiz.getrval()) return res ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES BINARIAS ARITMÉTICAS La estructura sintáctica de una expresión binaria aritmética es la siguiente: expresion1 operador_aritmético expresion2 En el ASA de la expresión, expresion1 y expresion2 son expresiones bien formadas de L-0 (cuyos Atr_Expr se han calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que expresion1 y expresion2 tienen Rval. 2. Comprobar que los tipos de expresion1 y expresion2 son compatibles respecto al operador binario aritmético (en L-0 habría que comprobar la equivalencia de tipos de ambas expresiones). Además hay que comprobar que tanto expresion1 como expresion2 sean de tipo numérico (entero o real). 3. Resultado (Atr_Expr que devuelve la función): El tipo es el tipo de expresion1 o expresion2, Lval es false y Rval es true. Recibe los siguientes parámetros: Atr_Expr de los dos operandos (necesarios para 1,2 y 3). Atr_Expr As_Exp_Bin_Arit(Atr_Expr e1,atr_expr e2) Atr_Expr res=new Atr_Expr() // 1 if(!e1.getrval()!e2.getrval()) System.out.println("ERROR")

17 // 2 if(!e1.gettipo().equals(e2.gettipo())) System.out.println("ERROR") if(e1.gettipo().gettype()!= ENTERO && e1.gettipo().gettype()!= REAL) System.out.println("ERROR") // 3 res.settipo(e1.gettipo()) res.setlval(false) res.setrval(true) return res ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES BINARIAS LÓGICAS La estructura sintáctica de una expresión binaria lógica es la siguiente: expresion1 operador_lógico expresion2 En el ASA de la expresión, expresion1 y expresion2 son expresiones bien formadas de L-0 (cuyos Atr_Expr se han calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que expresion1 y expresion2 tienen Rval. 2. Comprobar que los tipos de expresion1 y expresion2 son compatibles respecto al operador binario lógico (en L-0 habría que comprobar que los tipos de ambas expresiones sean lógicos). 3. Resultado (Atr_Expr que devuelve la función): El tipo es el tipo de expresion1 o expresion2, Lval es false y Rval es true. Recibe los siguientes parámetros: Atr_Expr de los dos operandos (necesarios para 1,2 y 3). Atr_Expr As_Exp_Bin_Log (Atr_Expr e1,atr_expr e2) Atr_Expr res=new Atr_Expr() // 1 if(!e1.getrval()!e2.getrval()) System.out.println("ERROR") // 2 if(e1.gettipo().gettype()!= LOGICO e2.gettipo().gettype()!= LOGICO) System.out.println("ERROR") // 3 res.settipo(e1.gettipo()) res.setlval(false) res.setrval(true) return res

18 5.8.- ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES BINARIAS RELACIONALES La estructura sintáctica de una expresión binaria relacional es la siguiente: expresion1 operador_relacional expresion2 En el ASA de la expresión, expresion1 y expresion2 son expresiones bien formadas de L-0 (cuyos Atr_Expr se han calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que expresion1 y expresion2 tienen Rval. 2. Comprobar que los tipos de expresion1 y expresion2 son compatibles respecto al operador binario relacional (en L-0 habría que comprobar la equivalencia de tipos de ambas expresiones). 3. Comprobar que si los operandos son de tipo clase, lógico o formación, el operador que se aplica sea igual o distinto. 4. Resultado (Atr_Expr que devuelve la función): El tipo es lógico, Lval es false y Rval es true. Recibe los siguientes parámetros: Atr_Expr de los dos operandos (necesarios para 1,2, 3 y 4) y el AST del operador_relacional (necesario para 3). Atr_Expr As_Exp_Bin_Rel (Atr_Expr e1,atr_expr e2, AST op) Atr_Expr res=new Atr_Expr() AST tipo // 1 if(!e1.getrval()!e2.getrval()) System.out.println("ERROR") // 2 if(! e1.gettipo().equalstree(e2.gettipo())) System.out.println("ERROR") // 3 if ((e1.gettipo().gettype() == CLASE e1.gettipo().gettype() == LOGICO e1.gettipo().gettype() == FORMACION) && (op.gettype()!= IGUAL && op.gettype()!= DISTINTO) ) System.out.println("ERROR") // 4 tipo = #(#[LOGICO,"logico"]) res.settipo(tipo) res.setlval(false) res.setrval(true) return res

19 5.9.- ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES UNARIAS ARITMÉTICAS La estructura sintáctica de una expresión unaria aritmética es la siguiente: operador_aritmético expresion En el ASA de la expresión, expresion es una expresión bien formada de L-0 (cuyo Atr_Expr se ha calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que expresion tiene Rval. 2. Comprobar que el tipo de expresión es compatible respecto al operador unario aritmético (en L-0 habría que comprobar que sea de tipo numérico). 3. Resultado (Atr_Expr que devuelve la función): El tipo es el tipo de expresion, Lval es false y Rval es true. Recibe el siguiente parámetro: Atr_Expr del operando (necesario para 1,2 y 3). Atr_Expr As_Exp_Una_Arit( Atr_Expr e) Atr_Expr res=new Atr_Expr() // 1 if(!e.getrval()) System.out.println("ERROR") // 2 if(e.gettipo().gettype()!= ENTERO && e.gettipo().gettype()!= REAL) System.out.println("ERROR") // 3 res.settipo(e.gettipo()) res.setlval(false) res.setrval(true) return res ANÁLISIS SEMÁNTICO DE LAS EXPRESIONES UNARIAS LÓGICAS La estructura sintáctica de una expresión unaria lógica es la siguiente: operador_unario expresion En el ASA de la expresión, expresion es una expresión bien formada de L-0 (cuyo Atr_Expr se ha calculado durante el treeparser). Esta función hace lo siguiente:

20 1. Comprobar que expresion tiene Rval. 2. Comprobar que el tipo de expresión es compatible respecto al operador unario lógico (en L-0 habría que comprobar que sea de tipo lógico). 3. Resultado (Atr_Expr que devuelve la función): El tipo es lógico, Lval es false y Rval es true. Recibe el siguiente parámetro: Atr_Expr del operando (necesario para 1,2 y 3). Atr_Expr As_Exp_Una_Log( Atr_Expr e) Atr_Expr res=new Atr_Expr() // 1 if(!e.getrval()) System.out.println("ERROR") // 2 if(e.gettipo().gettype()!= LOGICO) System.out.println("ERROR") // 3 res.settipo(e.gettipo()) res.setlval(false) res.setrval(true) return res 6.- FUNCIONES PARA EL ANÁLISIS SEMÁNTICO DE LAS INSTRUCCIONES EN L ANÁLISIS SEMÁNTICO DE LA ASIGNACIÓN La estructura sintáctica de una instrucción asignación es la siguiente: expresion1 ASIGNACION expresion2 En el ASA de la instrucción, expresion1 y expresion2 son expresiones bien formadas de L-0 (cuyos Atr_Expr se han calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que expresion1 tiene Lval. 2. Comprobar que expresion2 tiene Rval. 3. Comprobar que los tipos de expresion1 y expresion2 son equivalentes. Recibe los siguientes parámetros: Atr_Expr de los dos operandos (necesarios para 1,2, 3). void AS_Asignacion (Atr_Expr e1,atr_expr e2)

21 // 1 y 2 if(!e1.getlval()!e2.getrval()) System.out.println("ERROR") // 3 if(! e1.gettipo().equals(e2.gettipo())) System.out.println("ERROR") if(e1.gettipo().gettype() == FORMACION &&! e1.gettipo().equalstree(e2.gettipo())) System.out.println("ERROR") if(e1.gettipo().gettype() == CLASE &&! e1.gettipo()..getfirstchild(). equals(e2.gettipo().getfirstchild())) System.out.println("ERROR") ANÁLISIS SEMÁNTICO DE LA ITERACIÓN Y CONDICIONAL Esta función se limita a comprobar que la condición de un bucle o condicional es una expresión que tiene Rval y es de tipo Lógico. Su implementación es la siguiente: void AS_Condicion (Atr_Expr e) if(!e.getrval()) System.out.println("ERROR") if(e.gettipo().gettype() == LOGICO) System.out.println("ERROR") ANÁLISIS SEMÁNTICO DE LA DEVOLUCIÓN La estructura sintáctica de una instrucción devolución es la siguiente: DEV expresion En el ASA de la instrucción, expresión es una expresión bien formada de L-0 (cuyo Atr_Expr se ha calculado durante el treeparser). Esta función hace lo siguiente: 1. Comprobar que el método que incluye la instrucción sea un método funcional. 2. Comprobar que expresion tiene Rval. 3. Comprobar que el rango del método sea equivalente al tipo de expresión 4. Incrementa el contador de instrucciones de devolución del método y lo devuelve.

22 Recibe los siguientes parámetros: AST del rango del método (necesario para 3), Atr_Expr de la expresión (necesario para 2 y 3) y el contador de instrucciones de devolución (necesario para 1 y 4). int AS_Devolucion (AST tipo_dev, Atr_Expr e, int cont) // 1 if (cont == -1) System.out.println("ERROR") // 2 if(!e.getrval()) System.out.println("ERROR") // 3 if(! tipo_dev.equals(e.gettipo())) System.out.println("ERROR") if( tipo_dev.gettype() == FORMACION &&! tipo_dev.equalstree(e.gettipo())) System.out.println("ERROR") if( tipo_dev.gettype() == CLASE &&! tipo_dev..getfirstchild(). equals(e.gettipo().getfirstchild())) System.out.println("ERROR") // 4 return cont+1

TEMA 2: PARSERS Y CONSTRUCCIÓN DEL ÁRBOL DE SINTAXIS ABSTRACTA PARA L-0

TEMA 2: PARSERS Y CONSTRUCCIÓN DEL ÁRBOL DE SINTAXIS ABSTRACTA PARA L-0 TEMA 2: PARSERS Y CONSTRUCCIÓN DEL ÁRBOL DE SINTAXIS ABSTRACTA PARA L-0 En este tema se divide en tres secciones: (1) la definición el analizador léxico de L-0, (2) el conjunto de reglas sintácticas de

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

PROCESADORES DEL LENGUAJES Enero 2015

PROCESADORES DEL LENGUAJES Enero 2015 PROCESADORES DEL LENGUAJES Enero 2015 NOMBRE El lenguaje ASSERTION ASSERTION es un lenguaje de programación. Sus programas pueden incluir asertos. Un aserto es una condición lógica construida con las siguientes

Más detalles

TEMA 3: ANÁLISIS SEMÁNTICO

TEMA 3: ANÁLISIS SEMÁNTICO 1 TEMA 3: ANÁLISIS SEMÁNTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis semántico de un lenguaje? Cómo se diseña y construye un analizador semántico? EL PROBLEMA DEL CÁLCULO

Más detalles

Java. Introducción a la Programación Orientada a Objetos

Java. Introducción a la Programación Orientada a Objetos Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

PROCESADORES DEL LENGUAJES Ev. Alternativa

PROCESADORES DEL LENGUAJES Ev. Alternativa PROCESADORES DEL LENGUAJES Ev. Alternativa 2016-17 NOMBRE: GRUPO: EL LENGUAJE LVECT LVECT es un lenguaje de programación secuencial. El programa LVECT consta de declaraciones de variables y secuencia de

Más detalles

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA El objetivo de la práctica es desarrollar un compilador utilizando las herramientas flex y bison y el lenguaje

Más detalles

Departamento de Lenguajes y Sistemas Informáticos Procesadores de Lenguajes

Departamento de Lenguajes y Sistemas Informáticos Procesadores de Lenguajes 1 ANÁLISIS SEMÁNTICO OBJETIVO Problemas para consolidar el diseño y construcción de analizadores semánticos. PROBLEMA 1: LA RUPTURA DE CONTROL INALCANZABLE Supongamos un lenguaje de programación secuencial

Más detalles

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E Java Java es un lenguaje de programación presentado en 1995 enfocado a: soportar los fundamentos de la programación orientada a objetos. generar código independiente de la arquitectura de la computadora

Más detalles

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0 DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0 Este documento define los elementos de programación del lenguaje P-0, basado en un subconjunto del lenguaje de programación Arduino. 1.- PROGRAMA Un programa

Más detalles

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

Compiladores e Intérpretes Análisis Semántico IV 1 Compiladores e Intérpretes Análisis Semántico IV Sebastian Gottifredi 2018 Repaso 2 Repaso El análisis semántico es el encargado validar y entender el significado del programa Para esto el analizador

Más detalles

Curso de Java Introducción a la Programación II

Curso de Java Introducción a la Programación II Curso de Java Introducción a la Programación II Jaime Fernández Martín Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Tipos Java 2 Decalaración de variables 3 Operadores aritméticos Índice

Más detalles

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.

Operadores. Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++. Operadores aritméticos Son operadores binarios (requieren siempre dos operandos) que realizan las operaciones aritméticas

Más detalles

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript Algoritmo

Más detalles

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso. Elementos básicos de programación en Java Objetivos del tema Conocer la estructura básica de un programa Java. Comprender los conceptos de tipo, valor y variable. Comprender las diferencias entre tipos

Más detalles

PROCESADORES DEL LENGUAJES Enero 2018

PROCESADORES DEL LENGUAJES Enero 2018 PROCESADORES DEL LENGUAJES Enero 2018 NOMBRE: GRUPO: LENGUAJE LR3 El lenguaje de programación LR3 permite expresar programas secuenciales con los siguientes recursos: (a) Declaraciones de variables de

Más detalles

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones

Más detalles

Procesadores de lenguaje Tema 5 Comprobación de tipos

Procesadores de lenguaje Tema 5 Comprobación de tipos Procesadores de lenguaje Tema 5 Comprobación de tipos Departamento de Ciencias de la Computación Universidad de Alcalá Resumen Sistemas de tipos. Expresiones de tipo. Equivalencia de tipos. Sobrecarga,

Más detalles

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa Contenido Estructura de un programa en Java... 2 Tipos de datos básicos... 2 Operadores... 3 Literales... 4 Entrada / Salida... 4 Sentencias condicionales... 5 Funciones... 5 Ejercicios... 6 Variables,

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java II... 6 Estructuras de control... 7 Estructuras de selección... 8 Sentencia if... 9 Sentencia if - else... 12 Operador condicional...

Más detalles

PROCESADORES DEL LENGUAJES Septiembre 2017

PROCESADORES DEL LENGUAJES Septiembre 2017 PROCESADORES DEL LENGUAJES Septiembre 2017 NOMBRE: GRUPO: LENGUAJE DE PROGRAMACIÓN MP Un programa MP consta de un conjunto de interfaces para declarar procedimientos y un bloque para definir variables

Más detalles

Introducción a c++ Introducción a la programación EIS Informática III

Introducción a c++ Introducción a la programación EIS Informática III Introducción a c++ Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados a cabo por máquinas como las computadoras. Pueden usarse para crear programas

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Práctica 2 Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez Elementos de lenguaje: Identificadores Tipos de datos 2 Tipos de datos primitivos 3 Tipos de datos referenciados Clases Interfaces Arrays

Más detalles

Escuela Normal Superior N 40 Mariano Moreno. Cuadernillo Propedéutico 2017 Nivel Superior

Escuela Normal Superior N 40 Mariano Moreno. Cuadernillo Propedéutico 2017 Nivel Superior Escuela Normal Superior N 40 Mariano Moreno Cuadernillo Propedéutico 2017 Nivel Superior INDICE Página Datos 1 Tipos de Datos 2 Variables 3 Constantes 4 Operadores y Expresiones 5 Algoritmos - Algoritmos

Más detalles

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático v1.2 c 2005 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado

Más detalles

VARIABLES AUTOMÁTICAS

VARIABLES AUTOMÁTICAS VARIABLES AUTOMÁTICAS Perl es un lenguaje muy flexible y con unas instrucciones muy potentes y útiles. Uno de los aspectos más destacables en este sentido es el de las expresiones regulares, hay multitud

Más detalles

Java posee dos grandes categorías de tipos para las variables:

Java posee dos grandes categorías de tipos para las variables: Declaración identificador tipo int i; i entero String s; s referencia a string int a[]; a referencia a arreglo de enteros int[] b; b referencia a arreglo de enteros Java posee dos grandes categorías de

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 13048- LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2011-2012 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Se trata de realizar, mediante el generador de analizadores léxicos FLEX

Más detalles

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1 Análisis?... semántico? La semántica corresponde al significado asociado

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28 Componentes Básicos InCo InCo Componentes Básicos 1 / 28 Modelo de Computación Vemos al computador como un procesador de datos. +------------+ Entrada ===> Computador ===> Salida +------------+ InCo Componentes

Más detalles

Introducción a Java. Introducción a Java. Programación I

Introducción a Java. Introducción a Java. Programación I Introducción a Java Introducción a Java Programación I Como Funciona Tipos de Datos TIPO TAMAÑO RANGO byte 8 bits Valores numéricos de 128 a 127 short 16 bits Valores numéricos de 32.768 a 32.767 int 32

Más detalles

Diseño de compiladores Recordando la clase anterior

Diseño de compiladores Recordando la clase anterior Diseño de compiladores Recordando la clase anterior Control de Tipos public class Clase1 implements Interfaz1 private string entero1; void metodo1() int[] x = new string; x[5] = entero1 * y; void metodo1()

Más detalles

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

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

Más detalles

2ª Parte: Problemas (5 puntos sobre 10)

2ª Parte: Problemas (5 puntos sobre 10) NOMBRE: APELLIDOS: NIA: GRUPO: 2ª Parte: Problemas (5 puntos sobre 10) Duración: 1 hora 45 minutos Puntuación máxima: 5 puntos Fecha: 17 de Junio de 2013 PROBLEMA 1 (3 puntos) El sistema de gestión de

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

Estructuras de Datos. 14 de junio de Apellidos

Estructuras de Datos. 14 de junio de Apellidos Ejercicio 1) (3 puntos). Dado el TAD Pila de Números Enteros con las siguientes operaciones: boolean pilavacia (); void apilar (int x); int desapilar () throws PilaVacia; SE PIDE: Codificar un método estático

Más detalles

Tema 2.- Objetos y mensajes

Tema 2.- Objetos y mensajes Tema 2.- Objetos y mensajes 1. Objetos y mensajes: mecanismo de envío de mensajes...2 2. SMALLTALK: EXPRESIONES...3 2.1. LITERALES: designan objetos constantes...3 2.2. NOMBRES DE VARIABLES: identifican

Más detalles

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN - Introducción - Sintaxis - Semántica básica - Tipos de datos - Expresiones y enunciados - Procedimientos y ambientes - Tipos abstractos de datos y módulos

Más detalles

Análisis semántico: Comprobación de tipos

Análisis semántico: Comprobación de tipos Análisis semántico: Comprobación de tipos Expresiones de tipos, sistemas de comprobación de tipos, equivalencia, resolución de sobrecargas y unificación. Introducción Objetivo de comprobación estática:

Más detalles

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez Sintaxis de Java Sintaxis Define las reglas que determinar el uso de palabras clave, operadores y variables para construir y evaluar expresiones.

Más detalles

EXPRESIONES Y OPERADORES

EXPRESIONES Y OPERADORES EXPRESIONES Y OPERADORES Una expresión es un conjunto de operandos y operadores cuyo resultado puede ser evaluado. Las expresiones constituyen la base de cualquier aplicación y se construyen agrupando

Más detalles

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante. Javascript (II) 1 Elementos Básicos: Comentarios: Para una línea // Esto es un Comentario Para un bloque /*......... */ Literales: Valores que puede tomar una variable o una constante. Ejemplos: "Soy una

Más detalles

Construcciones del Lenguaje Java

Construcciones del Lenguaje Java Construcciones del Lenguaje Java Autor: Juan Alberto López Cavallotti Versión de Java: 5 / 6 Comentarios Comentario de Línea Comentario Multilínea //Esto es un comentario. /* Esto comenta varias lineas.

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4 En esta práctica trabajaremos con ANTLR a nivel semántico utilizando gramáticas con atributos. ANTLR permite implementar con facilidad los dos modelos

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Introducción Práctica de Programación Java Antonio Rivero Cuesta Sesión III La Sintaxis de Java II... 6 Estructuras de Control... 7 Estructuras de Selección... 8 Sentencia

Más detalles

Programación Estructurada. Sesión 2:El lenguaje de programación C

Programación Estructurada. Sesión 2:El lenguaje de programación C Programación Estructurada Sesión 2:El lenguaje de programación C Contextualización Una parte importante del lenguaje C son las palabras reservadas, son identificadores con un significado predefinido. Estas

Más detalles

Introducción a PL/SQL

Introducción a PL/SQL Introducción a PL/SQL Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla noviembre 2011 Objetivos de este tema Conocer PL/SQL. PL/SQL

Más detalles

Sobre Carga de Operadores

Sobre Carga de Operadores Programación Orientada o Objetos Univesidad de Los Andes - Facultad de Ingeniería Escuela de Sistemas Programación Digital II Profesor: Gilberto Diaz gilberto@ula.ve Las operaciones tradicionales que se

Más detalles

PROGRAMACIÓN GENÉRICA

PROGRAMACIÓN GENÉRICA PROGRAMACIÓN GENÉRICA Lenguajes de Programación - Orientación a Objetos: Progr. Genérica 1 Programación genérica Objetivo: escribir algoritmos genéricos, independientes de las clases concretas de los datos

Más detalles

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

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

Más detalles

3.3 Conceptos Básicos del Lenguaje Java

3.3 Conceptos Básicos del Lenguaje Java 3.3 Conceptos Básicos del Lenguaje Java Conjunto de Caracteres Java utiliza Unicode, un conjunto de caracteres de 16 bits Java permite leer ASCII de 7-bit o Latin-1, conviertiéndolo a Unicode Son pocos

Más detalles

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales UNA / AREA TRANSDEPARTAMENTAL DE ARTES MULTIMEDIALES Licenciatura en Artes Multimediales Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales JavaScript - Programación

Más detalles

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27

Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27 ÍNDICE Prefacio 25 Organización de la Unidad Didáctica.................... 25 Cómo utilizar el libro............................. 26 Objetivos docentes.............................. 27 1 Fundamentos de

Más detalles

1. Repaso del Lenguaje C M.C. Luis A. Zarza López

1. Repaso del Lenguaje C M.C. Luis A. Zarza López 1. Repaso del Lenguaje C M.C. Luis A. Zarza López Graficación por Computadora Universidad Tecnológica de la Mixteca Julio de 2016 Introducción El lenguaje C fue desarrollado en la década de 1970 en el

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

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

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

PHP: Lenguaje de programación

PHP: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Tipos de datos Enteros Con base decimal: 45, -43 Con base octal: 043, -054

Más detalles

Introducción al lenguaje C

Introducción al lenguaje C Introducción al lenguaje C Programación 2 Profesorado de Informática CeRP del Suroeste, Colonia, Uruguay 15 de marzo de 2016 Programación 2 Introducción al lenguaje C 15 de marzo de 2016 1 / 34 Objetivos

Más detalles

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota: Justificación: Se pretende con éste contribuir a que el alumno se inicie y conozca el entorno del IDE en la creación de pequeños programas en java Objetivos:

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

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS Todos los derechos de propiedad intelectual de esta obra pertenecen en exclusiva a la Universidad Europea de Madrid, S.L.U. Queda terminantemente prohibida la reproducción, puesta a disposición del público

Más detalles

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

Un calculadora avanzada... y algo más!

Un calculadora avanzada... y algo más! INFORMÁTICA, GRUPO D Un calculadora avanzada... y algo más! Vamos a familiarizarnos con el entorno interactivo de Python. Vamos a construir expresiones aritméticas y a guardar los resultados en variables

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

Tema 2: Elementos básicos de un programa. Tipos de datos, variables y constantes Asignación Operadores y expresiones

Tema 2: Elementos básicos de un programa. Tipos de datos, variables y constantes Asignación Operadores y expresiones Tema 2: Elementos básicos de un programa Tipos de datos, variables y constantes Asignación Operadores y expresiones Ejemplo de programa Dados dos números, leídos desde el teclado, visualizar el mayor #include

Más detalles

Procesadores del Lenguaje Práctica 1: Ejemplo sencillo

Procesadores del Lenguaje Práctica 1: Ejemplo sencillo Procesadores del Lenguaje Práctica 1: Ejemplo sencillo ANTLR es una herramienta que integra la generación de analizadores léxicos, sintácticos, árboles de sintaxis abstracta y evaluadores de atributos.

Más detalles

JavaScript: Lenguaje de programación

JavaScript: Lenguaje de programación Francisco J. Martín Mateos Carmen Graciani Diaz Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal: 45, -43 Con base octal: 043, -054 Con

Más detalles

2.2 Nombres, Ligado y Ámbito

2.2 Nombres, Ligado y Ámbito 2.2 Nombres, Ligado y Ámbito Ligado estático y dinámico, reglas de ámbito y prueba de tipos. Conceptos Nombres e Identificadores Variables Tipos Ámbito Constantes Nombres Identificador que designa en el

Más detalles

Generación de Código Intermedio

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

Más detalles

Tema 5. Análisis semántico

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

Más detalles

COMPILADORES. Tema 4. Análisis semántico

COMPILADORES. Tema 4. Análisis semántico COMPILADORES Tema 4. Análisis semántico Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 dtorres@mixteco.utm.mx Contenido 1. Funcionalidad del

Más detalles

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica Tema 2: Desarrollo de Algoritmos E.E. de Algorítmica Temas a tratar Identificadores Variables Constantes Tipos de Datos Separadores Operadores Aritméticos Unarios Relacionales y Condicionales Nivel de

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco

ING1310 Introducción a la Computación. Python. Conceptos Básicos. Carlos Reveco ING1310 Introducción a la Computación Python Conceptos Básicos Carlos Reveco creveco@dcc.uchile.cl careveco@miuandes.cl Facultad de Ingeniería/Universidad de los Andes/Chile Rev : 254 C.Reveco Facultad

Más detalles

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 2. Lenguaje de programación y ejecución de un programa 1 Léxico, sintaxis y semántica de un lenguaje #include #include

Más detalles

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

ESTRUCTURAS DE DATOS Y ALGORITMOS

ESTRUCTURAS DE DATOS Y ALGORITMOS ESTRUCTURAS DE DATOS Y ALGORITMOS CURSO 2009 PRÁCTICO 8 Nota: al igual que en los prácticos 6 y 7, en los problemas que siguen se usarán los tipos lista y árbol binario, como tipos abstractos, cada uno

Más detalles

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III Lenguaje C 1 Puntos previos Los códigos fuentes generados en C requieren ser compilados

Más detalles

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani Informática JavaScript: Lenguaje de programación Fco J. Martín Mateos Carmen Graciani Dpto. Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Literales Enteros Con base decimal:

Más detalles

Teoría 7. Lenguaje C. Int. a la Computación- Int. a la Programación Fund. De la Informática

Teoría 7. Lenguaje C. Int. a la Computación- Int. a la Programación Fund. De la Informática Teoría 7 Primer Cuatrimestre - 2017 1 Etapas en el proceso de resolver un problema: 1- Comprender el problema: lograr una abstracción 4 Descomposición del problema. 2- Bosquejar una solución: 4 Determinar

Más detalles

UNIDAD 2 Descripción de un programa

UNIDAD 2 Descripción de un programa Descripción de un programa Estructura general de un programa. Elementos básicos. Tipos de datos simples: enteros, reales y carácter. Representación de datos en memoria. Operaciones sobre tipos de datos

Más detalles

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V. Compiladores: Análisis Semántico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V. Verificaciòn de tipos Se puede hacer en forma Estàtica: en tiempo

Más detalles

Sebastián García Galán

Sebastián García Galán Universidad de Jaén E.U.P. Linares Dpto. Telecomunicaciones Área de Ingeniería Telemática Sebastián García Galán sgalan@ujaen.es Variables y tipos de datos Operaciones y operadores Clases y objetos Tipos

Más detalles

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de Grado en Ingeniería Informática Estructura de Datos y Algoritmos, Grupo 84M, 2014/2015 12 de Marzo de 2015 Nombre y Apellidos:... PROBLEMA 1 (1 punto) Programación Orientada a Objetos. Una empresa de alquiler

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º 1. Ejercicio (1 puntos) Dado el array A={8, 3, 7, 1, 4, 9, 5, 2, 6 (a) Escribir la secuencia de ordenación del array A por medio del algoritmo de InsertionSort. {8, 3, 7, 1, 4, 9, 5, 2, 6 {3, 8, 7, 1,

Más detalles

Informática General Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales

Informática General Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales Informática General 2018 Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales Qué es JavaScript? Se trata de un lenguaje de tipo script compacto, basado en objetos y guiado por eventos

Más detalles

Índice general 7. Presentación 15

Índice general 7. Presentación 15 ÍNDICE GENERAL Índice general 7 Presentación 15 1. Introducción 19 1.1. Antecedentes históricos de la computación................... 19 1.2. Definiciones previas............................... 24 1.3.

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

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos 1! 1. Algoritmos recursivos " 1.1 Algoritmos recursivos. Recursión simple " 1.2 Algoritmos con vuelta atrás y ejemplos! 2. Complejidad de

Más detalles

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática) Primera parte (50% nota del examen) Septiembre 2009 1) Se desea hacer un método con la cabecera que se muestra abajo que cree y retorne

Más detalles

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017 Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)

Más detalles

Tema: Estructuras de Selección en C#.

Tema: Estructuras de Selección en C#. 2 Programación I Tema: Estructuras de Selección en C#. Programación I. Guía 4 3 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Objetivos Utilizar las instrucciones de

Más detalles