Пример #1
0
        private Clase agregarInstruccionesClase(Clase claseModificar, ParseTreeNode instrucciones)
        {
            foreach (ParseTreeNode item in instrucciones.ChildNodes)
            {
                switch (item.Term.Name)
                {/*ELEMENTO.Rule = FUNCION
                  | ATRIBUTO
                  | CONSTRUCTOR
                  | FUNCION_SOBRE;
                  */
                case Constantes.funcion:
                {
                    Funcion nueva = getFuncion(item, claseModificar.getNombre());
                    claseModificar.addFuncion(nueva);

                    break;
                }

                case Constantes.atributo:
                {
                    List <Atributo> atributos = generarAtributos(item);
                    foreach (Atributo atr in atributos)
                    {
                        claseModificar.addAtributo(atr);
                    }

                    break;
                }

                case Constantes.constructor:
                {
                    Funcion constructor = getconstructor(item, claseModificar.getNombre());
                    if (constructor != null)
                    {
                        claseModificar.addFuncion(constructor);
                    }
                    else
                    {
                        ErrorA nuevo = new ErrorA("Semantico", "No se pudo generar el constructor", item.Token);
                        Form1.errores.addError(nuevo);
                    }

                    break;
                }

                case Constantes.funSobre:
                {
                    Funcion nueva = getFuncion(item.ChildNodes[0], claseModificar.getNombre());
                    nueva.setSobreescrita(true);
                    claseModificar.addFuncion(nueva);
                    break;
                }
                }
            }

            return(claseModificar);
        }
Пример #2
0
        private Clase agregarInstruccionesClase(Clase claseModificar, ParseTreeNode instrucciones)
        {
            foreach (ParseTreeNode item in instrucciones.ChildNodes)
            {
                switch (item.Term.Name)
                {
                case Constantes.funcion:
                {
                    Funcion nueva = getFuncion(item, claseModificar.getNombre());
                    claseModificar.addFuncion(nueva);
                    break;
                }

                case Constantes.funSobre:
                {
                    Funcion nueva = getFuncion(item.ChildNodes[0], claseModificar.getNombre());
                    nueva.setSobreescrita(true);
                    claseModificar.addFuncion(nueva);
                    break;
                }

                case Constantes.atributo:
                {
                    List <Atributo> atributos = generarAtributos(item);
                    foreach (Atributo atr in atributos)
                    {
                        claseModificar.addAtributo(atr);
                    }
                    break;
                }

                case Constantes.principal:
                {
                    if (!claseModificar.funciones.hayPrincipal())
                    {
                        Funcion principal = getPrincipal(item, claseModificar.getNombre());
                        claseModificar.addFuncion(principal);
                    }
                    else
                    {
                        ErrorA err = new ErrorA(Constantes.errorSemantico, item.FindToken().Location.Line, item.FindToken().Location.Position, item.FindToken().Location.Column, "Una clase unicamente puede poseer un metodo principal");
                        Form1.errores.addError(err);
                    }
                    break;
                }

                case Constantes.constructor:
                {
                    Funcion constructor = getConstructor(item, claseModificar.getNombre());
                    if (constructor != null)
                    {
                        claseModificar.addFuncion(constructor);
                    }
                    else
                    {
                        ErrorA nuevo = new ErrorA("Semantico", "No se pudo generar el constructor", item.Token);
                        Form1.errores.addError(nuevo);
                    }

                    break;
                }
                }
            }


            return(claseModificar);
        }