Uma implementação de linguagem de programação normalmente começa por transformar o código-fonte em passagens:
-
Análise léxica: divida o texto de entrada em tokens. Isso lida com espaços em branco e comentários. Por exemplo:
a := 1 + 2 * 3 -- comment
pode ser transformado em:
identifier a operator := number 1 operator + number 2 operator * number 3
O acima é um pseudocódigo que representa uma lista de valores, onde cada valor é um token.
-
Análise: Crie uma árvore representando o código-fonte:
assignment: lvalue: variable a rvalue: add: number 1 multiply: number 2 number 3
A análise determina coisas como onde as instruções começam e terminam e a ordem das operações.
Pode haver passes adicionais depois disso, dependendo da complexidade do idioma e da qualidade da implementação.
Finalmente, a árvore resultante é interpretada ou compilada.
-
Interpreted : O programa é executado diretamente. Isso geralmente é mais fácil de implementar.
-
Compilado : o programa é convertido em uma das seguintes opções:
-
Código da máquina, para que a CPU possa executá-lo diretamente.
-
Bytecode , para que possa ser executado por uma máquina virtual.
-
Outra linguagem de programação. Por exemplo, algumas implementações de linguagem de programação compilam para C e invocam um compilador C para produzir código de máquina.
-
Esta é uma visão geral aproximada. Como você pode ver, a implementação de uma linguagem de programação está bastante envolvida. Para evitar sentir-se sobrecarregado, comece implementando um conjunto muito pequeno de recursos. Não comece escrevendo um léxico ou analisador que suporte todo o seu idioma; você vai se queimar antes de ver algo funcionando. A chave é conseguir algo funcionando . Ele criará um strong ciclo de feedback: adicionar novos recursos será divertido porque você poderá vê-los funcionar imediatamente.
Eu não recomendo começar a escrever um intérprete para o BASIC imediatamente. Aqui estão alguns pontos de partida:
-
Implemente uma calculadora que suporte a ordem de operações. Exemplo:
> 1 + (2 + 3) * (4 + 5) 46
-
Implemente um gerador de sentenças aleatórias usando um modelo semelhante a este:
<weapons> a snake many snakes a gun a rocket launcher a thick board and something sharp <verb> kill destroy dismember impale <sentence> I will <verb> you with <weapons>.
Este é um bom exemplo de um idioma específico do domínio .
-
Aprenda a linguagem de programação C. Isso lhe dará uma melhor compreensão de como os computadores funcionam. C parecerá menos conveniente no início (por exemplo, você não pode simplesmente pegar duas strings e concatená-las, você tem que alocar um buffer grande o suficiente para ambas as strings primeiro), mas você verá que ele fornece melhores métodos de estruturar dados do que você tinha em BASIC.