private void ValidarVariavel() { var i = 0; while (new List <string>() { nameof(MaisVar), nameof(Variaveis) }.Contains(CallStack.ElementAt(i))) { i++; } var callerName = CallStack.ElementAt(i); if (callerName == nameof(DcV) || callerName == nameof(ListaPar)) { TabelaDeSimbolos.TryAddNewItem(new ItemTs { Cadeia = Tokens[IndexAtual].Cadeia, Escopo = EscopoStack.Peek(), Tipo = TipoItemTs.Desconhecido, Linha = Tokens[IndexAtual].Linha }); GeradorCodigoHipo.AreaDeCodigo.Add(InstrucoesMaquinaHipo.ALME + " 1"); } else { TabelaDeSimbolos.VerificarSeVariavelJaFoiDeclarada(new ItemTs { Cadeia = Tokens[IndexAtual].Cadeia, Escopo = EscopoStack.Peek(), Tipo = TipoItemTs.Desconhecido }); } }
private void DcP() { CallStack.Push(nameof(DcP)); if (Tokens[IndexAtual].Tipo == TipoToken.ReservadoProcedure) { IndexAtual++; if (Tokens[IndexAtual].Tipo == TipoToken.Identificador) { var procedure = new ItemTs { Cadeia = Tokens[IndexAtual].Cadeia, Escopo = EscopoStack.Peek(), Tipo = TipoItemTs.Procedimento, Linha = Tokens[IndexAtual].Linha, Parametros = new List <Parametro>() }; EscopoStack.Push(Tokens[IndexAtual].Cadeia); IndexAtual++; Parametros(); AddParametrosNaProcedure(procedure); TabelaDeSimbolos.TryAddNewItem(procedure); CorpoP(); EscopoStack.Pop(); } else { ThrowCompiladorException(Tokens[IndexAtual]); } } else { ThrowCompiladorException(Tokens[IndexAtual]); } CallStack.Pop(); }