public override object VisitVarnormal([NotNull] CminusParser.VarnormalContext context) { var ID = context.ID().GetText(); if (!Tabela.Declarado(ID, nivel)) { Console.WriteLine("Linha " + context.start.Line + ": Erro ao procurar a variável \'" + ID + "\'.\n\tVariável não declarada"); } VisitChildren(context); return(null); }
public override object VisitVarnormal([NotNull] CminusParser.VarnormalContext context) { //Console.WriteLine("VisitVarnormal"); //assembly.AppendLine("\nVisirvarnormal"); var variavel = context.ID().GetText(); string reg = registradores.NextDataReg(); string mem_reg = registradores.NextMemReg(); string var_reg = "[" + mem_reg + "]"; int indice_funcao = escopos.retornaIndiceVar(escopo_atual, variavel); int indice_global = escopos.retornaIndiceVar("0000", variavel); if (indice_global == -1) { //Console.WriteLine("visitou var " + variavel + " com indice " + indice_funcao); //Console.WriteLine("Visitando var " + variavel + "com indice funcao de " + indice_funcao); //assembly.AppendLine("//" + escopo_atual + indice_funcao + variavel); assembly.AppendLine("sub " + reg + ", r31" + ", " + indice_funcao); assembly.AppendLine("copy " + mem_reg + ", " + reg); registradores.FreeDataRegister(reg); //assembly.AppendLine(reg + " = rm - " + indice_funcao); } else { assembly.AppendLine("mov " + mem_reg + ", " + indice_global); //assembly.AppendLine(reg + " = " + indice_global); } if (escopos.ehVetor(escopo_atual, variavel) && !escopos.ehVetorParam(escopo_atual, variavel)) { return(reg); } else { return(var_reg); } }