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>() )); } }