Muitas pessoas têm dificuldades ou frustrações com as linguagens de programação que usam todos os dias. Alguns desejam que as coisas sejam tratadas de forma mais abstrata, enquanto outros não gostam de implementar recursos que desejam que sejam 'padrão'. Quer você seja um profissional de TI ou apenas um hobby, muitas vezes você pode querer criar uma nova linguagem de programação.
Passos
Etapa 1. Familiarize-se com a tecnologia
Você não pode criar uma linguagem de programação se não souber usar um computador.
Etapa 2. Familiarize-se com a terminologia
Os escritores de compiladores costumam usar uma terminologia desconhecida. Leia sobre compiladores antes de prosseguir. Certifique-se de saber tudo o que você precisa saber.
Etapa 3. Decida qual problema seu idioma está resolvendo
Trata-se de um problema específico de domínio ou é uma linguagem de uso geral?
Etapa 4. Pense sobre a semântica de sua linguagem e os conceitos dela
- Você vai permitir o acesso direto do ponteiro ou não?
- Quais são os tipos de dados do seu idioma?
- É uma linguagem estática ou dinâmica?
- Qual é o seu modelo de memória? Você vai usar um coletor de lixo ou gerenciamento manual de memória? (Se você usa um coletor de lixo, prepare-se para escrever um ou adaptar um existente ao seu idioma.)
- Como vamos lidar com a simultaneidade? Você vai usar um modelo de threading / bloqueio simples ou algo mais complexo como Linda ou o modelo de ator? (Uma vez que hoje em dia os computadores têm vários núcleos.)
- Existem funções primitivas embutidas na linguagem ou tudo virá de uma biblioteca?
- Qual é o paradigma ou paradigmas da sua linguagem? Funcional? Orientado a Objeto? Protótipo (como JavaScript)? Orientado para aspectos? Orientado a modelos? Ou algo totalmente novo?
- Como sua linguagem fará a interface com as bibliotecas e linguagens existentes (principalmente C)? Este ponto é importante se você estiver construindo uma linguagem específica de domínio.
- Finalmente, algumas das respostas a essas perguntas serão respondidas na segunda etapa e o ajudarão a responder na próxima etapa.
Etapa 5. Pense em algumas tarefas específicas que alguém gostaria de realizar com o seu idioma
Por exemplo, 'eles podem querer direcionar um robô para seguir uma linha' ou 'eles podem querer criar programas de desktop relativamente portáteis nele' ou 'eles podem querer criar aplicativos da web com ele'.
Etapa 6. Experimente ideias de sintaxe (o texto da linguagem) para os exemplos acima
Tenha o cuidado de manter seu idioma na categoria de idioma livre de contexto ou algo dentro dela. Seu gerador de analisador e você irá apreciá-lo mais tarde
Etapa 7. Escreva uma gramática formal para a sintaxe
Etapa 8. Decida se a linguagem será interpretada ou compilada
O que significa que no mundo interpretado, seu usuário normalmente editará seu programa em um editor e o executará diretamente no intérprete; enquanto no mundo compilado, seu usuário irá editar seu programa, compilá-lo, salvar o executável resultante em algum lugar e executá-lo.
Etapa 9. Escreva o scanner e analisador front-end ou encontre uma ferramenta que o ajude com isso
Além disso, pense em como o seu compilador / interpretador avisará o usuário sobre programas errôneos e erros de sintaxe
Etapa 10. Use as informações do analisador para escrever o código do objeto ou uma representação intermediária
Faça com que o analisador crie um AST e, em seguida, crie seu código de objeto a partir do AST usando três códigos de endereço ou seu irmão mais velho SSA e, em seguida, crie uma tabela de símbolos para definir suas funções, variáveis globais, etc.
Além disso, dependendo do seu idioma, você também pode criar tabelas de ponteiros virtuais ou tabelas de informações para suas classes (a fim de oferecer suporte a reflexão ou RTTI)
Etapa 11. Escreva o executor ou gerador de código que ligará tudo junto
Etapa 12. Escreva muitos programas de teste para testar o idioma
Você deseja criar programas que enfatizem o fardo de sua gramática formal para ver se seu compilador aceita tudo que está dentro de sua definição e rejeita tudo que está fora dela
Etapa 13. Considere como o usuário irá depurar seus próprios programas
Etapa 14. Se o seu idioma usa uma biblioteca padrão, você vai querer escrevê-la
Junto com um coletor de lixo ou outros recursos de tempo de execução, se necessário.
Especificamente, se você escrever um compilador, precisará do código que o sistema operacional executará para começar a executar o código do usuário (por exemplo, alocar todas as variáveis globais)
Etapa 15. Publique seu idioma, junto com as especificações e alguns exemplos do que você pode fazer nele
Não se esqueça de documentar como você pode integrar com bibliotecas, linguagens existentes e como usar os recursos de tempo de execução e / ou biblioteca padrão
Vídeo - Ao usar este serviço, algumas informações podem ser compartilhadas com o YouTube
Pontas
- Comece projetando sua linguagem e não escreva nenhum código, até que esteja satisfeito e tenha respondido todas (ou a maioria) das questões ou problemas relacionados ao seu design, pois é mais fácil alterar o design mais cedo do que mais tarde.
- Conheça a plataforma alvo (sistema operacional e bibliotecas) do seu compilador / interpretador, afinal você vai utilizá-la e manipulá-la.
Avisos
- Pense se você realmente precisa de um novo idioma, e o que seu idioma tem de novo que outros idiomas não têm (pode ser uma combinação de recursos ou um único recurso).
- Escrever línguas é difícil se você não sabe o que está fazendo. Também requer muita prática.
- Prepare-se para passar algum tempo no design da linguagem, uma vez que você não terá a chance de mudar sua linguagem depois de escrever o compilador e passar do ponto de design.
- Não tente basear suas características em uma união de vários idiomas, como dizer que seu idioma será uma união de idioma X, idioma Y e idioma Z. A história nos mostra que idiomas criados dessa forma nunca terão sucesso, ou todos estariam programando PL / 1 em vez de algo baseado em C.