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()))); } }
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()); }