Compiladores
2º sem 2023 e 2º sem 2020
Ementa
- Estrutura de um compilador
- Fundamentos de linguagens formais
- Planejamento da construção de um compilador e a seleção de ferramentas
- Análise léxica
- Construção de um analisador léxico
- Análise sintática
- Tabela de símbolos, análise semântica e tradução dirigida por sintaxe
- Tradução dirigida pela sintaxe
- Tabela de símbolos
- Geração de código intermediário
- Geração de código e otimização de código
- Especificação de uma proposta de linguagem inovadora
Introdução
Conforme Steve Yegge, chefe engenharia na sourcegraph.com
, que foi gerente de desenvolvimento na Amazon, e engenheiro de software na Google, em seu blog post "Rich Programmer Food" :
"Se você não conhece como os compiladores funcionam, então não sabe como os computadores funcionam. E por outro lado, se você não tem 100% de certeza de como compiladores funcionam, então não os conhece."
"Construção de compiladores é (...) a segunda disciplina mais importante que você pode ter em um curso de graduação em Ciências da Computação."
"Sistemas Operacionais, Aprendizado de Máquina, Computação Distribuída, e Construção de Algoritmos são tão importantes quanto Compiladores. Exceto pelo fato de que você continuará sem saber como os computadores funcionam."
Desenvolver compiladores geralmente é uma tarefa árdua, porém é uma oportunidade de aprender a utilizar várias áreas da ciência da computação em uma implementação. Esse conhecimento adquirido pode ser utilizado em diversas outras aplicações, não se limitando a compiladores.
Conhecer o funcionamento do compilador é importante para poder extrair o máximo de seus recursos, como por exemplo, durante a fase de depuração de um sistema. Além disso, ele é um programa de computador, e vários são de código livre e podem ser modificados pelo programador para atender uma demanda em especial, caso necessário.
"Compiladores" não se limita apenas a área de compiladores, abrangendo outras áreas como: interpretadores, arquitetura dos ambientes e linguagens de programação, de que forma os programas podem ser otimizados para execução em arquiteturas de computador, projeto de novas arquiteturas, simulação compilada, ferramentas de produtividade de software, processamento de linguagem natural, como extrair desempenho da arquitetura para aplicações científicas, como melhor utilizar os recursos dos compiladores (ou interpretadores) em aplicações e arquiteturas de IoT, dentre outras.
Bibliografia
- FEDOZZI, R. Compiladores. 2018.
- AHO, A. V. et al. Compiladores: princípios, técnicas e ferramentas. 2008.
- SETZER, V. W.; MELO, I. S. H. A construção de um compilador. 1989.
- DELAMARO, M. Como Construir um Compilador Utilizando Ferramentas Java. 2004.
- LOUDEN, K. C. Compiler Construction: Principles and Practice. 1997.
- LOUDEN, K. C. et al. Programming languages: principles and practices. 2011.
- GRUNE, D. et al. Modern compiler design. 2012.
- WIRTH, N. Algorithms + Data Structures = Programs. 1976.
- COOPER, K.; TORCZON, L.. Construindo Compiladores. 2017.
- FISCHER, C. N.; CYTRON, R. K.; LEBLANC Jr., R. J. Crafting a Compiler. 2010.
- PRICE, A. M. de A.; TOSCANI, S. S. Implementação de linguagens de programação: compiladores. 2001.
TCCs
- TOMAZELLI, G. Implementação de um compilador para uma linguagem de programação com geração de código Microsoft .NET Intermediate Language. 2004.
- BERGSTEN, N. A. L. Um compilador Portugol-assembly para microcontrolador. 2012.
Sites de Professores
Contendo informações úteis sobre compiladores
- Prof. Valdemar Setzer
- Prof. Márcio Delamaro
- Prof. Marcurs Ramos
- Prof. Guilherme Galante
- Prof. Sérgio Costa
- Prof. Aleardo Manacero
- Prof. Ricardo Rocha
Ferramentas
- Compilador educativo Verto
- Máquina Hipotética Cesar
- Computador hipotético HIPO
- https://www.ime.usp.br/~vwsetzer/HIPO/hipo-descr.html
- https://www.ime.usp.br/~vwsetzer/HIPO/using-the-HIPO-simulator.html
- https://seijihariki.github.io/HIPO-simulator
- https://github.com/seijihariki/HIPO-simulator
- https://www.ime.usp.br/~jstern/miscellanea/MaterialDidatico/hipo.htm
- https://www.ime.usp.br/~jstern/software/hipo/Hipo.pdf
- Exemplo de código HIPO
- Compilador online interativo que permite inserir código fonte, e ver o código objeto gerado
- Compiler Explorer: https://godbolt.org/
- penguinTrace: https://penguintrace.org/intro/
Vídeos de interesse
- ENGELSMA, J. Tutorial on LEX. https://youtu.be/54bo1qaHAfk
- PARIZOTTO, L. Fundamentos de linguagens formais. https://youtu.be/L3qZF6Mw62U
- TECHNOLOGIKÁ. A diferença entre compilador e interpretador. https://youtu.be/aJww2aXJtc4
- FERREIRA, E. W. T. Compiladores: Construção do Analisador Léxico. https://youtu.be/pud18CZ81VE
- Prof. Ricardo Luís de Azevedo da Rocha. Linguagens e Compiladores. UNIVESP.
- Apresentação. https://youtu.be/lfGqYLYXdSY
- Conceitos de Linguagens de Programação e Análise Léxica. https://youtu.be/kazE4zPRsxc
- Conceitos de Análise Sintática e Análise Sintática Descendente. https://youtu.be/JQ92w5oDyb0
- Análise Sintática Ascendente. https://youtu.be/JUoEAhciEnU
- Tradução dirigida por sintaxe. https://youtu.be/_kGAgukarkk
- Código intermediário. https://youtu.be/Asj7JNZmxb4
- Ambientes de execução. https://youtu.be/jZJEi7Wb6_o
- Geração de código, noções de otimização. https://youtu.be/oVi91pFqHlQ
Pascal
Links de interesse
- Why you should take a Compilers course
- (When) Should I learn compilers?
- Compilador
- Interpretador
- Linker
- GNU Compiler Collection (GCC)
- GNU Pascal (GPC)
- GCC vs. Clang/LLVM: An In-Depth Comparison of C/C++ Compilers
- Repositório da disciplina "Compiladores" do curso Ciência da Computação do CEULP/ULBRA
- Free Grammars for Programming Languages - C. Heng
- Free Compilers and Interpreters - C. Heng
- Compiler Construction - Wikibooks
- GNU C Compiler Internals - Wikibooks
- How to Write a Compiler - Wikibooks
- Inger: interpretador simples e documentação
- Writing your own programming language and compiler with Python
- Compiler Design Tutorial
- Compiler Design and Construction - FreeTechBooks
- Compiler - Digital Library - stmik-banjarbaru.ac.id
- Compiler Design Tutorial
- Curlie: compilers directory
Repositório
https://github.com/efurlanm/teaching/tree/main/comp/
Last edited: 2024-11-17