PROCESADORES DEL LENGUAJES Septiembre 2017
|
|
- Inmaculada Suárez Naranjo
- hace 6 años
- Vistas:
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 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 detallesPROCESADORES 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 detallesPROCESADORES 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 detallesDepartamento 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 detallesTEMA 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 detallesTEMA 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 detallesProcesadores 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 detallesLABORATORIO 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 detallesUnidad 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 detallesTEMA 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 detallesVARIABLES 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 detallesEstructura 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 detallesINTERPRETACIÓ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 detallesANÁ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 detallesTEMA 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 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 detallesPROCESADORES 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 detallesPROCESADORES 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 detallesJava. 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 detallesPROCESADORES 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 detallesANÁ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 detallesConstrucciones 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 detallesVARIABLES, 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 detallesCentro 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 detallesPRÁ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 detallesTEMA 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 detallesJavaScript 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 detallesEstructuras 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 detallesBloque 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 detallesCarlos 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 detallesIntroducció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 detallesTema 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 detallesVariables. 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 detallesProgramació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 detallesApunte 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 detallesabril 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 detallesTodo 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 detallesInstituto 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 detallesSoluciones 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 detallesUnidad 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 detallesProcesamiento 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 detallesElementos 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 detallesTema 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 detallesPROGRAMACIÓ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 detallesFundamentos 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 detallesTema 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 detallesPROCESADORES 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 detallesCompiladores 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 detallesUn 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 detallesDatos 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 detallesProgramació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 detallesJAVA 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 detallesEstructuras 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 detallesPROCESADORES 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 detallesIntroducció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 detallesAlgoritmo, 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 detallesPROGRAMACIÓ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 detallesTema: 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 detallesTema 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 detallesPRÁ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 detallesComponentes 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 detallesQué 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 detallesLos 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 detallesEstructura 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 detallesCurso 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 detallesINTRODUCCIÓ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 detallesLABORATORIO 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 detallesRepaso 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 detallesSolució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 detallesCentro 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 detallesExamen 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 detallesComprender 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 detallesPROCESADORES 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 detallesDiseñ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 detallesTema 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 detallesTema 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 detallesCuá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 detallesProgramació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 detallesIntroducció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 detallesCentro 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 detallesProgramació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 detallesElementos 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 detallesResolució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 detallesUnidad 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 detallesCOMPILADORES 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 detallesExamen 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 detallesLenguaje 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 detallesTema: 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 detallesCompiladores 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 detallesTema 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 detallesIntroducció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 detallesIntroducció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 detallesProcesadores 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 detallesCapí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 detallesCurso 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 detallesIdentidad, 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