public object Ejecutar(Ambito ambito) { try { ClaveFuncion clave = new ClaveFuncion(this.clase.ToLower(), "vacio", this.parametros); if (!ambito.existeConstructor(clave)) { Constructor c = new Constructor(this.parametros, instrucciones, this.linea, this.columna, this.clase); ambito.agregarConstructor(clave, c); } else { TError error = new TError("Semantico", "Ya existe una definicion de Constructor: " + this.clase + " con la misma cantidad de parametros y tipo | Clase: " + this.clase + " | Archivo: " + ambito.archivo, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error en la ejecucion de Declaracion de Constructor: " + this.clase + " | Clase: " + this.clase + " | Archivo: " + ambito.archivo + " | Error: " + e.Message, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } return(null); }
public object Ejecutar(Ambito ambito) { /// YA QUE LO VOY A TRATAR COMO UN OBJETO: /// 1) DEBO DE COLOCARLE UN CONSTRUCTOR AL CUAL ME VA A SERVIR PARA PODER MANDARLE LOS PARAMETROS CUANDO ESTA SE LLAME /// 2) AL MOMENTO DE LLAMAR LA PREGUNTA DEBO DE MANDARLE LOS MISMOS PARAMETROS PARA INSTANCIAR LA PREGUNTA QUE EN TEORIA DEBERIAN SER LOS MISMOS /// 3) LA PREGUNTA LA VOY A GUARDAR COMO UN OBJETO DENTRO DEL AMBITO DE LA CLASE LA CUAL VA A GUARDAR COMO UNA VARIABLE QUE A GUARDAR COMO VALOR OBJETO DE TIPO /// PREGUNTA try { if (!ambito.existeVariable(this.identificador.ToLower())) { Ambito amPregunta = new Ambito(ambito, this.identificador.ToLower(), ambito.archivo); /*CREO EL CONSTRUCTOR DE LA PREGUNTA QUE ME VA A SERVIR PARA PODER DECLARAR EN EL AMBITO LAS VARIABLES*/ Constructor c = new Constructor(this.parametros, new List <Instruccion>(), linea, columna, clase); /*AGREGO EL CONSTRUCTOR DE LA PREGUNTA AL AMBITO*/ amPregunta.agregarConstructor(new ClaveFuncion(this.identificador.ToLower(), "vacio", parametros), c); /*VOY A A GREGAR UNA VARIABLE TEMPORAL PARA QUE ENTONCES PUEDA GUARDAR LAS INSTRUCCIONES :) */ Variable v = new Variable("instr", "vale", Estatico.Vibililidad.PRIVADO, this.declaraciones); /*LA AGREGO AL AMBITO DE ESTA PREGUNTA :)*/ amPregunta.agregarVariableAlAmbito("instr", v); /*CREO EL OBJETO DE TIPO PREGUNTA*/ Objeto pregunta = new Objeto("pregunta", amPregunta); /*AGREGO LA VARIABLE AL AMBITO ACTUAL PARA PODER ACCERDER A LA PREGUNTA EN UN LLAMADO A LA MISMA*/ Variable p = new Variable(this.identificador.ToLower(), "pregunta", Estatico.Vibililidad.PRIVADO, pregunta); /*AGREGO LA VARIABLE EN EL AMBITO Y TERMINA*/ ambito.agregarVariableAlAmbito(this.identificador.ToLower(), p); return(new Nulo()); } else { TError error = new TError("Semantico", "Ya existe una definicion de un simbolo: \"" + identificador + "\", las preguntas se tratan como objetos por lo que no pueden haber multiples definiciones de un objeto con el mismo nombre | Clase" + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } catch (Exception e) { TError erro = new TError("Ejecucion", "Error al intentar ejecutar la declaracion de una pregunta | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, columna, false); Estatico.errores.Add(erro); Estatico.ColocaError(erro); } return(new Nulo()); }
public object Ejecutar(Ambito ambito) { try { Simbolo s = (Simbolo)ambito.getSimbolo(this.identificador.ToLower()); if (s != null) { if (s is Variable) { Variable v = (Variable)s; Object valor = v.valor; if (valor is Objeto) { Objeto ob = (Objeto)valor; List <Object> valores = getValoresParams(ambito); if (ob.idClase.ToLower().Equals("pregunta")) { Ambito ambitoPregunta = ob.ambito; // obtengo el ambito de la pregunta /*obtendre el constructor de la pregunta para poder setear los parametros que hagan falta*/ ClaveFuncion clave = new ClaveFuncion(this.identificador.ToLower(), "vacio", getNodosParametros(ambito)); Constructor constructor = (Constructor)ambitoPregunta.getConstructor(clave); if (constructor != null) { Variable instruc = (Variable)ambitoPregunta.getSimbolo("instr"); List <Instruccion> declaraciones = (List <Instruccion>)instruc.valor;/*ya tengo las instrucciones que hacen la ejecucion de delcaraciones*/ if (existePropiedad("etiqueta", ambitoPregunta)) { /*EN CASO QUE LA PROPIEDAD YA EXISTA EN LA PREGUNTA: RESETEO EL AMBITO*/ ambitoPregunta = new Ambito(ambitoPregunta.Anterior, ambitoPregunta.idAmbito, ambitoPregunta.archivo); ambitoPregunta.agregarConstructor(clave, constructor); ambitoPregunta.agregarVariableAlAmbito("instr", instruc); } /*aqui ya setee los parametros que venian en la pregunta en el ambito global ahora voy a ejecutar las declaraciones sobre este ambito*/ ambitoPregunta = constructor.seteaParametrosLocales(ambitoPregunta, valores); ejecutaLasDeclaracionesPregunta(ambitoPregunta, declaraciones); /*carga todo lo de la pregunta*/ Pregunta p = new Pregunta(ambitoPregunta, this.identificador.ToLower(), this.numero); // formo la pregunta Nota n = new Nota(p); n.ShowDialog(); if (llamaMostar) { Ambito aux = ambitoPregunta.Anterior; ambitoPregunta.Anterior = null; LLamadaFuncion l = new LLamadaFuncion(clase, linea, columna, new Llamada("mostrar", linea, columna, clase)); l.Ejecutar(ambitoPregunta); ambitoPregunta.Anterior = aux; } ob.ambito = ambitoPregunta; /*ASIGNO EL NUEVO AMBITO A OB*/ if (n.salir != null) { return(n.salir); } } else { TError error = new TError("Semantico", "Para el simbolo: \"" + identificador + "\" No existe una pregunta de tipo Nota que rebiba los parametros especificados | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + identificador + "\" No es un objeto de tipo Pregunta, por lo que no es aplicable la instrucccion | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + identificador + "\" No es un objeto de tipo Nota, por lo que no es aplicable la instrucccion | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + identificador + "\" No es un objeto de tipo Nota, por lo que no es aplicable la instrucccion | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "La referencia a la pregunta de tipo Nota: \"" + identificador + "\" es Nulo, no existe en este ambito | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error al ejecutar la Instrccion Nota() | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } return(new Nulo()); }
public object Ejecutar(Ambito ambito) { try { Simbolo s = (Simbolo)ambito.getSimbolo(this.identificador.ToLower()); if (s != null) { if (s is Variable) { Variable v = (Variable)s; Object valor = v.valor; if (valor is Objeto) { Objeto ob = (Objeto)valor; List <Object> valores = getValoresParams(ambito); if (ob.idClase.ToLower().Equals("pregunta")) { Ambito ambitoPregunta = ob.ambito; /*oteniendo el ambito de la pregunta*/ /*obtendre el constructor de la pregunta para poder setear los parametros que hagan falta*/ ClaveFuncion clave = new ClaveFuncion(this.identificador.ToLower(), "vacio", getNodosParametros(ambito)); Constructor constructor = (Constructor)ambitoPregunta.getConstructor(clave); if (constructor != null) { Variable instruc = (Variable)ambitoPregunta.getSimbolo("instr"); List <Instruccion> declaraciones = (List <Instruccion>)instruc.valor;/*ya tengo las instrucciones que hacen la ejecucion de delcaraciones*/ if (existePropiedad("etiqueta", ambitoPregunta)) { /*EN CASO QUE LA PROPIEDAD YA EXISTA EN LA PREGUNTA: RESETEO EL AMBITO*/ ambitoPregunta = new Ambito(ambitoPregunta.Anterior, ambitoPregunta.idAmbito, ambitoPregunta.archivo); ambitoPregunta.agregarConstructor(clave, constructor); ambitoPregunta.agregarVariableAlAmbito("instr", instruc); } ambitoPregunta = constructor.seteaParametrosLocales(ambitoPregunta, valores); ejecutaLasDeclaracionesPregunta(ambitoPregunta, declaraciones); /*carga todo lo de la pregunta*/ Pregunta p = new Pregunta(ambitoPregunta, this.identificador.ToLower(), this.numero); // formo la pregunta if (this.extensiones != null) { /*AQUI CUANDO ADMITEN SOLO CIERTAS EXTENSIONES*/ Object ext = this.extensiones.getValor(ambito); if (ext is String) { this.numero = Estatico.numPregunta; Estatico.numPregunta++; Fichero f = new Fichero(p, (String)ext, linea, columna, clase, ambito.archivo); f.ShowDialog(); String resp = f.rutaArchivo; if (resp.Equals("")) { resp = "No se subio ningun Archivo!"; } PreguntaAlmacenada pr = new PreguntaAlmacenada(p.idPregunta, p.etiqueta, this.numero); pr.addAnswer(" Archivo Almacenado en: " + resp); Estatico.resps.Add(pr); ob.ambito = ambitoPregunta;/*ASIGNO EL NUEVO AMBITO A OB*/ if (f.salir != null) { return(f.salir); } } else { TError error = new TError("Semantico", "Para el simbolo: \"" + identificador + "\", Se espera una cadena especificando el formato de las Extensiones de Archivos | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { /*AQUI CUANDO ADMITEN CUALQUIER EXTENSION*/ this.numero = Estatico.numPregunta; Estatico.numPregunta++; Fichero f = new Fichero(p, "", linea, columna, clase, ambito.archivo); f.ShowDialog(); String resp = f.rutaArchivo; if (resp.Equals("")) { resp = "No se subio ningun Archivo!"; } PreguntaAlmacenada pr = new PreguntaAlmacenada(p.idPregunta, p.etiqueta, this.numero); pr.addAnswer(" Archivo Almacenado en: " + resp); Estatico.resps.Add(pr); ob.ambito = ambitoPregunta;/*ASIGNO EL NUEVO AMBITO A OB*/ if (f.salir != null) { return(f.salir); } } } else { TError error = new TError("Semantico", "Para el simbolo: \"" + identificador + "\" No existe una pregunta de tipo Fichero que rebiba los parametros especificados | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + this.identificador + "\" no es de tipo Pregunta | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + this.identificador + "\" no es de tipo Pregunta | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "El simbolo: \"" + this.identificador + "\" no es de tipo Pregunta | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "No existe la pregunta de tipo Fichero: \"" + this.identificador + "\" | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error al ejecutar el guardar un Fichero | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, columna, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } return(new Nulo()); }
public Pregunta getPregunta(Ambito ambito) { try { Simbolo s = (Simbolo)ambito.getSimbolo(this.identificador.ToLower()); if (s != null) { if (s is Variable) { Variable v = (Variable)s; Object valor = v.valor; if (valor is Objeto) { Objeto ob = (Objeto)valor; List <Object> valores = getValoresParams(ambito); this.ob = ob; if (ob.idClase.ToLower().Equals("pregunta")) { Ambito ambitoPregunta = ob.ambito; /*oteniendo el ambito de la pregunta*/ ClaveFuncion clave = new ClaveFuncion(this.identificador.ToLower(), "vacio", getNodosParametros(ambito)); Constructor constructor = (Constructor)ambitoPregunta.getConstructor(clave); if (constructor != null) { Variable instruc = (Variable)ambitoPregunta.getSimbolo("instr"); List <Instruccion> declaraciones = (List <Instruccion>)instruc.valor;/*ya tengo las instrucciones que hacen la ejecucion de delcaraciones*/ if (existePropiedad("etiqueta", ambitoPregunta)) { /*EN CASO QUE LA PROPIEDAD YA EXISTA EN LA PREGUNTA: RESETEO EL AMBITO*/ ambitoPregunta = new Ambito(ambitoPregunta.Anterior, ambitoPregunta.idAmbito, ambitoPregunta.archivo); ambitoPregunta.agregarConstructor(clave, constructor); ambitoPregunta.agregarVariableAlAmbito("instr", instruc); } ambitoPregunta = constructor.seteaParametrosLocales(ambitoPregunta, valores); ejecutaLasDeclaracionesPregunta(ambitoPregunta, declaraciones); /*carga todo lo de la pregunta*/ Pregunta p = new Pregunta(ambitoPregunta, this.identificador.ToLower(), this.numero); // formo la pregunta this.ambPregu = ambitoPregunta; return(p); } else { TError error = new TError("Semantico", "Para el simbolo: \"" + identificador + "\" No existe una pregunta de tipo " + this.tipoPregunta + " que rebiba los parametros especificados | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, col, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } } else { TError error = new TError("Semantico", "Error Al Mostrar Pregunta: \"" + this.identificador + "\" ya que El simbolo no es de Tipo " + this.tipoPregunta + " | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, col, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } else { TError error = new TError("Semantico", "Error Al Mostrar Pregunta: \"" + this.identificador + "\" ya que El simbolo no es de Tipo " + this.tipoPregunta + " | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, col, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } else { TError error = new TError("Semantico", "Error Al Mostrar Pregunta: \"" + this.identificador + "\" ya que El simbolo no es de Tipo " + this.tipoPregunta + " | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, col, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } else { TError error = new TError("Semantico", "Error Al Mostrar Pregunta: \"" + this.identificador + "\" ya que este Simbolo no Existe en este Contexto | Clase: " + clase + " | Archivo: " + ambito.archivo, linea, col, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error al ejecutar Pregunta: " + this.identificador + " | Clase: " + clase + " | Archivo: " + ambito.archivo + " | Mensaje: " + e.Message, linea, col, false); Estatico.ColocaError(error); Estatico.errores.Add(error); } return(null); }