Autómatos Finitos
![]() |
No capítulo anterior definiram-se as linguagens e expressões regulares com vista a resolver o Problema Principal de ALP (versão 1) – Determinar um sistema computável, eficiente e adequado para definir linguagens de programação. – onde:
- Computável: Existe um algoritmo que recebe como entrada uma palavra e ao fim de um número finito de passos produz uma resposta
sim
ounão
conforme ou não. - Eficiente: O número de passos referido no passo anterior não deve ser "muito maior" que o comprimento da palavra.
- Adequado: Deve ser possível definir (os programas de) qualquer linguagem de programação.
As linguagens regulares são uma classe de linguagens formais. Será que resolvem o Problema Principal de ALP? É necessário esclarecer:
- Como definir um algoritmo,
Super
, que dada uma ERe
produza um programaPL = Super(e)
tal que, para cada palavrap
, o resultadoPL(p)
ésim
ounão
conformep in L(e)
ou não? - Se as computações
Super(e)
ePL(p)
são eficientes? - Se as linguagens regulares são adequadas para definir (os programs de) qualquer linguagem de programação?
O programa
Super
tem como entrada uma ERe
, que especifica uma certa linguagem regular, e devolve um programaPL
, que reconhece as palavras da linguagem definida pore
.Isto é semelhante ao trabalho de um compilador. Por exemplo,
javac
é um programa que tem como entrada ficheiros que especificam um certo programa e devolve esse programa em bytecode.