예제 #1
0
        // 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);
        }
예제 #2
0
        //SE ENCARGA DEL RECORRIDO GENERAL DEL ARCHIVO
        //INICIO := IMPORTACIONES CLASES
        //       | CLASES
        private Object recorre(ParseTreeNode raiz)
        {
            String etiqueta = raiz.ToString();

            switch (etiqueta)
            {
            case "INICIO":
            {
                if (raiz.ChildNodes.Count == 1)
                {
                    recorre(raiz.ChildNodes.ElementAt(0));        //ME MUEVO LAS CLASES!
                    return(null);
                }
                if (raiz.ChildNodes.Count == 2)
                {
                    recorre(raiz.ChildNodes.ElementAt(1));        //ME MUEVO A LAS CLASES
                    recorre(raiz.ChildNodes.ElementAt(0));        //ME MUEVO A LAS IMPORTACIONES
                    return(null);
                }
                break;
            }

            case "IMPORTACIONES":
            {
                if (raiz.ChildNodes.Count > 0)
                {
                    foreach (ParseTreeNode n in raiz.ChildNodes)       //POR CADA HIJO VOY REALIZAR LA IMPORTACION DE OTROS ARCHIVOS
                    {
                        List <ClasePreAnalizada> aux = (List <ClasePreAnalizada>)recorreImportaciones(n);
                        if (aux != null)
                        {
                            foreach (ClasePreAnalizada c in aux)
                            {
                                //IMPORTANTO SOLO LAS CLASES PUBLICAS
                                if (c.vibililidad == Estatico.Vibililidad.PUBLICO)
                                {
                                    this.clases.Add(c);
                                }
                            }
                        }
                    }
                }
                break;
            }

            case "CLASES":
            {
                if (raiz.ChildNodes.Count > 0)
                {
                    foreach (ParseTreeNode n in raiz.ChildNodes)       //POR CADA HIJO VOY A REALIZAR EL ANALISIS DE SUS CLASES CON SU RESPECTIVA TS
                    {
                        ClasePreAnalizada c = (ClasePreAnalizada)recorreClases(n);
                        if (c != null)
                        {
                            if (c != null)
                            {
                                this.clases.Add(c);
                            }
                        }
                    }
                }
                break;
            }
            }
            return(null);
        }