private ArvoreNo AnalisarCondicional() { ProximoToken(TipoToken.Se); ProximoToken(TipoToken.AbreParenteses); ArvoreNo no = AnalisarBooleana(); ProximoToken(TipoToken.FechaParenteses); ProximoToken(TipoToken.AbreChaves); ArvoreNo comandos = AnalisarListaComandos(); while (tokenAtual.Tipo != TipoToken.FechaChaves) { ArvoreNo comando = AnalisarComando(); if (comando is VazioNo) { break; } (comandos as ComandosNo).Comandos.Add(comando); } ProximoToken(TipoToken.FechaChaves); ArvoreNo senao = new VazioNo(); if (tokenAtual.Tipo == TipoToken.Senao) { senao = AnalisarSenao(); } return(new CondicionalNo(no, comandos, senao)); }
private ArvoreNo AnalisarComando() { ArvoreNo no; if (tokenAtual.Tipo == TipoToken.Se) { no = AnalisarCondicional(); } else if (tokenAtual.Tipo == TipoToken.Tipo) { no = AnalisarDeclaracao(); ProximoToken(TipoToken.PontoVirgula); } else if (tokenAtual.Tipo == TipoToken.Identificador) { no = AnalisarAtribuicao(); ProximoToken(TipoToken.PontoVirgula); } else if (tokenAtual.Tipo == TipoToken.Enquanto) { no = AnalisarLoop(); } else { no = new VazioNo(); } return(no); }
private ArvoreNo AnalisarDeclaracao() { Token tipo = ProximoToken(TipoToken.Tipo); Token identif = ProximoToken(TipoToken.Identificador); ArvoreNo atrib; if (tokenAtual.Tipo == TipoToken.Atribuicao) { tokenAtual = listaTokens[--tokens]; atrib = AnalisarAtribuicao(); } else { atrib = new VazioNo(); } return(new DeclaracaoNo(tipo, identif, atrib)); }