Eu não sei muito sobre yacc, bison, flex ou lex e, por favor, me corrija se eu estiver errado, mas uma linguagem de programação também é uma máquina de Turing e uma máquina de Turing é definida como a tupla Onde , , , como entrada, como função de transição onde = número de etapas à esquerda, = número de etapas à direita, = "espera", é o estado inicial e é o conjunto de estados finais.
Qual a similaridade entre implementar uma linguagem de programação e implementar uma máquina de Turing? Pode-se dizer que o que é feito quando uma linguagem de programação é implementada é que uma máquina de Turing como a acima é definida? Se sim, por que não podemos simplesmente usar um modelo que se parece com a definição de uma máquina de Turing quando uma linguagem de programação é definida? Em vez disso, algo como o BNF parece ser o padrão.