Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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));
        }