Beispiel #1
0
        public SaidaRotina LerLinha(Evento evento)
        {
            string linha = (string)evento.Conteudo;

            if (!string.IsNullOrEmpty(linha))
            {
                CaracterClassificado caracterClassificado = new CaracterClassificado(linha[0]);
                linha = linha.Remove(0, 1);
                return(new SaidaRotina(
                           new List <Evento>(),
                           new List <Evento> {
                    new Evento(evento.InstanteProgramado + 1, TipoEvento.ASCII, evento.Tarefa, linha)
                },
                           new List <Evento> {
                    new Evento(evento.InstanteProgramado + 1, TipoEvento.ASCII, evento.Tarefa, caracterClassificado)
                }
                           ));
            }
            else
            {
                return(new SaidaRotina(
                           new List <Evento>(),
                           new List <Evento>(),
                           new List <Evento>()
                           ));
            }
        }
        /// <summary>
        /// Recebe um Evento contendo uma CaracterCaracterizado
        /// </summary>
        /// <param name="evento">Tipo: ASCII, Conteudo: CaracterClassificado </param>
        /// <returns></returns>
        //  Token possui Tipo (Identificador, Número, Especial) e Valor
        public SaidaRotina ReceberCaracter(Evento evento)
        {
            CaracterClassificado caracterClassificado = (CaracterClassificado)evento.Conteudo;

            Transicao transicao = AutomatoFinito.BuscaTransicao(Cabecote.EstadoAtual, caracterClassificado.Caracter);

            if (transicao != null)
            {
                Transicao(transicao);
                if (caracterClassificado.Funcao != FuncaoCaracter.DESCARTAVEL)
                {
                    Acumulador.Add(caracterClassificado);
                }
                return(new SaidaRotina(
                           new List <Evento>(),
                           new List <Evento>(),
                           new List <Evento>()
                           ));
            }
            else if (caracterClassificado.Tipo == TipoCaracter.DELIMITADOR || Cabecote.Aceito)
            {
                return(new SaidaRotina(
                           new List <Evento>(),
                           new List <Evento>()
                {
                    new Evento(evento.InstanteProgramado + 1, TipoEvento.RESET, evento.Tarefa, null), new Evento(evento.InstanteProgramado + 2, TipoEvento.ASCII, evento.Tarefa, evento.Conteudo)
                },
                           new List <Evento>()
                {
                    new Evento(evento.InstanteProgramado + 1, TipoEvento.TOKEN_LEXICO, evento.Tarefa, GetTokenLexicoFromEstadoAtual())
                }
                           ));
            }
            else
            {
                TransicaoNA();
                Acumulador.Add(caracterClassificado);
                return(new SaidaRotina(
                           new List <Evento>(),
                           new List <Evento>(),
                           new List <Evento>()
                           ));
            }
        }