Excelente! Deu até saudades das aulas de automatos agora!
Na minha época de faculdade, a maior parte dos meus colegas não se importavam com automatos, achavam chato e inútil. Mas isso foi a solução para um grande problema que enfrentei uma vez no trabalho.
O sistema que estavamos desenvolvendo gerava fluxo de caixa com base nas compras e vendas do comércio, e tinha uma funcionalidade que chamávamos de 'campos lógicos', a função desses campos era permitir que o usuário criasse uma fórmula personalizada para uma linha do fluxo de caixa dele, podendo fazer calculos usando linhas anteriores ao fluxo ou buscando dados de alguma tabela do banco. Nossa primeira implementação, foi antes de eu ter aulas de automatos, e naturalmente, fiz a validação cheia de IFs, FORs e afins, horrível de se ver, e com um desempenho terrível, levava quase 3h para executar um fluxo de caixa com 1 milhão de linhas...Depois das aulas de automatos, reescrevi o código fazendo um automato finito. O código ficou muito mais legível e eficiente, o mesmo fluxo de caixa passou a ser executado em menos de dois minutos. E isso me fez aprender outros termos ainda, muito interessantes, como Dynamic Branch Prediction, que é muito implementado em compiladores e tem um impacto gritante no desempenho das aplicações...