16 pontos por GN⁺ 14 일 전 | Ainda não há comentários. | Compartilhar no WhatsApp
  • A maioria dos livros didáticos sobre compiladores é extensa e focada em teoria, o que levanta o problema de que iniciantes têm dificuldade para implementar um compilador realmente funcional
  • Como material prático para superar isso, é apresentada a série Jack Crenshaw, “Let’s Build a Compiler!”, que aborda um compilador Pascal conciso com estrutura de passagem única
  • Este tutorial apoia o aprendizado experimental por meio da combinação de análise sintática e geração de código, de otimização mínima e de versões em C e Forth
  • O segundo material, o artigo “A Nanopass Framework for Compiler Education”, apresenta uma arquitetura modular de compilador composta por inúmeras transformações simples (passes)
  • Só depois de adquirir experiência prática de implementação com esses dois materiais é que, se necessário, pode-se recorrer a livros tradicionais (Dragon Book) para um estudo mais aprofundado

A realidade do aprendizado de compiladores e dois artigos essenciais

  • Aponta-se que os livros sobre compiladores existentes são excessivamente extensos e difíceis, o que torna complicado para iniciantes escrever um compilador que realmente funcione
    • A maioria dos livros trata de temas vastos como conversão de expressões regulares, teoria de gramáticas etc., sem oferecer um ponto de partida prático
    • Isso acaba criando equívocos e mitos de que “compiladores são difíceis”
  • Como material representativo que quebra essa percepção, é apresentada a série Jack Crenshaw, “Let’s Build a Compiler!”
    • Iniciado em 1988, este tutorial trata de um compilador de passagem única no nível do Turbo Pascal
    • Sua estrutura combina análise sintática e geração de código, realizando apenas o mínimo de otimização
    • Foi escrito originalmente em Pascal, e depois passou a ter também uma versão em C e uma tradução para Forth
    • A versão em Forth facilita a experimentação e a compreensão graças às características interativas da linguagem
  • A limitação da série de Crenshaw é que ela não tem representação interna do programa (árvore sintática abstrata, AST)
    • Em Pascal, a manipulação de árvores é complexa e por isso foi omitida, mas em linguagens de alto nível como Python, Ruby, Erlang, Haskell e Lisp isso pode ser implementado com facilidade
    • Essas linguagens foram originalmente projetadas para manipular dados em estrutura de árvore
  • O segundo material recomendado é o artigo de Sarkar, Waddell e Dybvig “A Nanopass Framework for Compiler Education”
    • A ideia central é que “um compilador é uma série de processos que transformam gradualmente a representação interna de um programa”
    • Ele propõe uma estrutura composta por dezenas a centenas de transformações simples (passes)
    • Cada transformação é mantida o mais simples possível, evitando acoplamento entre as transformações
    • O framework define explicitamente a entrada e a saída de cada passe
    • A linguagem de implementação é Scheme, realizando verificação em tempo de execução com base em tipagem dinâmica
  • Depois de escrever um compilador de verdade com esses dois materiais, se necessário, pode-se continuar o estudo com livros tradicionais como o Dragon Book
    • Ainda assim, só esses dois materiais já bastam para obter uma experiência prática de criação de compiladores

Ainda não há comentários.

Ainda não há comentários.