PROCESADORES DEL LENGUAJES Septiembre 2017

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

Download "PROCESADORES DEL LENGUAJES Septiembre 2017"

Transcripción

1 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 y llamadas a procedimientos. Los tipos predefinidos del lenguaje son enteros (int) y reales (real). Las expresiones aritméticas admitidas por el lenguaje se construyen desde números (p.e. 1.0, 1) y operaciones de suma (+), resta (-), multiplicación (*) y división (/). Las llamadas a procedimiento pueden ir o no precedidas de una interfaz. A continuación mostramos un ejemplo de programa MP: INTERFACE m1 //Declaración de interfaz p(r:int) p(r:real) g(i:int,j:real) INTERFACE m2 //Declaración de interfaz p(r:real) g(i:real,j:int) h() { a,b,c:int //Declaración de variables x,y,z:real h() //Llamadas a procedimientos m1.p(x-1.0) m2.h() m1.g(b,y+1) SE PIDE: Analizadores léxico y sintáctico para el lenguaje de programación MP. (3 puntos) Descripciones a entregar: [IMPLEMENTACIÓN] Parser Antlr para el lenguaje de programación MP. (2 puntos) class AnasintMP extends Parser programa : interfaces bloque interfaces : (interfaz)+ interfaz : INTERFACE IDENT (procedimiento)+ procedimiento : IDENT PA parametros PC PUNTOYCOMA parametros : (parametro COMA)=>parametro (COMA parametro)+ parametro parametro : IDENT DOSPUNTOS (ENTERO REAL) bloque : LLAVEABIERTA variables (lista_instrs)? LLAVECERRADA variables : (vars vars)=> vars variables vars

2 vars : IDENT (COMA IDENT)* DOSPUNTOS (ENTERO^ REAL^) PUNTOYCOMA lista_instrs : instruccion (lista_instrs)? instruccion : (IDENT PUNTO)=> IDENT PUNTO IDENT PA (lista_exprs)? PC PUNTOYCOMA IDENT PA (lista_exprs)? PC PUNTOYCOMA lista_exprs : expr (COMA expr)* expr : (expr1 (MAS MENOS POR DIV))=> expr1 (MAS MENOS POR DIV) expr expr1 expr1 : IDENT NENTERO NREAL [IMPLEMENTACIÓN] Lexer Antlr para el lenguaje de de programación MP (1 punto) class AnalexMP extends Lexer options{ importvocab = AnasintMP k=2 tokens{ INTERFACE = "INTERFACE" ENTERO = "int" REAL = "real" protected DIGITO: '0'..'9' protected LETRA: ('a'..'z' 'A'..'Z' '_') BT: (' ' '\t'){$settype(token.skip) SL: "\r\n" {newline() $settype(token.skip) COMENTARIO : "//" (options {greedy=false:.)* "\r\n" {$settype(token.skip) PUNTOYCOMA: '' PUNTO: '.' COMA: ',' PA: '(' PC: ')' DOSPUNTOS: ':' LLAVEABIERTA: '{' LLAVECERRADA: '' MAS: '+' MENOS: '-' POR: '*' DIV: '/' IDENT: LETRA(LETRA DIGITO)* NUM: ((DIGITO)+ PUNTO)=>(DIGITO)+ PUNTO (DIGITO)+ {$settype(nentero) (DIGITO)+ {$settype(nreal)

3 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 y llamadas a procedimientos. Los tipos predefinidos del lenguaje son enteros (int) y reales (real). Las expresiones aritméticas admitidas por el lenguaje se construyen desde números (p.e. 1.0, 1) y operaciones de suma (+), resta (-), multiplicación (*) y división (/). En las operaciones aritméticas se admite operar mezclando enteros y reales siendo el resultado real. Las variables usadas y no declaradas se suponen que tienen un tipo indefinido. Toda expresión con una parte indefinida es de tipo indefinido. Las llamadas a procedimiento pueden ir o no precedidas de una interfaz. SE PIDE: Analizador semántico de programas MP que detecte los siguientes errores en llamadas a procedimientos: (Error 1) Interfaz inexistente. (Error 2) Procedimiento no declarado en una determinada interfaz. (Error 3) Procedimiento no declarado en ninguna interfaz. (Error 4) Procedimiento declarado en múltiples interfaces. (Error 5) Error en los parámetros de la llamada al procedimiento en una determinada interfaz. A continuación mostramos un ejemplo de un programa MP con errores semánticos: INTERFACE m1 p(r:int) p(r:real) g(i:int,j:real) INTERFACE m2 p(r:real) g(i:real,j:int) h() { a,b,c:int x,y,z:real m3.p(x) (Error 1) Interfaz m3 no declarada h() r() (Error 3) Procedimiento r no declarado en ninguna interfaz m1.p(a) p(x) (Error 4) Procedimiento p declarado en múltiples interfaces m1.p(x-1.0) m2.h() m1.h() (Error 2) Procedimiento h no declarado en interfaz m1 m1.g(b,y+1) m2.g(a,x) (Error 5) Error en los parámetros de la llamada al procedimiento g en interfaz m2 m2.g(e,x) (Error 5) Error en los parámetros de la llamada al procedimiento g en interfaz m2 Los errores deben ser informados por consola siguiendo el formato mostrado para el programa de ejemplo. Descripciones a entregar: [DISEÑO ABSTRACTO] (3 puntos) Diseño abstracto del analizador semántico. Use la gramática dada en el Anexo.

4 header{ import java.io.* import java.util.* class AnasemMP extends TreeParser tokens{ TIPOINDEF { almacen para variables (variables): se almacenará el nombre y el tipo de cada variable almacen para las interfaces (interfaces): se almacenará para cada interfaz, sus procedimientos. Cada procedimiento debe almacenar nombre y un conjunto de listas para los tipos de sus parámetros. memorizar_interfaz(interfaz): almacena una interfaz sin procedimientos. memorizar_variable(var, tipo): almacena una variable con su tipo memorizar_procedimiento(interfaz, procedimiento, tipos): almacena un procedimiento con la lista de tipos correspondiente a sus parámetros en la interfaz dada. comprobar_procedimiento(procedimiento, tipos): comprueba en cuántas interfaces ocurre el procedimiento dado considerando sus parámetros. Permite detectar y emitir mensajes de Error 3 y Error 4. comprobar_procedimiento_en_interfaz(interfaz, procedimiento, tipos): comprueba si un procedimiento dado está declarado en una interfaz considerando sus parámetros. Permite detectar y emitir mensajes de Error 5, Error 1 y Error 2. calcular_tipo_operacion(tipo1,tipo2): calcula el tipo una operación binaria. calcular_tipo_variable(var): calcula el tipo de una variable accediendo al almacen de variables. programa : #(PROGRAMA interfaces bloque) interfaces : (interfaz)+ interfaz : #(INTERFACE interfaz:ident {memorizar_interfaz(interfaz) (procedimiento[interfaz])+) procedimiento[interfaz] : #(PROCEDIMIENTO procedimiento:ident tipos=parametros) {memorizar_procedimiento(interfaz, procedimientos, tipos) parametros returns [Lista de tipos] : (tipo=parametro {añadir tipo a la lista tipos)* parametro returns [t]: #(IDENT t=tipo) tipo returns [t]: a:entero {t=entero b:real {t=real bloque : #(BLOQUE variables instrucciones) variables : #(VARIABLES (vars)+) instrucciones : #(INSTRUCCIONES (instruccion)+)

5 vars : #(ENTERO (var:ident {memorizar_variable(var, entero))+) #(REAL (var:ident {memorizar_variable(var, real))+) instruccion : #(PUNTO interfaz:ident procedimiento:ident (tipos=lista_exprs)?) {comprobar_procedimiento_en_interfaz(interfaz, procedimiento, tipos) #(procedimiento:ident (tipos=lista_exprs)?) {comprobar_procedimiento(procedimiento, tipos) lista_exprs returns [Lista de tipos] : (tipo=expr {añadir tipo a la lista tipos)+ expr returns [tipo] : #(MAS t1=expr t2=expr){tipo=calcular_tipo_operacion(t1,t2) #(MENOS t1=expr t2=expr){tipo=calcular_tipo_operacion(t1,t2) #(POR t1=expr t2=expr){tipo=calcular_tipo_operacion(t1,t2) #(DIV t1=expr t2=expr){tipo=calcular_tipo_operacion(t1,t2) var:ident {tipo=calcular_tipo_variable(var) NENTERO {t=entero NREAL {t=real [IMPLEMENTACIÓN] Atribuir la gramática Antlr dada en el Anexo con una implementación del diseño abstracto. header{ import java.io.* import java.util.* class AnasemMP extends TreeParser tokens{ TIPOINDEF { Map<String,Integer> variables = new HashMap<String,Integer>() Map<String,Map<String,Set<List<Integer>>>> interfaces = new HashMap<String,Map<String,Set<List<Integer>>>>() void memorizar_interfaz(string interfaz){ Map<String,Set<List<Integer>>>aux = new HashMap<String,Set<List<Integer>>>() interfaces.put(interfaz,aux) System.out.println("Interfaz "+interfaz+" procesada") void memorizar_variable(string var, Integer tipo){ variables.put(var,tipo) System.out.println("Variable "+var+" procesada") void memorizar_procedimiento(string interfaz, String procedimiento, List<Integer> tipos){ Map<String,Set<List<Integer>>> i_aux = interfaces.get(interfaz) Set<List<Integer>> s_aux = i_aux.get(procedimiento) if (s_aux==null) s_aux = new HashSet<List<Integer>>() s_aux.add(tipos) i_aux.put(procedimiento,s_aux) interfaces.put(interfaz,i_aux) for(list<integer>l:s_aux) System.out.println("Procedimiento "+procedimiento+"("+l.tostring()+")"+

6 " en interfaz "+interfaz+" procesado") void mostrar_interfaces(){ System.out.println(interfaces) void mostrar_variables(){ System.out.println(variables) void comprobar_procedimiento(string procedimiento, List<Integer> tipos){ boolean resultado = false Set<String> keys = interfaces.keyset() Iterator<String> it1 = keys.iterator() int cont=0 while(it1.hasnext()){ if (comprobar_procedimiento_en_interfaz_aux(it1.next(),procedimiento,tipos)==0) cont++ if (cont==0) System.out.println("(Error 3) Procedimiento "+procedimiento+" no declarado en ninguna interfaz") if (cont>1) System.out.println("(Error 4) Procedimiento "+procedimiento+" declarado en múltiples interfaces") int comprobar_procedimiento_en_interfaz_aux(string interfaz, String procedimiento, List<Integer> tipos){ int error = 0 if (interfaces.keyset().contains(interfaz)){ Map<String,Set<List<Integer>>> procedimientos = interfaces.get(interfaz) if (procedimientos.keyset().contains(procedimiento)){ Set<List<Integer>>perfiles = procedimientos.get(procedimiento) Iterator<List<Integer>> it = perfiles.iterator() boolean encontrado=false while (it.hasnext() &!encontrado){ List<Integer> perfil = it.next() if (perfil.equals(tipos)) encontrado = true if (!encontrado) error = 5 else error = 2 else error = 1 return error void comprobar_procedimiento_en_interfaz(string interfaz, String procedimiento, List<Integer> tipos){ //System.out.println("(comprobar_procedimiento_en_interfaz) "+interfaz+ // " "+procedimiento+" "+tipos) int error = comprobar_procedimiento_en_interfaz_aux(interfaz,procedimiento,tipos) switch(error){ case 1: System.out.println("(Error 1) Interfaz "+interfaz+" no declarada") break case 2: System.out.println("(Error 2) Procedimiento "+procedimiento+ " no declarado en interfaz "+interfaz) break case 5: System.out.println("(Error 5) Error en los parámetros de la llamada al procedimiento "+procedimiento+

7 " en interfaz "+interfaz)break default: break Integer calcular_tipo_operacion(integer tipo1,integer tipo2){ Integer tipo = TIPOINDEF if (tipo1 == TIPOINDEF tipo2 == TIPOINDEF) tipo = TIPOINDEF else if (tipo1==real tipo2 == REAL) tipo=real else tipo=entero return tipo Integer calcular_tipo_variable(string var){ Integer tipo = TIPOINDEF if (variables.get(var)==null) System.out.println("Variable "+var+" no declarada") else tipo=variables.get(var) return tipo programa : #(PROGRAMA interfaces {mostrar_interfaces() bloque) interfaces : (interfaz)+ interfaz : #(INTERFACE a:ident {memorizar_interfaz(a.gettext()) (procedimiento[a.gettext()])+) procedimiento[string interfaz] {List<Integer> tipos: #(PROCEDIMIENTO a:ident tipos=parametros) {memorizar_procedimiento(interfaz, a.gettext(), tipos) parametros returns [List<Integer> tipos = new LinkedList<Integer>()] {Integer t: (t=parametro {tipos.add(t))* parametro returns [Integer t=null]: #(IDENT t=tipo) tipo returns [Integer t=null]: a:entero {t=new Integer(a.getType()) b:real {t=new Integer(b.getType()) bloque : #(BLOQUE variables {mostrar_variables() instrucciones) variables : #(VARIABLES (vars)+) instrucciones : #(INSTRUCCIONES (instruccion)+) vars : #(ENTERO (a:ident {memorizar_variable(a.gettext(), ENTERO))+) #(REAL (b:ident {memorizar_variable(b.gettext(), REAL))+) instruccion {List<Integer> tipos=new LinkedList<Integer>(): #(PUNTO i:ident p:ident (tipos=lista_exprs)?) {comprobar_procedimiento_en_interfaz(i.gettext(), p.gettext(), tipos) #(q:ident (tipos=lista_exprs)?) {comprobar_procedimiento(q.gettext(), tipos) lista_exprs returns [List<Integer> tipos = new LinkedList<Integer>()]

8 {Integer tipo: (tipo=expr {tipos.add(tipo))+ expr returns [Integer t = TIPOINDEF] {Integer t1,t2: #(MAS t1=expr t2=expr){t=calcular_tipo_operacion(t1,t2) #(MENOS t1=expr t2=expr){t=calcular_tipo_operacion(t1,t2) #(POR t1=expr t2=expr){t=calcular_tipo_operacion(t1,t2) #(DIV t1=expr t2=expr){t=calcular_tipo_operacion(t1,t2) a:ident {t=calcular_tipo_variable(a.gettext()) NENTERO {t=entero NREAL {t=real Anexo header{ import java.io.* import java.util.* class AnasemMP extends TreeParser tokens{ TIPOINDEF programa : #(PROGRAMA interfaces bloque) interfaces : (interfaz)+ interfaz : #(INTERFACE IDENT (procedimiento)+) procedimiento: #(PROCEDIMIENTO IDENT parametros) parametros: (parametro)* parametro: #(IDENT tipo) tipo: ENTERO REAL bloque : #(BLOQUE variables instrucciones) variables : #(VARIABLES (vars)+) instrucciones : #(INSTRUCCIONES (instruccion)+) vars : #(ENTERO (IDENT)+) #(REAL (IDENT)+) instruccion: #(PUNTO IDENT IDENT (lista_exprs)?) #(IDENT (lista_exprs)?) lista_exprs: (expr)+ expr: #(MAS expr expr) #(MENOS expr expr) #(POR expr expr) #(DIV expr expr) IDENT NENTERO NREAL

9 PROCESADORES DEL LENGUAJES Septiembre 2017 NOMBRE: GRUPO: EL LENGUAJE COND1 COND1 es un lenguaje de programación. El programa COND1 consta de declaraciones de variables enteras y secuencia de instrucciones. Las instrucciones en COND1 son de cuatro tipos: asignación, instrucción condicional, impresión por pantalla de variables y ruptura de control. A continuación se muestran dos programas COND1 junto a la impresión por pantalla generada por sus respectivas interpretaciones: PROGRAMA VARIABLES x,y INSTRUCCIONES x = 1 y = 2 mostrar(x,y) si (x>y) entonces ruptura x=y sino x=y mostrar(x,y) ruptura si (x==y) entonces x=10 y=20 finsi finsi mostrar(x,y) (mostrar) x = 1 y = 2 (mostrar) x = 2 y = 2 (mostrar) x = 2 y = 2 PROGRAMA VARIABLES x,y INSTRUCCIONES x = 1 y = 2 mostrar(x,y) si (x<y) entonces ruptura x=y sino x=y mostrar(x,y) ruptura si (x==y) entonces x=10 y=20 finsi finsi mostrar(x,y) (mostrar) x = 1 y = 2 (mostrar) x = 1 y = 2 Interpretación basada en las siguientes restricciones: La declaración de variables inicializa éstas al valor 0. Las instrucciones se ejecutan secuencialmente. La asignación de un valor a una variable se realiza con el operador =. Las expresiones aritméticas pueden utilizar operadores suma, resta y multiplicación. Las expresiones booleanas o condiciones pueden utilizar el operador de igualdad, mayor, menor, mayor o igual, menor o igual y distinto. La ejecución de una instrucción condicional implica evaluar la condición y ejecutar el bloque de instrucciones correspondiente. La instrucción de ruptura provoca la interrupción en la ejecución del bloque de instrucciones en el que ocurre la ruptura. Las impresiones por pantalla tienen como argumento una secuencia de variables. La impresión muestra el valor de las variables correspondientes. Por ejemplo, mostrar(x,y)mostrará un mensaje del tipo (mostrar) x=..., y=...

10 SE PIDE: Intérprete de programas COND1 (suponemos los programas sin errores). (3 puntos) Descripciones a entregar: [DISEÑO ABSTRACTO] Diseño abstracto del intérprete. Use la gramática dada en el Anexo. class InterpreteCOND1 extends TreeParser { memoria_variables: almacena para cada variable, su valor asignar(var,num): almacena el valor num en variable var consultar(var): consulta en memoria_variables el valor de variable var mostrar(vars): mostrar el valor de las vaiables vars Se usarán centinelas para controlar la interpretaciónde instrucciones. El valor cierto indica que se debe interpretar y el falso que no se debe interpretar. programa : #(PROGRAMA variables instrucciones[centinela inicialmente cierto]) variables : #(VARIABLES (lista_vars)?) lista_vars : (var:var {asignar(var,0))+ instrucciones[centinela] : #(INSTRUCCIONES (lista_instrs[centinela])?) lista_instrs[centinela] : centinela_aux=instruccion[centinela] (lista_instrs[centinela & centinela_aux])? instruccion[centinela_b] returns [centinela_r]: asignacion[centinela_b] {centinela_r=centinela_b condicional[centinela_b] {centinela_r=centinela_b ruptura[centinela_b] {centinela_r=false impresion[centinela_b] {centinela_r=centinela_b asignacion[centinela_b] : #(ASIG var:var valor=expr) {if (centinela_b) asignar(var,valor) condicional[centinela_b] : #(SI centinela_aux=condicion lista_instrs[centinela_b & centinela_aux] (alternativa[b&!aux])?) alternativa[centinela_b] : #(SINO lista_instrs[centinela_b]) ruptura[centinela_b] : RUPTURA impresion[centinela_b] : #(MOSTRAR vars){if (centinela_b) mostrar(vars) vars : (VAR)+ condicion returns[r] : #(MAYOR r1=expr r2=expr){r=(r1>r2) #(MENOR r1=expr r2=expr){r=(r1<r2) #(IGUAL r1=expr r2=expr){r=(r1==r2) #(DISTINTO r1=expr r2=expr){r=(r1!=r2) #(MAYORIGUAL r1=expr r2=expr){r=(r1>=r2)

11 #(MENORIGUAL r1=expr r2=expr){r=(r1<=r2) expr returns[r] : #(MAS r1=expr1 r2=expr){r=(r1+r2) #(MENOS r1=expr1 r2=expr){r=(r1-r2) #(POR r1=expr1 r2=expr){r=(r1*r2) r=expr1 expr1 returns[r] : VAR {r=consultar(var) NUM {r=valor correspodiente a text NUM [IMPLEMENTACIÓN] Atribuir la gramática del Anexo con una implementación del diseño abstracto. header{ import java.util.* class InterpreteCOND1 extends TreeParser { Map<String,Integer>memoria_variables = new HashMap<String,Integer>() void asignar(string var,integer num){ //System.out.println("(asignar)"+" "+var+" "+num) memoria_variables.put(var, num) Integer consultar(string var){ return memoria_variables.get(var) void mostrar(ast vars){ System.out.println("(mostrar)") AST it=vars while (it!=null){ System.out.println(it.getText()+ " = "+memoria_variables.get(it.gettext())) it = it.getnextsibling() programa : #(PROGRAMA variables instrucciones[true]) variables : #(VARIABLES (lista_vars)?) lista_vars : (a:var {asignar(a.gettext(),0))+ instrucciones[boolean centinela] : #(INSTRUCCIONES (lista_instrs[centinela])?) lista_instrs[boolean centinela] {boolean aux: aux=instruccion[centinela] (lista_instrs[centinela&aux])? instruccion[boolean b] returns [boolean r = true]: asignacion[b] {r=b condicional[b] {r=b ruptura[b] {r=false impresion[b] {r=b asignacion[boolean b] {Integer r : #(ASIG a:var r=expr) {if (b) asignar(a.gettext(),r)

12 condicional[boolean b] {boolean aux: #(SI aux=condicion lista_instrs[b&aux] (alternativa[b&!aux])?) alternativa[boolean b] : #(SINO lista_instrs[b]) ruptura[boolean b] : RUPTURA impresion[boolean b] : #(MOSTRAR l:vars){if (b) mostrar(l) vars : (VAR)+ condicion returns[boolean r=true] {Integer r1,r2: #(MAYOR r1=expr r2=expr){r=(r1>r2) #(MENOR r1=expr r2=expr){r=(r1<r2) #(IGUAL r1=expr r2=expr){r=(r1==r2) #(DISTINTO r1=expr r2=expr){r=(r1!=r2) #(MAYORIGUAL r1=expr r2=expr){r=(r1>=r2) #(MENORIGUAL r1=expr r2=expr){r=(r1<=r2) expr returns[integer r=0] {Integer r1,r2: #(MAS r1=expr1 r2=expr){r=(r1+r2) #(MENOS r1=expr1 r2=expr){r=(r1-r2) #(POR r1=expr1 r2=expr){r=(r1*r2) r=expr1 expr1 returns[integer r=0] : a:var {r=consultar(a.gettext()) b:num {r=new Integer(b.getText()) Aprovechando el diseño del intérprete, SE PIDE: Compilador que genere programas COND1 equivalentes sin instrucciones condicionales e instrucciones de ruptura. (1 punto) Por ejemplo, el programa equivalente al primer programa de ejemplo es: PROGRAMA VARIABLES x,y INSTRUCCIONES x = 1 y = 2 mostrar(x,y) x=y mostrar(x,y) mostrar(x,y) Descripciones a entregar: [DISEÑO ABSTRACTO] Diseño abstracto del compilador. Use la gramática dada en el Anexo. class CompiladorCOND1 extends TreeParser { memoria_variables: almacena para cada variable, su valor asignar(var,num): almacena el valor num en variable var consultar(var): consulta en memoria_variables el valor de variable var

13 Se usarán centinelas para controlar la compilación de instrucciones. El valor cierto indica que se debe compilar y el falso que no se debe compilar. Fichero f abrir_fichero(): abrir fichero f cerrar_fichero(): cerrar fichero f escribir_fichero(texto): escribir texto en fichero f convertir(expr): convertir el ASA expr en un texto escribir_programa(): escribir inicio del programa COND1 escribir_variables(vars): escribir variables vars escribir_instrucciones(): escribir comienzo de instrucciones del programa COND1 escribir_asignacion(var, expr): escribir una instrucción de asignación compuesta de variable var y expresión expr. escribir_mostrar(vars): escribir instrucción mostrar. programa : #(PROGRAMA {abrir_fichero() escribir_programa() variables instrucciones[centinela con valor cierto]) {cerrar_fichero() variables : #(VARIABLES (lista_vars)? {escribir_variables(lista_vars)) lista_vars : (var:var {asignar(var,0))+ instrucciones[centinela] : #(INSTRUCCIONES {escribir_instrucciones() (lista_instrs[centinela])?) lista_instrs[centinela] : centinela_aux=instruccion[centinela] (lista_instrs[centinela & centinela_aux])? instruccion[centinela_b] returns [centinela_r]: asignacion[centinela_b] {centinela_r=centinela_b condicional[centinela_b] {centinela_r=centinela_b ruptura[centinela_b] {centinela_r=false impresion[centinela_b] {centinela_r=centinela_b asignacion[centinela_b] : #(ASIG var:var valor=expr) {if (centinela_b) { asignar(var,valor) escribir_asignacion(var, convertir(expr)) condicional[centinela_b] : #(SI centinela_aux=condicion lista_instrs[centinela_b & centinela_aux] (alternativa[centinela_b &!centinela_aux])?) alternativa[centinela_b] : #(SINO lista_instrs[centinela_b]) ruptura[centinela_b] : RUPTURA impresion[centinela_b] : #(MOSTRAR vars){if (centinela_b) {escribir_mostrar(vars) vars : (VAR)+ condicion returns[r] : #(MAYOR r1=expr r2=expr){r=(r1>r2) #(MENOR r1=expr r2=expr){r=(r1<r2)

14 #(IGUAL r1=expr r2=expr){r=(r1==r2) #(DISTINTO r1=expr r2=expr){r=(r1!=r2) #(MAYORIGUAL r1=expr r2=expr){r=(r1>=r2) #(MENORIGUAL r1=expr r2=expr){r=(r1<=r2) expr returns[r] : #(MAS r1=expr1 r2=expr){r=(r1+r2) #(MENOS r1=expr1 r2=expr){r=(r1-r2) #(POR r1=expr1 r2=expr){r=(r1*r2) r=expr1 expr1 returns[r] : var:var {r=consultar(var) num:num {r=convertir a texto num [IMPLEMENTACIÓN] Atribuir la gramática del Anexo con una implementación del diseño abstracto. header{ import java.util.* import java.io.* class CompiladorCOND1 extends TreeParser { Map<String,Integer>memoria_variables = new HashMap<String,Integer>() void asignar(string var,integer num){ //System.out.println("(asignar)"+" "+var+" "+num) memoria_variables.put(var, num) Integer consultar(string var){ return memoria_variables.get(var) FileWriter f void abrir_fichero(){ try{ f = new FileWriter("./resultado.txt") catch(ioexception e){system.out.println(e.tostring()) void cerrar_fichero(){ try{ f.close() catch(ioexception e){system.out.println(e.tostring()) void escribir_fichero(string s){ try{ f.write(s) //System.out.print(s) catch(ioexception e){system.out.println(e.tostring()) void escribir_espacios(){ try{ for(int i=0i<espaciosi++){ f.write(' ') System.out.print(' ') catch(ioexception e){system.out.println(e.tostring())

15 int espacios = 0 String convertir(ast expr){ String resultado = new String() switch(expr.gettype()){ case MAS: resultado = "("+convertir(expr.getfirstchild())+"+"+ convertir(expr.getfirstchild().getnextsibling())+")" break case MENOS: resultado = "("+convertir(expr.getfirstchild())+"-"+ convertir(expr.getfirstchild().getnextsibling())+")" break case POR: resultado = convertir(expr.getfirstchild())+"*"+ convertir(expr.getfirstchild().getnextsibling()) break case NUM: case VAR: resultado = expr.gettext() break default: break return resultado void escribir_programa(){ escribir_espacios() String r = new String("PROGRAMA\n") escribir_fichero(r) void escribir_variables(ast vars){ escribir_espacios() String r = new String("VARIABLES\n") escribir_fichero(r) if (vars!=null){ espacios+=3 escribir_espacios() AST it = vars while (it!=null){ r = new String(it.getText()) it = it.getnextsibling() if (it!=null) r=r+"," escribir_fichero(r) r="\n" escribir_fichero(r) espacios-=3 void escribir_instrucciones(){ escribir_espacios() String r = new String("INSTRUCCIONES\n") escribir_fichero(r) espacios+=3 void escribir_asignacion(string var, String expr){ escribir_espacios() String r = new String(var+"="+expr+"\n") escribir_fichero(r) void escribir_mostrar(ast vars){ escribir_espacios() String r= new String("mostrar(")

16 AST it = vars while (it!=null){ r=r+it.gettext() it=it.getnextsibling() if (it!=null) r=r+"," r=r+")\n" escribir_fichero(r) programa : #(PROGRAMA {abrir_fichero() escribir_programa() variables instrucciones[true]) {cerrar_fichero() variables : #(VARIABLES (l:lista_vars)? {escribir_variables(l)) lista_vars : (a:var {asignar(a.gettext(),0))+ instrucciones[boolean centinela] : #(INSTRUCCIONES {escribir_instrucciones() (lista_instrs[centinela])?) lista_instrs[boolean centinela] {boolean aux: aux=instruccion[centinela] (lista_instrs[centinela&aux])? instruccion[boolean b] returns [boolean r = true]: asignacion[b] {r=b condicional[b] {r=b ruptura[b] {r=false impresion[b] {r=b asignacion[boolean b] {Integer r : #(ASIG a:var r=c:expr) {if (b) { asignar(a.gettext(),r) escribir_asignacion(a.gettext(), convertir(c)) condicional[boolean b] {boolean aux: #(SI aux=condicion lista_instrs[b&aux] (alternativa[b&!aux])?) alternativa[boolean b] : #(SINO lista_instrs[b]) ruptura[boolean b] : RUPTURA impresion[boolean b] : #(MOSTRAR l:vars){if (b) {escribir_mostrar(l) vars : (VAR)+ condicion returns[boolean r=true] {Integer r1,r2: #(MAYOR r1=expr r2=expr){r=(r1>r2) #(MENOR r1=expr r2=expr){r=(r1<r2) #(IGUAL r1=expr r2=expr){r=(r1==r2) #(DISTINTO r1=expr r2=expr){r=(r1!=r2) #(MAYORIGUAL r1=expr r2=expr){r=(r1>=r2) #(MENORIGUAL r1=expr r2=expr){r=(r1<=r2) expr returns[integer r=0] {Integer r1,r2: #(MAS r1=expr1 r2=expr){r=(r1+r2) #(MENOS r1=expr1 r2=expr){r=(r1-r2) #(POR r1=expr1 r2=expr){r=(r1*r2) r=expr1 expr1 returns[integer r=0] : a:var {r=consultar(a.gettext()) b:num {r=new Integer(b.getText())

17 Anexo class InterpreteCompilador extends TreeParser programa : #(PROGRAMA variables instrucciones) variables : #(VARIABLES (lista_vars)?) lista_vars : (VAR)+ instrucciones : #(INSTRUCCIONES (lista_instrs)?) lista_instrs : instruccion (lista_instrs)? instruccion : asignacion condicional ruptura impresion asignacion : #(ASIG VAR expr) condicional: #(SI condicion lista_instrs (alternativa)?) alternativa : #(SINO lista_instrs) ruptura : RUPTURA impresion : #(MOSTRAR vars) vars : (VAR)+ condicion : #(MAYOR expr expr) #(MENOR expr expr) #(IGUAL expr expr) #(DISTINTO expr expr) #(MAYORIGUAL expr expr) #(MENORIGUAL expr expr) expr : #(MAS expr1 expr) #(MENOS expr1 expr) #(POR expr1 expr) expr1 expr1 : VAR NUM

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

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

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

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

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

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

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

LABORATORIO 1: ENTORNO DE DESARROLLO

LABORATORIO 1: ENTORNO DE DESARROLLO 1 LABORATORIO 1: ENTORNO DE DESARROLLO OBJETIVO Especificar el entorno de desarrollo para las sesiones de laboratorio. DURACIÓN: 1 sesión. ANTLR Y ECLIPSE ANTLR es una herramienta diseñada para facilitar

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

TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO

TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO 1 TEMA 2: ANÁLISIS LÉXICO-SINTÁCTICO OBJETIVO Dar respuesta a las siguientes preguntas: Qué es el análisis léxico-sintáctico de un lenguaje? Cómo se diseña y construye un analizador léxico-sintáctico?

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

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

INTERPRETACIÓN Y COMPILACIÓN

INTERPRETACIÓN Y COMPILACIÓN 1 INTERPRETACIÓN Y COMPILACIÓN OBJETIVO Problemas para consolidar el diseño y construcción de intérpretes y compiladores. PROBLEMA 1: CALCPROG Supongamos un lenguaje llamado CALCPROG para programar secuencias

Más detalles

ANÁLISIS LÉXICO-SINTÁCTICO

ANÁLISIS LÉXICO-SINTÁCTICO 1 ANÁLISIS LÉXICO-SINTÁCTICO OBJETIVO Problemas para consolidar el diseño y construcción de analizadores léxico-sintácticos. PROBLEMA 1: LENGUAJE EXPL Supongamos un lenguaje de expresiones lógicas llamado

Más detalles

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

TEMA 6: ANÁLISIS SEMÁNTICO DE EXPRESIONES E INSTRUCCIONES EN L-0 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

Más detalles

Árboles de Sintaxis Abstracta en ANTLR

Árboles de Sintaxis Abstracta en ANTLR Árboles de Sintaxis Abstracta en ANTLR Antlr permite construir árboles de sintaxis abstracta (ASA) mediante anotaciones en la gramática indicando qué tokens deben tratarse como raíces de subárboles, cuáles

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 Esta práctica supone la primera toma de contacto con la herramienta ANTLR (ANother Tool for Language Recognition). ANTLR es una herramienta que integra

Más detalles

PROCESADORES DEL LENGUAJES Septiembre 2014

PROCESADORES DEL LENGUAJES Septiembre 2014 PROCESADORES DEL LENGUAJES Septiembre 2014 ANÁLISIS SEMÀNTICO Y GENERACIÓN DE CÓDIGO Dado el siguiente parser ANTLR, class Anasint extends Parser buildast=true tokens{ ONTOLOGY ontologia : (declaracion)*

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

ANÁLISIS LÉXICO-SINTÁCTICO

ANÁLISIS LÉXICO-SINTÁCTICO 1 ANÁLISIS LÉXICO-SINTÁCTICO OBJETIVO Problemas para consolidar el diseño y construcción de analizadores léxico-sintácticos. PROBLEMA 1: LENGUAJE EXPL Supongamos un lenguaje de expresiones lógicas llamado

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

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

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

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

TEMA 4: INTERPRETACIÓN, COMPILACIÓN

TEMA 4: INTERPRETACIÓN, COMPILACIÓN 1 TEMA 4: INTERPRETACIÓN, COMPILACIÓN OBJETIVO Dar respuesta a las siguientes preguntas: Qué es la interpretación de un lenguaje? Qué es la compilación de un lenguaje? Cómo se diseña y construye un intérprete?

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

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

Bloque II. Elementos del lenguaje de programación Java

Bloque II. Elementos del lenguaje de programación Java Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida

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

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens Introducción a Java Juan Manuel Fernández Peña Curso 2005. Rev 2011 Comentarios: //comentario /* comentario fin de comentario */ /** comentario para javadoc fin */ Palabras reservadas: (como ejemplo) abstract,

Más detalles

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo Tema 4 Control de flujo Programación 2015-2016 Programación - Tema 4: Control de Flujo 1 Tema 4. Control de flujo Introducción. Estructuras condicionales. Estructuras de repetición. Programación - Tema

Más detalles

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs. Variables Una variable no es más que un nombre simbólico que identifica una dirección de memoria: Suma el contenido de la posición 3001 y la 3002 y lo almacenas en la posición 3003 vs. total = cantidad1

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

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Apunte Laboratorio ALPI - El lenguaje de programación Pascal Apunte Laboratorio ALPI - El lenguaje de programación Pascal 1 2 ÍNDICE GENERAL Índice 1. Estructura de un Programa en Pascal 3 2. Sintaxis de Pascal 4 2.1. Uso de mayúsculas.....................................

Más detalles

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples Desarrollo de aplicaciones en Java Generación de código fuente Compilación Ejecución Elementos de aplicaciones simples EII147-01-02 Introducción a las tecnologías de información Escuela de Ingeniería Industrial

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

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya ELEMENTOS BÁSICOS DE C++: DECLARACIÓN DE VARIABLES A través de operaciones aritméticas (suma, resta, etc.) y lógicas (por ejemplo, comparaciones) los programas manipulan datos tales como números y caracteres.

Más detalles

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Soluciones al Examen de Fundamentos de Computadores y Lenguajes Soluciones al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Junio 2005 1) Escribir una clase con un atributo privado que sea un array de

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

Procesamiento de Lenguajes (PL) Curso 2014/2015. Práctica 1: analizador descendente recursivo

Procesamiento de Lenguajes (PL) Curso 2014/2015. Práctica 1: analizador descendente recursivo Procesamiento de Lenguajes (PL) Curso 2014/2015 Práctica 1: analizador descendente recursivo Fecha y método de entrega La práctica debe realizarse de forma individual, como las demás prácticas de la asignatura,

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Tema 2: Análisis léxico

Tema 2: Análisis léxico Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 21 Fundamentos del análisis

Más detalles

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; } PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)

Más detalles

Fundamentos de Programación

Fundamentos de Programación Fundamentos de Programación COMENTARIOS Microsoft Visual Basic interpreta que todo lo que está a la derecha del carácter ( ) en una línea cualquiera de programa es un comentario y no ejecuta acción alguna.

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

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 1 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

Compiladores e Intérpretes

Compiladores e Intérpretes Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2018 1. Introducción Este documento

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

Datos Elementales y formato de un programa en Java

Datos Elementales y formato de un programa en Java Datos Elementales y formato de un programa en Java PROGRAMACION I Grado en Matematicas Informática Programación I - 2015/2016 Datos, variables y mi primer programa 1 Introducción a la programación o Programa:

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

JAVA 1. Introducción

JAVA 1. Introducción Diseño de Interfaces de Usuario JAVA. Introducción. Características Portabilidad Interpretado (bytecodes) Uso de Máquina Virtual Java (JVM) Orientado a Objetos Jerarquía de clases Extensible (packages)

Más detalles

Estructuras de control Agosto de Facultad de Ingeniería. Universidad del Valle

Estructuras de control Agosto de Facultad de Ingeniería. Universidad del Valle Estructuras de control carlos.andres.delgado@correounivalle.edu.co Facultad de Ingeniería. Universidad del Valle Agosto de 2016 Contenido 1 2 3 Definición Estas sentencias son asociados a dos posibles

Más detalles

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 5 En esta práctica estudiaremos los mecanismos que proporciona ANTLR para crear árboles de sintaxis abstracta. Estos aspectos (junto con la notación

Más detalles

Introducción general al Lenguaje C (2010/2011)

Introducción general al Lenguaje C (2010/2011) Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Introducción general al Lenguaje C (2010/2011) Universidad de Sevilla Índice

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

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

Tema: Análisis Sintáctico

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

Más detalles

Tema 2: Análisis léxico

Tema 2: Análisis léxico Tema 2: Análisis léxico Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 2: Análisis léxico 1 / 22 Fundamentos del análisis

Más detalles

PRÁCTICA. Apellidos, Nombre: Calificación:

PRÁCTICA. Apellidos, Nombre: Calificación: Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de 2004 3 er Curso de I.T. Informática de Sistemas. Apellidos, Nombre: Calificación: PRÁCTICA El lenguaje Protolen posee

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

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

Los parámetros: son los campos que se comunican a los métodos de los objetos.

Los parámetros: son los campos que se comunican a los métodos de los objetos. Modulo 6. Variables y Operadores Variables Un objeto almacena los estados en campos, estos campos se conocen en java como variables. Por eso a menudo podemos ver estas dos palabras usadas para referirse

Más detalles

Estructura de datos y Programación

Estructura de datos y Programación Estructura de datos y Programación Tema: Conceptos Básicos- Estructuras de control - Arreglos Ing. Analia Méndez Ing. Raquel Zarco Año: 2012 ELEMENTOS DE UN PROGRAMA EN JAVA El programa Java consta de

Más detalles

Curso Informática Lección 4. Instrucciones de control

Curso Informática Lección 4. Instrucciones de control Fundamentos de Informática Lección 4. Instrucciones de control Curso 2010-2011 Pedro Álvarez y José Ángel Bañares 24/09/2010. Dpto. Informática e Ingeniería de Sistemas. Índice de contenidos Introducción

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato INTRODUCCIÓN A LA PROGRAMACIÓN 1º Bachillerato Qué es un programa? Componente informático que se utiliza para realizar una determinada tarea. Se compone de algoritmos y estructuras de datos Algoritmos:

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

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

Solución al Examen de Fundamentos de Computadores y Lenguajes

Solución al Examen de Fundamentos de Computadores y Lenguajes Solución al Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Final. Septiembre 2006 1) Se dispone de la siguiente clase enumerada. Escribir un método,

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

Examen Teórico Convocatoria de Junio de 2012

Examen Teórico Convocatoria de Junio de 2012 Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica

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 DE LENGUAJES I PRÁCTICA DE LABORATORIO 3

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 3 PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 3 En esta práctica trabajaremos con ANTLR a nivel sintáctico. En las prácticas anteriores ya hemos visto los elementos básicos de la notación. En ésta,

Más detalles

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

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

Más detalles

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

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

Cuáles son los lenguajes que pueden utilizarse para programar Karel?

Cuáles son los lenguajes que pueden utilizarse para programar Karel? EXAMEN NIVEL OMI Cuáles son las ventanas del programa de karel? a) Mundo, Programa, Ejecutar y Ayuda. b) Nueva, Abrir, Guardar, Guardar como y compilar. c) Muros y zumbadores. d) Todos los anteriores.

Más detalles

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

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

Más detalles

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

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: Estructuras de Control

Programación: Estructuras de Control Programación: 2 Estructuras de Control Contenido 2.1.- Introducción 2.2.- Estructuras de Selección 2.2.1.- Sentencia if 2.2.2.- Sentencia switch 2.3.- Estructuras de Iteración 2.3.1.- Sentencia while 2.3.2.-

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

Resolución de Problemas y Algoritmos

Resolución de Problemas y Algoritmos RESOLUCIÓN DE PROBLEMAS Y ALGORITMOS CLASE 3 Definición y compatibilidad de tipos de datos. Sentencia condicional CASE. Luciano H. Tamargo http://cs.uns.edu.ar/~lt Depto. de Ciencias e Ingeniería de la

Más detalles

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Unidad V. Ya veremos qué poner en algunas_palabras y algo_más, por ahora sigamos un poco más. Implementación Orientada a Objetos. Unidad V 5.1 Estructura de una clase. Una clase consiste en: algunas_palabras class nombre_de_la_clase [algo_más] { [lista_de_atributos] [lista_de_métodos] Lo que está

Más detalles

COMPILADORES E INTERPRETES

COMPILADORES E INTERPRETES COMPILADORES E INTERPRETES Análisis semántico: Estudia el significado de la sentencia Procesadores de lenguaje: Convierte un programa fuente hecho en un lenguaje fuente a un programa objeto hecho en un

Más detalles

Examen de Fundamentos de Computadores y Lenguajes

Examen de Fundamentos de Computadores y Lenguajes Examen de Fundamentos de Computadores y Lenguajes Cuestiones (5 cuestiones, 5 puntos en total) Examen Parcial. Febrero 2003 1) Escribir un fragmento de programa Java que, utilizando la instrucción switch,

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

Tema: Análisis Semántico

Tema: Análisis Semántico Compiladores. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Tema: Análisis Semántico Contenido En esta guía se desarrollará una tabla de símbolos y se asociará al analizador

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

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL Cualquier duda sobre el contenido de este tema se puede enviar al foro TEORIA2. 2.1.- El tipo de datos entero (byte,

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

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009 Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy Febrero 2009 Índice Elementos básicos Ejecución de un programa Estructuras de control Ciclos Ejercicios 2 Elementos Básicos

Más detalles

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre Escuela Politécnica Superior de Córdoba Universidad de Córdoba Curso académico: 2016-2017

Más detalles

Capítulo 3. Introducción a la programación. Continuar

Capítulo 3. Introducción a la programación. Continuar Capítulo 3 Introducción a la programación Continuar Introducción Java es un lenguaje que tiene muchas ventajas frente a otros lenguajes de programación: es open source (código abierto), esto permite ver

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

Identidad, igualdad y equivalencia

Identidad, igualdad y equivalencia Identidad, igualdad y equivalencia Introducción a la Programación Orientada a objetos 2018 Clases como tipos Cuando el analista o el diseñador de un sistema orientado a objetos especifica una clase, establece

Más detalles