No sentido formal estrito, não. O não determinismo no sentido teórico / matemático permite que uma máquina escolha um caminho de computação com base no fato de eventualmente levar a um estado de aceitação ou não, sem olhar mais adiante na entrada . Portanto, nesse sentido estrito, é uma propriedade adequada apenas para o exame teórico, e não existe uma máquina não determinística real, particularmente neste caso, você não pode realmente construir um NFA, a menos que possa ver o futuro, Nesse caso, construir um compilador com esse talento é um desperdício! ;).
No entanto, não determinístico e não determinístico são freqüentemente usados em um sentido mais fraco, definido de maneira obscura. Às vezes, pode significar randomizado / probabilístico - o algoritmo vira uma moeda; em um ambiente formal, isso é estudado como algoritmo probabilístico / randomizado, e não referido como não determinismo. Outro uso é para um algoritmo que não produz necessariamente a mesma saída, com duas execuções na mesma entrada - pode não ser aleatório, mas parte do seu comportamento não é especificado, portanto, pode haver várias saídas válidas (pessoalmente, acho que isso definição vem vem confundindo un -determined e não -deterministic.
No entanto, você poderia, em princípio, construir um lexer que não é determinístico em um desses sentidos informais mais fracos, no entanto, não seria um NFA (esse é um modelo formal de máquina estrito) e não consigo imaginar que seria um acidente idéia quente também - um lexer precisa ser bastante previsível.
A última opção é que você pode simular o não-determinismo por meio de backtracking ou paralelismo, mas nesse caso você perde a aparente eficiência do não-determinismo, ao transformá-lo efetivamente em um cálculo determinístico, para que não seja melhor fora do que com um DFA.