Correspondência de expressões regulares com base no DFA - como obter todas as correspondências?

Eu tenho um determinado DFA que representa uma expressão regular. Quero corresponder o DFA a um fluxo de entrada e recuperar todas as correspondências possíveis, não apenas a correspondência mais longa.

Por exemplo:

regex: a * ba | baa

entrada: aaaaabaaababbabbbaa

resultado:

aaaaabaaabaBAbaa