Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }