Como Criar uma Linguagem de Programação
Muitas pessoas sofrem e se frustram com as linguagens de programação existentes atualmente. Elas podem preferir controles mais abstratos ou simplesmente não gostam de implementar funções que acreditam que deveriam existir por padrão. Não importa se trabalha com Sistemas de Informação ou simplesmente gosta de mexer em computadores, se quer saber mais sobre como criar sua própria linguagem de programação, veio ao lugar certo.
1. **Familiarize-se com a tecnologia.** É impossível criar uma linguagem de programação se você não sabe como usar um computador.
2. **Conheça as terminologias.** Os compiladores normalmente escrevem utilizando terminologias pouco conhecidas pelos usuários médios de computador. Antes de prosseguir, estude os compiladores e aprenda tudo o que puder sobre eles.
3. **Escolha qual problema sua linguagem vai solucionar.** Seu objetivo é resolver um problema de um domínio específico ou criar uma linguagem mais geral?
4. **Pense na semântica da linguagem e nos conceitos dela.** Você vai permitir acesso direto aos ponteiros ou não?
Quais são os tipos de dados na sua linguagem?
Trata-se de uma linguagem estática ou dinâmica?
Qual é o modelo de memória? Você vai utilizar um coletor de lixo ou um gerenciamento manual de memória? Se for a primeira opção, escreva seu próprio coletor de lixo ou adapte um existente.
Como sua linguagem vai lidar com a simultaneidade? Vai utilizar um modelo de threads/locks ou algo mais complexo, como Linda ou o modelo de atores, já que os computadores hoje em dia têm vários núcleos?
As funções primitivas vão ser embutidas na linguagem ou vão vir de uma biblioteca?
Quais são os paradigmas da sua linguagem? Ela é funcional? Orientada a objetos? Baseada em protótipos (como o JavaScript)? Orientada a aspectos? Orientada a modelos? Algo completamente novo e único?
Como sua linguagem vai interagir com bibliotecas e linguagens já existentes? Isso é importante se está criando uma linguagem em um domínio específico.
Algumas das respostas a essas perguntas vão ser respondidas pelo Passo anterior. Elas também vão ajudá-lo a seguir no próximo Passo.
5. **Pense no que gostaria que as pessoas conseguissem fazer com sua linguagem.** Por exemplo, "elas podem guiar um robô a seguir uma linha" ou "elas podem criar aplicativos de celular com ela".
6. **Experimente com ideias de sintaxe (o texto da linguagem) para os exemplos acima.** Tome cuidado: faça o possível para manter sua linguagem na categoria livre de contexto ou similar. Você vai se agradecer no futuro, acredite. Seu compilador de compilador também terá menos trabalho assim.
7. **Escreva um documento formal para a sintaxe.** 
8. **Defina se a linguagem vai ser interpretada ou compilada.** O que isso significa? No campo interpretado, o usuário vai editar seus programas em editores e os executará diretamente no interpretador. No campo compilado, o usuário editará os programas, os compilará, salvará executáveis resultantes no computador e os executará.
9. **Escreva o scanner de front end e as ferramentas de análise sintática, ou encontre uma ferramenta pronta que ajude com isso.** Pense também em como o compilador/interpretador vai avisar o usuário de erros de sintaxe e no programa.
10. **Use as informações da análise sintática para escrever um código de objeto ou uma representação intermediária.** Faça com que a ferramenta de análise sintática crie uma árvore sintática abstrata. Em seguida, crie o código de objeto a partir da árvore, utilizando um código de três endereços ou um SSA. Por fim, crie uma tabela de símbolos para definir as funções, as variáveis globais, etc.
Dependendo da linguagem, é uma boa ideia criar uma vtable ou tabelas de informação para as classes, ajudando no suporte de RTTI.
11. **Escreva o gerador de código que vai servir para compilar e finalizar tudo.** 
12. **Escreva muitos programas para testar a linguagem.** Crie programas que forcem ao máximo a gramática da sua linguagem para ver se o compilador aceita tudo que está dentro de suas definições e rejeita o que está fora delas.
13. **Pense em como os usuários vão testar os próprios programas em busca de bugs.** 
14. **Caso sua linguagem use uma biblioteca padrão, é bom escrevê-la.** Escreva também o coletor de lixo e outras funções de runtime necessárias.
Por exemplo, se vai escrever um compilador, você precisará de códigos que o sistema operacional pode executar para rodar o código de usuário (por exemplo, alocando todas as variáveis globais).
15. **Publique sua linguagem junto das especificações dela e exemplos do que pode ser feito nela.** Lembre-se de documentar possíveis integrações com bibliotecas e linguagens existentes, além de explicar como usar as funções de runtime ou a biblioteca padrão.
{"url": "https://pt.wikihow.com/Criar-uma-Linguagem-de-Programa%C3%A7%C3%A3o", "language": "pt"}