public Procedimiento guardarProcedimiento(ParseTreeNode nodo, bool sobrescribir) { // VISIBILIDAD TPROC id CMETODO // TPROC id CMETODO /*** CMETODO -> PARAMETROS SENTENCIAS ***/ Procedimiento nuevo; int vis = (int)Simbolo.Visibilidad.PUBLICO; int inicio = 0; if (nodo.ChildNodes.Count == 4) { vis = Simbolo.getVisibilidad(nodo.ChildNodes[inicio].ChildNodes[0].Token.Text); inicio++; } ParseTreeNode tproc = nodo.ChildNodes[inicio]; String id = nodo.ChildNodes[inicio + 1].Token.Text; ParseTreeNode cmetodo = nodo.ChildNodes[inicio + 2]; int tipo = Simbolo.getTipo(tproc.ChildNodes[0].Token.Text); List <Atributo> parametros = guardarParametros(cmetodo.ChildNodes[0]); nuevo = new Procedimiento(id, tipo, vis, parametros, cmetodo.ChildNodes[1], sobrescribir, nodo.ChildNodes[inicio + 1].Token.Location.Line, nodo.ChildNodes[inicio + 1].Token.Location.Column); if (tproc.ChildNodes[1].ChildNodes.Count > 0) { nuevo.agregarArreglo(tproc.ChildNodes[1]); } return(nuevo); }
public Procedimiento guardarProcedimiento(ParseTreeNode nodo) { /* * METODO -> sobreescribir VISIBILIDAD TPROC id LISTA_PARAMETROS BLOQUE | VISIBILIDAD TPROC id LISTA_PARAMETROS BLOQUE | sobreescribir TPROC id LISTA_PARAMETROS BLOQUE | TPROC id LISTA_PARAMETROS BLOQUE */ List <Atributo> parametros; if (nodo.ChildNodes.Count == 6) { // METODO -> sobreescribir VISIBILIDAD TPROC id LISTA_PARAMETROS BLOQUE parametros = guardarParametros(nodo.ChildNodes[4]); String id = nodo.ChildNodes[3].Token.Text; int vis = Simbolo.getVisibilidad(nodo.ChildNodes[1].ChildNodes[0].Token.Text); if (nodo.ChildNodes[2].ChildNodes.Count == 3) { int tipo = Simbolo.getTipo(nodo.ChildNodes[2].ChildNodes[1].Token.Text); Procedimiento proc = new Procedimiento(id, tipo, vis, parametros, nodo.ChildNodes[5].ChildNodes[0], true, nodo.ChildNodes[3].Token.Location.Line, nodo.ChildNodes[3].Token.Location.Column); if (tipo == (int)Simbolo.Tipo.CLASE) { proc.agregarClase(nodo.ChildNodes[2].ChildNodes[1].Token.Text); } if (nodo.ChildNodes[2].ChildNodes[2].ChildNodes.Count > 0) { proc.agregarArreglo(nodo.ChildNodes[2].ChildNodes[2]); } return(proc); } else { return(new Procedimiento(id, (int)Simbolo.Tipo.VACIO, vis, parametros, nodo.ChildNodes[5].ChildNodes[0], true, nodo.ChildNodes[3].Token.Location.Line, nodo.ChildNodes[3].Token.Location.Column)); } } else if (nodo.ChildNodes.Count == 5) { /* * METODO -> VISIBILIDAD TPROC id LISTA_PARAMETROS BLOQUE | sobreescribir TPROC id LISTA_PARAMETROS BLOQUE */ parametros = guardarParametros(nodo.ChildNodes[3]); String id = nodo.ChildNodes[2].Token.Text; if (nodo.ChildNodes[0].Term.Name.Equals("VISIBILIDAD")) { int vis = Simbolo.getVisibilidad(nodo.ChildNodes[0].ChildNodes[0].Token.Text); if (nodo.ChildNodes[2].ChildNodes.Count == 3) { int tipo = Simbolo.getTipo(nodo.ChildNodes[2].ChildNodes[1].Token.Text); Procedimiento proc = new Procedimiento(id, tipo, vis, parametros, nodo.ChildNodes[4].ChildNodes[0], false, nodo.ChildNodes[2].Token.Location.Line, nodo.ChildNodes[2].Token.Location.Column); if (tipo == (int)Simbolo.Tipo.CLASE) { proc.agregarClase(nodo.ChildNodes[2].ChildNodes[1].Token.Text); } if (nodo.ChildNodes[2].ChildNodes[2].ChildNodes.Count > 0) { proc.agregarArreglo(nodo.ChildNodes[2].ChildNodes[2]); } return(proc); } else { return(new Procedimiento(id, (int)Simbolo.Tipo.VACIO, vis, parametros, nodo.ChildNodes[4].ChildNodes[0], false, nodo.ChildNodes[2].Token.Location.Line, nodo.ChildNodes[2].Token.Location.Column)); } } else { if (nodo.ChildNodes[2].ChildNodes.Count == 3) { int tipo = Simbolo.getTipo(nodo.ChildNodes[2].ChildNodes[1].Token.Text); Procedimiento proc = new Procedimiento(id, tipo, parametros, nodo.ChildNodes[4].ChildNodes[0], true, nodo.ChildNodes[2].Token.Location.Line, nodo.ChildNodes[2].Token.Location.Column); if (tipo == (int)Simbolo.Tipo.CLASE) { proc.agregarClase(nodo.ChildNodes[2].ChildNodes[1].Token.Text); } if (nodo.ChildNodes[2].ChildNodes[2].ChildNodes.Count > 0) { proc.agregarArreglo(nodo.ChildNodes[2].ChildNodes[2]); } return(proc); } else { return(new Procedimiento(id, (int)Simbolo.Tipo.VACIO, parametros, nodo.ChildNodes[4].ChildNodes[0], true, nodo.ChildNodes[2].Token.Location.Line, nodo.ChildNodes[2].Token.Location.Column)); } } } else { // METODO -> TPROC id LISTA_PARAMETROS BLOQUE parametros = guardarParametros(nodo.ChildNodes[2]); String id = nodo.ChildNodes[1].Token.Text; if (nodo.ChildNodes[0].ChildNodes.Count == 3) { int tipo = Simbolo.getTipo(nodo.ChildNodes[0].ChildNodes[1].Token.Text); Procedimiento proc = new Procedimiento(id, tipo, parametros, nodo.ChildNodes[3].ChildNodes[0], false, nodo.ChildNodes[1].Token.Location.Line, nodo.ChildNodes[1].Token.Location.Column); if (tipo == (int)Simbolo.Tipo.CLASE) { proc.agregarClase(nodo.ChildNodes[0].ChildNodes[1].Token.Text); } if (nodo.ChildNodes[0].ChildNodes[2].ChildNodes.Count > 0) { proc.agregarArreglo(nodo.ChildNodes[2].ChildNodes[2]); } return(proc); } else { return(new Procedimiento(id, (int)Simbolo.Tipo.VACIO, parametros, nodo.ChildNodes[3].ChildNodes[0], false, nodo.ChildNodes[1].Token.Location.Line, nodo.ChildNodes[1].Token.Location.Column)); } } }