public Estado InsertarNodoVariable(NodoVariables nodo, NodoClase nodoClaseActiva, string nombreMetodoActivo) { if (nodoClaseActiva.TSM.ContainsKey(nombreMetodoActivo)) { var metodos = nodoClaseActiva.TSM; NodoMetodo nodoMetodo = new NodoMetodo(); foreach (var metodo in metodos) { if (metodo.Key.ToString() == nombreMetodoActivo) { nodoMetodo = metodo.Value; } } if (!nodoMetodo.TSV.ContainsKey(nodo.Lexema)) { if (nodoClaseActiva.TSA.ContainsKey(nodo.Lexema)) { return(Estado.DuplicadoVariableConAtributo); } else { nodoMetodo.TSV.Add(nodo.Lexema, nodo); return(Estado.Insertado); } } else { //se manda el error para el atributo duplicado return(Estado.Duplicado); } } else { //error de atributo duplicado con clase return(Estado.DuplicadoAtributoConClase); } }
public Arboles SentenciaAsignacion() { var sentenciaAsignacion = NuevoNodoSentencia(TipoSentencia.Asignacion); if (miListaTokenTemporal[puntero + 1].lexema == "++" || miListaTokenTemporal[puntero + 1].lexema == "--") { sentenciaAsignacion.lexema = miListaTokenTemporal[puntero].lexema; sentenciaAsignacion.codigoP = "lda " + miListaTokenTemporal[puntero].lexema; sentenciaAsignacion.codigoP2 = "sto"; Arboles i = NuevoNodoExpresion(TipoExpresion.Identificador); i.soyValorTipo = TipoValorNodo.Objeto; i.lexema = miListaTokenTemporal[puntero].lexema; Arboles d = NuevoNodoExpresion(TipoExpresion.Constante); d.soyValorTipo = TipoValorNodo.Entero; d.lexema = "1"; Arboles op = NuevoNodoExpresion(TipoExpresion.Operador); if (miListaTokenTemporal[puntero + 1].lexema.Substring(0, 1) == "+") { op.lexema = "+"; op.soyOperacion = Operaciones.Suma; } else { op.lexema = "-"; op.soyOperacion = Operaciones.Resta; } op.HijoIzquierdo = i; op.HijoDerecho = d; sentenciaAsignacion.HijoIzquierdo = op; return(sentenciaAsignacion); } else { if (puntero != 0 && new[] { -103, -107, -120, -126, -160 }.Contains(miListaTokenTemporal[puntero - 1].estado)) { //insertar variable en tabla de simbolos NodoVariables miVariable = new NodoVariables(); miVariable.Lexema = miListaTokenTemporal[puntero].lexema; miVariable.MiTipo = TipoDato.Int; miVariable.TipoVariable = TipoVariable.Primitive; Estado estadoMetodo = ts.InsertarNodoVariable(miVariable, ts.ObtenerNodoClase(this.claseActiva), this.metodoActivo); if (estadoMetodo == Estado.Duplicado) { //MessageBox.Show("Variable duplicada:'" + miListaTokenTemporal[puntero].lexema + "'. ", "Error ", MessageBoxButtons.OK, MessageBoxIcon.Error); //Application.Exit(); } } sentenciaAsignacion.lexema = miListaTokenTemporal[puntero].lexema; sentenciaAsignacion.codigoP = "lda " + miListaTokenTemporal[puntero].lexema; sentenciaAsignacion.codigoP2 = "sto"; puntero += 2; if (miListaTokenTemporal[puntero].lexema == "cin") { sentenciaAsignacion.HijoIzquierdo = sentenciaAsignacion.SentenciaRead(sentenciaAsignacion.lexema); } else { sentenciaAsignacion.HijoIzquierdo = SimpleExpresion(); } return(sentenciaAsignacion); } }