} //TIPO DE EL SIMBOLO public Simbolo(String idSimbolo, Boolean esVector, Estatico.Vibililidad visibilidad, String Tipo) //CONSTRUCTOR { this.idSimbolo = idSimbolo; this.esVector = esVector; this.Visibilidad = visibilidad; this.Tipo = Tipo; }
public Funcion(List <Object> instrucciones, List <NodoParametro> parametros, String idFuncion, String Tipo, Estatico.Vibililidad Visibilidad, int linea, int col, String clase) : base(linea, col, clase) { this.idFuncion = idFuncion; this.Tipo = Tipo; this.Vibililidad = Visibilidad; this.parametros = parametros; this.instrucciones = instrucciones; }
public DeclaracionVar(String idvar, String tipo, Estatico.Vibililidad visibilidad, int linea, int columna, String clase) : base(linea, columna, clase) { this.expresion = null; this.tipo = tipo; this.visibilidad = visibilidad; this.idVar = idvar; this.asignaValor = false; }
/*CONSRUCTOR DE UNA DECLARACION DE UNA VARIABLE*/ public DeclaracionVar(Expresion expresio, String idvar, String tipo, Estatico.Vibililidad visibilidad, int linea, int col, String clase) : base(linea, col, clase) { this.expresion = expresio; this.idVar = idvar; this.tipo = tipo; this.visibilidad = visibilidad; this.asignaValor = true; }
public DeclaracionArreglo(String tipo, Estatico.Vibililidad visibilidad, String id, int NumDim, int linea, int col, String clase) : base(linea, col, clase) { this.typeDefinition = 0; this.tipo = tipo; this.visibilidad = visibilidad; this.idArr = id; this.NumDim = NumDim; }
public DeclaracionFuncion(List <object> instrucciones, String tipo, List <NodoParametro> parametros, Estatico.Vibililidad vibililidad, String idfuncion, int linea, int col, String clase) : base(linea, col, clase) { this.instrucciones = instrucciones; this.parametros = parametros; this.tipo = tipo; this.idfuncion = idfuncion; this.visibilidad = vibililidad; }
/* * Segundo Constructor que define una clase que si hereda de otra * */ public ClasePreAnalizada(String id, Estatico.Vibililidad vibililidad, ParseTreeNode cuerpo, String padre, String origen) { this.id = id.ToLower(); this.vibililidad = vibililidad; this.cuerpoClase = cuerpo; this.padre = padre.ToLower(); this.Hereda = true; this.archivoOringen = origen; }
/* * Primer constructor de una clase que no hereda */ public ClasePreAnalizada(String id, Estatico.Vibililidad vibililidad, ParseTreeNode cuerpo, String origen) { this.id = id.ToLower();//LO DEJO EN MINUSCULAS PARA EVITARME CLAVOS this.vibililidad = vibililidad; this.cuerpoClase = cuerpo; this.Hereda = false; this.padre = ""; this.archivoOringen = origen; }
// CLASES private Object recorreClases(ParseTreeNode raiz)//DEBE RETORNAR UNA CLASE { String etiqueta = raiz.ToString(); switch (etiqueta) { case "CLASE": //DEBO DE RETORNAR EL OBJETO CLASE, EL CUERPO DE LA CLASE ME VA A RETORNAR LA LISTA DE ATRIBUTOS QUE TIENE { if (raiz.ChildNodes.Count == 6) //SI EXACTAMENTE TIENE 6 HIJOS { String idclase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower(); Estatico.Vibililidad visi = (Estatico.Vibililidad)obtenerVisibilidad(raiz.ChildNodes.ElementAt(2)); String padre = raiz.ChildNodes.ElementAt(4).Token.Text; ClasePreAnalizada clase = new ClasePreAnalizada(idclase, visi, raiz.ChildNodes.ElementAt(5), padre, this.archivo); clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line; clase.col = raiz.ChildNodes.ElementAt(0).Token.Location.Column; return(clase); } if (raiz.ChildNodes.Count == 5) //SI EXACTAMENTE TIENE 5 HIJOS { String idClase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower(); String padre = raiz.ChildNodes.ElementAt(3).Token.Text; ClasePreAnalizada clase = new ClasePreAnalizada(idClase, Estatico.Vibililidad.PUBLICO, raiz.ChildNodes.ElementAt(4), padre, this.archivo); clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line; clase.col = raiz.ChildNodes.ElementAt(0).Token.Location.Column; return(clase); } if (raiz.ChildNodes.Count == 4) //SI EXACTAMENTE TIENE 4 HIJOS { String idclase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower(); Estatico.Vibililidad visi = (Estatico.Vibililidad)obtenerVisibilidad(raiz.ChildNodes.ElementAt(2)); ClasePreAnalizada clase = new ClasePreAnalizada(idclase, visi, raiz.ChildNodes.ElementAt(3), this.archivo); clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line; clase.col = raiz.ChildNodes.ElementAt(0).Token.Location.Column; return(clase); } if (raiz.ChildNodes.Count == 3) //SI EXACTAMENTE TIENE 3 HIJOS { /*SI NO TIENE VISIBILIDAD LA CLASE SERA PRIVADA*/ String idclase = raiz.ChildNodes.ElementAt(1).Token.Text.ToLower(); ClasePreAnalizada clase = new ClasePreAnalizada(idclase, Estatico.Vibililidad.PUBLICO, raiz.ChildNodes.ElementAt(2), this.archivo); clase.linea = raiz.ChildNodes.ElementAt(0).Token.Location.Line; clase.col = raiz.ChildNodes.ElementAt(0).Token.Location.Column; return(clase); } break; } } return(null); }
} //VALOR QUE TIENE LA VARIABLE public Variable(String idVariable, String Tipo, Estatico.Vibililidad Visibilidad, Object Valor) : base(idVariable, false, Visibilidad, Tipo) { this.valor = Valor; }
public void setVisibilidad(Estatico.Vibililidad visibilidad) { this.Visibilidad = visibilidad; }
public Arreglo(List <Object> linealizacion, List <int> dimensiones, int dimen, String idSimbolo, bool esVector, Estatico.Vibililidad visibilidad, String tipo) : base(idSimbolo, esVector, visibilidad, tipo) { this.arbolArreglo = null; this.linealizacion = linealizacion; this.dimensiones = dimensiones; this.numDimensiones = dimen; tienaArbol = false; }
public object getValor(Ambito ambito) { try { List <Object> valores = getValoresParam(ambito); /// GENERO MI CLAVE PARA PODER OBTENER LA FUNCION QUE DESEO Clave clave = new Clave(this.id.ToLower(), getNodoParametros(ambito), ""); /// LLAMO A LA FUNCION QUE DESEO EJECUTAR Ambito aux = AmbitoDeClase(ambito); Funcion f = aux.GetFuncion(clave); if (f != null) { this.vibililidad = f.Vibililidad; ///CREO EL AMBITO DE LA FUNCION Ambito auxliar = new Ambito(aux, this.clase.ToLower(), ambito.archivo); this.vibililidad = f.Vibililidad; if (this.vibililidad == Estatico.Vibililidad.PROTEGIDO && !(ambito.idAmbito.ToLower().Contains(Estatico.temporal.idAmbito.ToLower()))) { return(new Nulo()); } ///SETEO LOS PARAMETROS QUE RECIBE auxliar = f.seteaParametrosLocales(auxliar, valores); ///OBTENGO EL VALOR QUE DEFINE Object valor = f.Ejecutar(auxliar); if (valor is NodoReturn) { Object valorReal = ((NodoReturn)valor).valor; String tipoEsperado = f.Tipo.ToLower(); if (tipoEsperado.Equals(((NodoReturn)valor).tipo.ToLower()) || ((NodoReturn)valor).tipo.ToLower().Equals("nulo")) { this.ValorAux = valorReal; return(valorReal); } else { TError error = new TError("Semantico", "El tipo de retorno no coincide: Tipo de Funcion: \"" + tipoEsperado + "\", encontrado: \"" + ((NodoReturn)valor).tipo.ToLower() + "\" | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); return(new Nulo()); } } } else if (this.id.ToLower().Equals("buscar")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz");/// :) if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; if (valores.Count == 2) { if (valores.ElementAt(1) is int) { Object index1 = valores.ElementAt(0); int index2 = (int)valores.ElementAt(1); Object val = listado.obtenerDeLista(index1, index2); NodoReturn n = creaNodoReturn(val); this.ValorAux = n.valor; return(n.valor); } } } } else if (this.id.ToLower().Equals("obtener")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz"); if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; if (valores.ElementAt(0) is int && valores.ElementAt(1) is int) { int index1 = (int)valores.ElementAt(0); int index2 = (int)valores.ElementAt(1); Object val = listado.obtenerDeLista(index1, index2); NodoReturn n = creaNodoReturn(val); this.ValorAux = n.valor; return(n.valor); } } } else if (this.id.ToLower().Equals("insertar")) { Simbolo l = (Simbolo)ambito.getSimbolo("cutz"); if (l != null) { Variable v = (Variable)l; Opciones listado = (Opciones)v.valor; listado.agregarElementos(valores);/// INSERTA ELEMENTOS VACIOS return(new Vacio()); } } else { TError error = new TError("Semantico", "No existe funcion: " + this.id + " que reciba parametro: " + getMensajeError(ambito) + " | Clase: " + this.clase + " | " + ambito.archivo, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } } catch (Exception e) { TError error = new TError("Ejecucion", "Error al Buscar la funcion, en ejecucion | Erro: " + e.Message, this.linea, this.columna, false); Estatico.errores.Add(error); Estatico.ColocaError(error); } return(new Nulo()); }