示例#1
0
 private static void Op_un()
 {
     if (Lexico.NextTokenIs('+') || Lexico.NextTokenIs('-'))
     {
         CurrentToken = Lexico.NextToken();
     }
 }
示例#2
0
 private static void Pfalsa()
 {
     if (Lexico.NextTokenIs("else"))
     {
         Comandos();
     }
 }
示例#3
0
        private static void Lista_arg(Simbolo pEsq)
        {
            var parametros = TabelaDeSimbolos.BuscaParametros(pEsq);

            if (Lexico.NextTokenIs('('))
            {
                CurrentToken = Lexico.NextToken();
                Argumentos();
                if (parametros.Count() != FilaSimbolos.Count())
                {
                    pEsq.SetMsgErro(MsgErrosSemanticos.PARAMETROS_INCORRETOS, parametros.Count(), FilaSimbolos.Count());
                    Error(pEsq);
                }
                while (FilaSimbolos.Any())
                {
                    var sim   = FilaSimbolos.Dequeue();
                    var param = parametros.Dequeue();
                    if (sim.Tipo != param.Tipo)
                    {
                        pEsq.SetMsgErro(MsgErrosSemanticos.PARAMETRO_ERRADO, sim, param);
                        Error(pEsq);
                    }
                }
                CurrentTokenIs(')');
            }
            if (parametros.Count() != 0)
            {
                pEsq.SetMsgErro(MsgErrosSemanticos.PARAMETROS_INCORRETOS, parametros.Count(), 0);
                Error(pEsq);
            }
        }
示例#4
0
 private static void Mais_comandos()
 {
     if (Lexico.NextTokenIs(';'))
     {
         CurrentToken = Lexico.NextToken();
         Comandos();
     }
 }
示例#5
0
 private static void Mais_var()
 {
     if (Lexico.NextTokenIs(','))
     {
         CurrentToken = Lexico.NextToken();
         Variaveis();
     }
 }
示例#6
0
 private static void Mais_dc()
 {
     if (Lexico.NextTokenIs(';'))
     {
         CurrentToken = Lexico.NextToken();
         Dc();
     }
 }
示例#7
0
 private static void Mais_par()
 {
     if (Lexico.NextTokenIs(';'))
     {
         CurrentToken = Lexico.NextToken();
         Lista_par();
     }
 }
示例#8
0
 private static void Dc_loc()
 {
     if (Lexico.NextTokenIs("var"))
     {
         Dc_v();
         Mais_dcloc();
     }
 }
示例#9
0
 private static void Mais_ident()
 {
     if (Lexico.NextTokenIs(';'))
     {
         CurrentToken = Lexico.NextToken();
         Argumentos();
     }
 }
示例#10
0
 private static void Parametros()
 {
     if (Lexico.NextTokenIs('('))
     {
         CurrentToken = Lexico.NextToken();
         Categoria    = "param";
         Lista_par();
         CurrentTokenIs(')');
     }
 }
示例#11
0
 private static Simbolo Outros_termos(Simbolo pEsq)
 {
     if (Lexico.NextTokenIs('+') || Lexico.NextTokenIs('-'))
     {
         Op_ad();
         var tDir = Termo(pEsq);
         var oDir = Outros_termos(tDir);
         return(oDir);
     }
     return(pEsq);
 }
示例#12
0
 private static Simbolo Mais_fatores(Simbolo pEsq)
 {
     if (Lexico.NextTokenIs('*') || Lexico.NextTokenIs('/'))
     {
         Op_mul();
         var fDir = Fator(pEsq);
         var mDir = Mais_fatores(fDir);
         return(mDir);
     }
     return(pEsq);
 }
示例#13
0
 private static void RestoIdent(Simbolo pEsq)
 {
     if (Lexico.NextTokenIs(":="))
     {
         CurrentToken = Lexico.NextToken();
         Expressao(pEsq);
     }
     else
     {
         Lista_arg(pEsq);
     }
 }
示例#14
0
 private static void Dc()
 {
     Escopo = "";
     if (Lexico.NextTokenIs("var"))
     {
         Dc_v();
         Mais_dc();
     }
     else if (Lexico.NextTokenIs("procedure"))
     {
         Dc_p();
         Mais_dc();
     }
 }