Depois de muito tempo estudando, testando e criando interpretadores e compiladores consegui chegar a um nível aceitável no assunto, depois de um tempo criei linguagens e projetos que chamaram a atenção de algumas pessoas e claro de iniciantes que queriam aprender a criar suas linguagens e depois de ensinar várias pessoas e cada vez mais pessoas me perguntando, resolvi criar este "manual" reunindo todo o meu conhecimento e ensinando para desenvolvedores iniciantes que têm dúvidas e até aqueles que estão na universidade e querem um projeto para impressionar seu professor e sua turma.
Embora linguagens grandes precisem de uma equipe trabalhando em cima deles para que sempre fiquem melhor, você pode usar esse conhecimento e criar uma linguagem que torne seu trabalho e o de seus amigos mais fácil. Por que não criar uma linguagem com um foco específico que o ajude no trabalho?
Além disso pra todo programador é de suma importancia entender como as linguagens funcionam no seu interior.
Vamos usar Python, que não é tão rápido, mas é fácil e podemos ensinar a maioria dos conceitos sem se preocupar com sintaxes mais complexas como C e Java.
- Claro, o básico de
Python e C
(não se preocupe, python é semelhante a C e se você deseja implementar em C certamente se você conhece C será capaz de escrever o código!)- Desejável saber como ler arquivos de texto
Você aprenderá 3 partes importantes:
- Teoria, aqui você aprende como funciona uma linguagem
- Criando um interpretador pt.1, aqui você cria um interpretador que lê o código e executa
- Criando um compilador pt.1, Crie um compilador que gere o código C e chame o compilador C para gerar um executável
- Comparação, comparando um compilador para codigo Assembly para um compilador para codigo C
E agora você vai ler esta delicinha de repositório e finalmente entender como uma linguagem funciona e criar suas próprias linguagens!
E é importante ressaltar que os compiladores que veremos aqui não estarão 100% otimizados porque seria um grande trabalho para vocês, mas tentarei escrever algo sobre otimização.