Linguagem de Programação
2.1 Processadores de linguagens: compiladores, interpretadores, máquinas virtuais.
Usuários distintos entendem um computador de forma distinta, de acordo com a interface definida pelo software que costumam utilizar. Nos casos extremos, é possível que dois usuários da mesma máquina não consigam sequer uma base comum para trocar impressões sobre a máquina que ambos utilizam, simplesmente porque cada um conhece apenas uma face, ou interface, distinta da máquina, definida pelo software e pelos periféricos que utiliza.
Exemplos de interfaces comuns são sistemas de acesso a contas bancárias, linguagens de acesso a bases de dados, processadores de texto, sistemas de reserva de passagens, planilhas eletrônicas, programas de jogos, e naturalmente, no caso que mais nos interessa aqui, as diversas linguagens de programação.
Para cada linguagem L, a máquina pode ser vista como um sistema exclusivamente dedicado à execução de programas em L. Diferentes linguagens fazem com que aparentemente tenhamos diferentes máquinas virtuais, cuja implementação não interessa ao usuário, na maioria dos casos. Em princípio, pelo menos, para quem executa um programa escrito em Pascal não faz diferença se o hardware da máquina executa o código Pascal diretamente, ou se uma tradução é feita para o código que é finalmente executado (a linguagem da máquina), possivelmente em vários passos.
A máquina virtual de uma linguagem de programação L pode sempre ser vista como a implementação de uma interface entre a máquina e o usuário, interface essa definida através de L. Essa implementação pode ser, até certo ponto, estendida ou modificada pelo usuário: se um programador de Pascal dispõe das declarações de um tipo chamado complexo, e de um conjunto de rotinas suficientes para as ações que pretende executar com valores do novo tipo, esse tipo pode ser considerado como implementado pela nova máquina virtual, obtida por extensão da anterior: um