Finite-State Language Processing by Emmanuel Roche