Esempio n. 1
0
 internal List <NodoTablaSimbolos> ObtenerVariablesDeclaradasEnProcedimiento(Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoContexto cont, string nombreProc)
 {
     if (cont == NodoTablaSimbolos.TipoContexto.Global)
     {
         return(this.listaNodos.FindAll(x => x.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable &&
                                        x.Contexto == NodoTablaSimbolos.TipoContexto.Global));
     }
     else
     {
         return(this.listaNodos.FindAll(x => x.TipoEntrada == NodoTablaSimbolos.TipoDeEntrada.Variable &&
                                        x.Contexto == NodoTablaSimbolos.TipoContexto.Local &&
                                        x.NombreContextoLocal.ToUpper().Equals(nombreProc.ToUpper())));
     }
 }
Esempio n. 2
0
        private static string InicializarVariables(Semantico.TablaDeSimbolos.TablaSimbolos tablaSimbolos, Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoContexto cont, string nombreProc)
        {
            StringBuilder strBldr = new StringBuilder();

            List <CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos> listaVars = tablaSimbolos.ObtenerVariablesDeclaradasEnProcedimiento(cont, nombreProc);

            foreach (CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos item in listaVars)
            {
                switch (item.TipoDato)
                {
                case CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoDeDato.Texto:
                    if (item.EsArreglo)
                    {
                        for (double i = 1; i <= item.Valor; i++)
                        {
                            strBldr.AppendLine(string.Format("{0}[{1}] := '';", item.NombreParaCodigo, i));
                        }
                    }
                    else
                    {
                        if (!item.EsConstante)
                        {
                            strBldr.AppendLine(string.Format("{0} := '';", item.NombreParaCodigo));
                        }
                    }
                    break;

                case CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoDeDato.Numero:
                    if (item.EsArreglo)
                    {
                        for (double i = 1; i <= item.Valor; i++)
                        {
                            strBldr.AppendLine(string.Format("{0}[{1}] := 0;", item.NombreParaCodigo, i));
                        }
                    }
                    else
                    {
                        if (!item.EsConstante)
                        {
                            strBldr.AppendLine(string.Format("{0} := 0;", item.NombreParaCodigo));
                        }
                    }
                    break;

                case CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoDeDato.Booleano:
                    if (item.EsArreglo)
                    {
                        for (double i = 1; i <= item.Valor; i++)
                        {
                            strBldr.AppendLine(string.Format("{0}[{1}] := true;", item.NombreParaCodigo, i));
                        }
                    }
                    else
                    {
                        if (!item.EsConstante)
                        {
                            strBldr.AppendLine(string.Format("{0} := true;", item.NombreParaCodigo));
                        }
                    }
                    break;

                case CompiladorGargar.Semantico.TablaDeSimbolos.NodoTablaSimbolos.TipoDeDato.Ninguno:
                    break;

                default:
                    break;
                }
            }

            return(strBldr.ToString());
        }