SaidaRotina Reset(Evento evento)
 {
     Acumulador      = new List <TokenLexico>();
     Cabecote        = new Cabecote(AutomatoFinito.EstadoInicial);
     Cabecote.Aceito = AutomatoFinito.ConfereEstadoFinal(Cabecote.EstadoAtual);
     return(new SaidaRotina(
                new List <Evento>(),
                new List <Evento>(),
                new List <Evento>()
                ));
 }
        public RecategorizadorLexico()
        {
            AutomatoFinito  = InstanciaAutomato();
            Acumulador      = new List <TokenLexico>();
            Cabecote        = new Cabecote(AutomatoFinito.EstadoInicial);
            Cabecote.Aceito = AutomatoFinito.ConfereEstadoFinal(Cabecote.EstadoAtual);

            Rotinas.Add(TipoEvento.TOKEN_LEXICO, new Func <Evento, SaidaRotina>(ReceberToken));
            Rotinas.Add(TipoEvento.RESET, new Func <Evento, SaidaRotina>(Reset));
            Rotinas.Add(TipoEvento.EOL, new Func <Evento, SaidaRotina>(Eol));
            Rotinas.Add(TipoEvento.EOF, new Func <Evento, SaidaRotina>(Eof));
        }
 void Transicao(Transicao transicao)
 {
     Cabecote.EstadoAtual = transicao.Destino;
     Cabecote.Aceito      = AutomatoFinito.ConfereEstadoFinal(Cabecote.EstadoAtual);
 }