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); } MaqHip.C.Add("PARAM " + sim.EnderecoRelativo); } CurrentTokenIs(')'); } if (parametros.Count() != 0) { pEsq.SetMsgErro(MsgErrosSemanticos.PARAMETROS_INCORRETOS, parametros.Count(), 0); Error(pEsq); } }
private static void Mais_comandos() { if (Lexico.NextTokenIs(';')) { CurrentToken = Lexico.NextToken(); Comandos(); } }
private static void Mais_var(bool novo = true) { if (Lexico.NextTokenIs(',')) { CurrentToken = Lexico.NextToken(); Variaveis(novo); } }
private static void Mais_dc() { if (Lexico.NextTokenIs(';')) { CurrentToken = Lexico.NextToken(); Dc(); } }
private static void Mais_par() { if (Lexico.NextTokenIs(';')) { CurrentToken = Lexico.NextToken(); Lista_par(); } }
private static void Dc_loc() { if (Lexico.NextTokenIs("var")) { Dc_v(); Mais_dcloc(); } }
private static void Pfalsa() { if (Lexico.NextTokenIs("else")) { CurrentToken = Lexico.NextToken(); Comandos(); } }
private static void Mais_ident() { if (Lexico.NextTokenIs(';')) { CurrentToken = Lexico.NextToken(); Argumentos(); } }
private static char?Op_un() { if (Lexico.NextTokenIs('+') || Lexico.NextTokenIs('-')) { CurrentToken = Lexico.NextToken(); return((char)CurrentToken.Lexema); } return(null); }
private static void Parametros() { if (Lexico.NextTokenIs('(')) { CurrentToken = Lexico.NextToken(); Categoria = "param"; Lista_par(); CurrentTokenIs(')'); } }
private static Simbolo Outros_termos(Simbolo pEsq) { if (Lexico.NextTokenIs('+') || Lexico.NextTokenIs('-')) { var inst = Op_ad(); var tDir = Termo(pEsq); MaqHip.C.Add(inst); var oDir = Outros_termos(tDir); return(oDir); } return(pEsq); }
private static Simbolo Mais_fatores(Simbolo pEsq) { if (Lexico.NextTokenIs('*') || Lexico.NextTokenIs('/')) { var inst = Op_mul(); var fDir = Fator(pEsq); MaqHip.C.Add(inst); var mDir = Mais_fatores(fDir); return(mDir); } return(pEsq); }
private static void Dc() { Escopo = ""; if (Lexico.NextTokenIs("var")) { Dc_v(); Mais_dc(); } else if (Lexico.NextTokenIs("procedure")) { Dc_p(); Mais_dc(); } }
private static void RestoIdent(Simbolo pEsq) { if (Lexico.NextTokenIs(":=")) { CurrentToken = Lexico.NextToken(); Expressao(pEsq); MaqHip.C.Add("ARMZ " + pEsq.EnderecoRelativo); } else { int retorno = MaqHip.C.Count(); MaqHip.C.Add("PUSHER"); Lista_arg(pEsq); MaqHip.C.Add("CHPR " + pEsq.PrimeiraInstrucao); MaqHip.C[retorno] = "PUSHER " + MaqHip.C.Count(); } }