⚙️ Você sabe o que acontece quando manda o compilador executar?
Entender mais sobre os aspectos fundamentais da computação é importante para evoluir como desenvolvedor!
Bora explorar esse tópico nessa breve thread!
1/9
Começando pela definição: o que é um compilador?
Em linhas gerais, é converter a representação de dados A para a representação B, de forma que haja uma relação entre elas.
Por exemplo, Babel compila de JS para outra versão de JS (ex: ES6 -> ES5), ou num equivalente minificado
2/9
As etapas de compilação geralmente são: código fonte -> análise léxica -> parser -> análise semântica -> otimização -> geração de código.
Um compilador pode ter mais ou menos etapas, dependendo da complexidade exigida pela linguagem/arquitetura alvo/trade-off.
3/9
Caso não use abordagem de scannerless parser, a partir do código fonte precisará tokenizá-lo.
Isto é, dividí-lo em uma sequência de tokens: uma string com significado associado.
Exemplo: [ valor: "while", signficado: "keyword"] [ valor: "name", significado: "identificador" ]
4/9
Na etapa de parser o objetivo é construir a AST (Abstract Syntax Tree), que representa o código numa árvore.
Num compilador que fiz usei a abordagem de Parser Combinator. Nela se constrói parsers simples e, com composições, construímos parsers mais especializados.
5/9
Na etapa de análise semântica verificamos se o código é semanticamente válido. Exemplo: toda variável lida é declarada?
Para fazer essas análises usamos a AST para construir uma estrutura auxiliar chamada Symbol Table, da qual inserimos os identificadores escritos pelo código
6/9
Na etapa de otimização, uma forma trivial é simplificar a AST para uma equivalente. Exemplo: dead code strip otimiza apagando código inalcançável ou variáveis escritas e nunca lidas.
Há otimizações que não mexem na AST, como trampoline, ou que usam representação intermediária
7/9
Por fim, a etapa de geração de código! Nela mapeamos os nós da AST para o equivalente na representação alvo.
Por exemplo: se na linguagem de input você não precisa declarar variáveis, mas na target precisa, terá que mapear os nós de uma variável para a declaração prévia dela.
8/9
Essa thread foi um brevíssimo resumo da talk que apresentei e está linkada abaixo.
Nele apresento em bem mais detalhes esse tópico e assuntos correlatos, bem passo a passo com várias animações e recomendações de para se aprofundar.
Assiste lá ~~ 😋

9/9

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with macabeus 🇪🇺

macabeus 🇪🇺 Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @bmacabeus

17 Jan
🎵 O estilo de música que mais gosto e consumo são de vocaloid, utau e utaite. É bem popular no Japão, mas fora de ciclos de otakus quase ninguém conhece... então lá vai uma breve thread explicando o que é, para quem sabe despertar a sua curiosidade! 🪡

1/10 Image
Começando do começo, ou seja, com Vocaloid!
O termo vem do nome do software de sintetização de canto desenvolvido pela Yamaha. Quem já comprou algum instrumento certamente já conhece essa empresa, pois ela é líder no segmento.

2/10 Image
A primeira versão foi lançada em 2004, mas o sucesso só viria na segunda, lançada em 2007, especialmente por apresentar a Hatsune Miku, que se tornaria a vocaloid mais popular.
Sim, o termo "vocaloid" pode se referir tanto ao software como a um dos personagens/voicebanks.

3/10 Image
Read 10 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!