Skip to content

Commit 777c011

Browse files
committed
material das aulas de 4 e 6 de novembro
1 parent 2ff4a24 commit 777c011

3 files changed

Lines changed: 72 additions & 2 deletions

File tree

2025-11-04.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# IF688 - Teoria e Implementação de Linguagens Computacionais
2+
3+
## Representações Intermediárias de Código - Código de 3 endereços
4+
5+
### Objetivo
6+
7+
O objetivo desta aula é apresentar o conceito de representações intermediárias de código, com foco particular em código de três endereços.
8+
O objetivo desta aula é introduzir o conceito de **representações intermediárias (IRs)** no processo de compilação, discutindo seu papel como forma abstrata de comunicação entre as fases de análise e síntese do compilador. A aula apresenta o fato de que há diferentes tipos de IRs (gráficas, lineares e híbridas), destacando a importância da **modularidade e portabilidade** que elas proporcionam. Em seguida, é detalhado o **código de três endereços (three-address code)** como forma comum de IR linear, com ênfase em sua estrutura (_quadruples_). Por fim, são discutidas regras semânticas para geração de código intermediário, tanto para expressões aritméticas quanto para expressões booleanas e comandos de controle de fluxo.
9+
10+
### Questões para Discussão
11+
12+
- Por que um compilador precisa de representações intermediárias?
13+
- Quais as vantagens de introduzir uma IR entre a análise e a geração de código?
14+
- Que tipos de IRs existem e como escolher a mais apropriada?
15+
- O que caracteriza o **código de três endereços** e como ele é representado?
16+
- Como derivar regras semânticas que produzem código intermediário para expressões e estruturas de controle?
17+
18+
### Material usado em sala de aula
19+
20+
- [Slides](https://drive.google.com/file/d/1DXSiU-hDqjj8yGdD0vbKNHpCqPpGYz9V/view?usp=sharing)
21+
22+
### Vídeos
23+
24+
- [Representações Lineares de Código](https://www.youtube.com/watch?v=OlSgNM7k6Vc)
25+
- [Gerando Representações Lineares de Código](https://www.youtube.com/watch?v=T69WHa90QQs)
26+
27+
### Links Relacionados
28+
29+
- [Intermediate representation](https://en.wikipedia.org/wiki/Intermediate_representation)
30+
- [Three-address code – Wikipedia](https://en.wikipedia.org/wiki/Three-address_code)
31+
- [Bytecode](https://en.wikipedia.org/wiki/Bytecode)
32+
- [Three-address code](https://en.wikipedia.org/wiki/Three-address_code)
33+
- [Three address code in Compiler](https://www.geeksforgeeks.org/compiler-design/three-address-code-compiler/)
34+
- [Three Address, Quadruples, Triples and Indirect Triples](https://www.youtube.com/watch?v=jNbSX8dID3g)
35+
- [Construct Quadruples,triples,indirect triples for the statement `(a+b)*(c+d)-(a+b+c)`](https://www.youtube.com/watch?v=sv5Qmq8Hjz4)

2025-11-06.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# IF688 - Teoria e Implementação de Linguagens Computacionais
2+
3+
## Representações Intermediárias de Código - *Control-flow Graphs*
4+
5+
### Objetivo
6+
7+
O objetivo desta aula é apresentar o conceito de _control-flow graphs_ (CFGs) como uma forma fundamental de representação intermediária em compiladores.
8+
O foco está em compreender o papel dos **blocos básicos** na estrutura do CFG, como o grafo modela o fluxo de execução de um programa, e como construí-lo a partir de representações intermediárias, especialmente código de três endereços (TAC).
9+
A aula também discute diferentes estratégias de construção — recursiva e eficiente — e destaca o uso de CFGs em análises e otimizações de programas.
10+
11+
### Questões para Discussão
12+
13+
- Qual a principal vantagem de utilizar grafos ao invés de árvores como representação intermediária de código?
14+
- O que são blocos básicos de código e por que são fundamentais?
15+
- Como dividir código em blocos básicos de forma sistemática?
16+
- Como construir um _control-flow graph_ recursivamente a partir de instruções compostas (sequências, if, while)?
17+
- Como construir um _control-flow graph_ eficientemente diretamente a partir do código de três endereços?
18+
- Quais outras representações visuais de código podem se beneficiar da estrutura de grafos?
19+
20+
21+
### Material usado em sala de aula
22+
23+
- [Slides](https://drive.google.com/file/d/13X-834SgNHsiyETu7Z1lfmhOufNgha4b/view?usp=sharing)
24+
25+
### Vídeos
26+
27+
- [Representações Intermediárias de Código - Control-Flow Graphs](https://www.youtube.com/watch?v=2BlBPc11PLs)
28+
- [Construindo Control-Flow Graphs a partir de Código de 3 Endereços](https://www.youtube.com/watch?v=lGx9drsIz-g)
29+
30+
### Links Relacionados
31+
32+
- [Control-flow graph](https://en.wikipedia.org/wiki/Control_flow_graph)
33+
- [Dependency graph](https://en.wikipedia.org/wiki/Dependency_graph)
34+
- [Program Dependence Graph](https://en.wikipedia.org/wiki/Program_Dependence_Graph)
35+
- [Call graph](https://en.wikipedia.org/wiki/Call_graph)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ Na disciplina, utilizaremos uma mistura de aulas tradicionais com exercícios e
9090
| 23.10.25 | quinta | [APS: Atividade 5 ANTLR](2025-10-23.md) | |
9191
| 28.10.25 | terça | [APS: Atividade 6 ASTs](2025-10-28.md) | |
9292
| 30.10.25 | quinta | [Análise Semântica: Implementando Type-Checking](2025-10-30.md) | |
93-
| 04.11.25 | terça | Representações Intermediárias de Código | |
94-
| 06.11.25 | quinta | Representações Intermediárias de Código | |
93+
| 04.11.25 | terça | [Representações Intermediárias de Código - Código de 3 endereços](2025-11-04.md) | |
94+
| 06.11.25 | quinta | [Representações Intermediárias de Código - _Control-Flow Graphs_](2025-11-06.md) | |
9595
| 11.11.25 | terça | Análise e Otimização de Código | |
9696
| 13.11.25 | quinta | Análise e Otimização de Código | |
9797
| 18.11.25 | terça | Análise e Otimização de Código | |

0 commit comments

Comments
 (0)