Sobre Autómatos e Linguagens de Programação
Em Autómatos e Linguagens de Programação faz-se uma introdução formal à teoria e às técnicas da análise e definição de linguagens de programação.
Os conceitos e as técnicas tratadas são ilustradas num capítulo final, onde é definida uma linguagem de programação simples e implementado um interpretador para essa linguagem.
Dado um programa python,
# file: guide.py
def resposta():
    return 42
print(f"The answer is {resposta()}.\n")
Quando este programa corre, por exemplo
> python guide.py <enter>
> The answer is 42.
o que acontece entre o <enter> na linha python guide.py e aparecer o texto The answer is 42. na consola?
O interpretador do python, entre outras coisas:
- Lê o ficheiro guide.pydo sistema de ficheiros.
- Processa o conteúdo desse ficheiro de forma a determinar se corresponde a um programa válido (em python, claro).
- Executa as instruções desse programa, incluindo:
- A definição da função resposta()e respetivas "sub-instruções".
- O cálculo do valor da expressão "The answer is {resposta()}.\n".
- Escrever na consola o valor dessa expressão.
 
- A definição da função 
Outro exemplo: uma calculadora "básica".
Para programar uma calculadora para a linha de comandos, o programa deve receber uma string com uma conta e escrever o respetivo resultado. Por exemplo > calc "2+3*4" deve escrever 14.
Quais são as dificuldades de fazer este programa? Há várias:
- Temos de saber verificar se o input está "bem formado". Por exemplo 2+3*4está bem, mas+234**nem por isso...
- Exatamente, o que "significa" cada "símbolo"? 2é 2? E se aparecer em20?
- E como tratar "sequências" de símbolos? 2+3é sempre 2+3? Mas então2+3*4não devia ser14mas20...
Estas são exatamente as questões tratadas em ALP:
- Quais são os símbolos (ou letras) e as palavras válidas (isto é, as sequências de símbolos que sabemos tratar)?
- Como definir e representar todas as palavras válidas, isto é, a linguagem?
- Como distinguir as palavras válidas das inválidas?
- Como atribuir significado às palavras válidas? Isto é, como executar um programa?