geração de código teoria e implementação de linguagens computacionais – if688 jobson ronan...
TRANSCRIPT
![Page 1: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/1.jpg)
Geração de Código
Teoria e Implementação de Linguagens Computacionais – IF688
Jobson Ronan Jeronimo da [email protected]
![Page 2: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/2.jpg)
Roteiro
Visão Geral Introdução Algoritmo de geração de código Máquinas Virtuais
![Page 3: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/3.jpg)
Visão Geral
Código objeto
Análise sintática
Código fonte
AST
Análise semântica
Geração decódigo
AST decorada
Análiseléxica
Tokens
![Page 4: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/4.jpg)
Introdução
Fase essencial do back-end de um compilador que objetiva preencher o gap semântico entre a linguagem fonte e a máquina de destinoChamada de fase de síntese
![Page 5: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/5.jpg)
Introdução
Depende da arquitetura alvoNúmero de registradores e formas de
endereçamento
Dificilmente consegue ser reaproveitado
• Máquinas Virtuais: M x N vs. M + N
![Page 6: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/6.jpg)
Algoritmo de geração de código Aplicação de templates para traduzir as
diversas frases do código fonte execute[V:=E] =
evaluate E assign V
Estrutura inerentemente recursiva Tem como entrada uma estrutura de
objetos Padrão Visitor ;)
![Page 7: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/7.jpg)
Definições: Particionamento de uma máquina: sistema
IBM VM/ESA para o IBM 370 (1965). SO rodando sobre SO: Unix sobre Windows Software que simula o comportamento de
uma máquina (diferente daquela na qual roda).
• Emuladores Ambientes independentes de plataforma
para linguagens de programação
Máquinas Virtuais
![Page 8: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/8.jpg)
O-Code machine para BCPL (1960’s) P-Code machine para UCSD Pascal (1970
´s) Smalltalk (1970´s) Java Virtual Machine para Java (1995) Microsoft .NET: VB, C#, C++, ... (2001)
Máquinas Virtuais
![Page 9: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/9.jpg)
Impacto na PerformanceLinguagens Interpretadas: JavaScript,
Haskell, etc.• Portabilidade e Segurança• 200x mais lentas que C
Linguagens Baseadas em Bytecodes• Linguagens semi-compiladas• 10 a 20x mais lentas que C• JIT: 5x mais lenta que C
Máquinas Virtuais
![Page 10: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/10.jpg)
Exemplo
Demonstração...
![Page 11: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/11.jpg)
Optar por gerar código CLR no projeto Maior suporte dos monitores
Possivelmente a melhor metodologia é a engenharia reversa
Testar bem a análise semântica antes de implementar a geração de código
O Projeto não é simples Porém tem escopo bem definido
Dicas o projeto!
![Page 12: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/12.jpg)
Referências Iniciais
JVM http://www.cin.ufpe.br/~if688/ppt/JVM-5.ppt http://mrl.nyu.edu/~meyer/jvm/jasmin.html
CLR http://www.cin.ufpe.br/~if688/laboratorio/aula
4/seminario.ppt John Gough, Compiling for the .NET
Common Language Runtime
![Page 13: Geração de Código Teoria e Implementação de Linguagens Computacionais – IF688 Jobson Ronan Jeronimo da Silva jrjs@cin.ufpe.br](https://reader036.vdocuments.site/reader036/viewer/2022070311/552fc142497959413d8df6a9/html5/thumbnails/13.jpg)
Geração de Código
Teoria e Implementação de Linguagens Computacionais – IF688
Jobson Ronan Jeronimo da [email protected]