Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais –...
Transcript of Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais –...
![Page 1: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/1.jpg)
Geração de CódigoGeração de Código
Equipe de Monitores
Teoria e Implementação de Linguagens Computacionais – IF688
![Page 2: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/2.jpg)
RoteiroRoteiro
IntroduçãoVisão geralAlgoritmo de Geração de CódigoFerramentas e exemplos
◦Java Virtual Machine - JVM◦.NET Virtual Machine - CLR
![Page 3: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/3.jpg)
IntroduçãoIntroduçã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 destino◦Chamada de fase de síntese
![Page 4: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/4.jpg)
IntroduçãoIntrodução
Dependente da arquitetura◦Registradores (tipo, quantidade etc)◦Conjunto de instruções◦Modo de endereçamento◦Sistema Operacional (nativos)
Dificilmente aproveitado para mais de uma plataforma◦Máquina real ou virtual
![Page 5: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/5.jpg)
Visão GeralVisã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 6: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/6.jpg)
Algoritmos de geraçãoAlgoritmos de geração
Utilizam-se templates para se traduzir as diversas frases de código-fonte
execute [ v := e ]◦evaluate [e]◦assign v
Estrutura Inerentemente recursivaTem como entrada uma estrutura de
objetos◦Visitor◦AST decorada
![Page 7: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/7.jpg)
Máquinas VirtuaisMáquinas Virtuais
JVM◦Máquina vitual JAVA◦Baseada em pilha◦Interpreta os bytecodes presentes em
um .class
Arquivos .class◦Formato binário◦Para gerá-lo precisamos de um assembler
![Page 8: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/8.jpg)
Máquinas VirtuaisMáquinas Virtuais
CLR◦Common Languagem Runtime◦Máquina virtual .NET Framework◦Interpreta arquivos .exe
.exe◦Interpreta apenas os arquivos gerados para a
plataforma◦MONO foi baseado na mesmas definições
![Page 9: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/9.jpg)
Java Virtual MachineFerramentas e utilitários
![Page 10: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/10.jpg)
AssemblersAssemblers
Jasmin [http://jasmin.sourceforge.net/]
◦Java Assembler Interface◦Biblioteca que converte texto para bytecodes
Java Assembler PlaygroundJava™ Bytecode AssemblerJava Virtual Machine Assembler
![Page 11: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/11.jpg)
Jasmin - InstruçõesJasmin - Instruções
dload <var-num> - Double dstore <var-num> - Double fload <var-num> - Float fstore <var-num> - Float iload <var-num> - Int
iinc <var-num> <amount> Incrementa o inteiro
Instruções da JVM dependem do tipo. integer, float, double etc.
if_icmpeq <label> if_icmpge <label> if_icmpgt <label>
![Page 12: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/12.jpg)
Jasmin – If Then ElseJasmin – If Then Else
if(expr){ comm1;} else { comm2;}
exprCodeiconst_1if_icmpeq elsecomm1Codegoto endifelse: comm2CodeendIf:
![Page 13: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/13.jpg)
Jasmin - WhileJasmin - While
while(expr) {comm
}
startWhile: exprCode iconst_1 if_icmpeq endWhile commCode goto startWhileendWhile:
![Page 14: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/14.jpg)
Jasmin - MétodosJasmin - Métodos
.method doubleLocals(DD)D.limit stack 4.limit locals 4dload_1dload_3dadd dreturn.end method
![Page 15: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/15.jpg)
Jasmin - Gerando executávelJasmin - Gerando executável
java –jar jasmin.jar myfile.j
O local de saída depende dos pacotes utilizados.◦Pode ser indicado local alternativo
![Page 16: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/16.jpg)
Máquina Virtual .NETFerramentas
![Page 17: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/17.jpg)
AssemblerAssembler
ILAsm.exe◦Microsoft® .NET Framework◦Intermediate Language Assembler◦Componente do .NET Framework◦Tradução para código da plataforma◦Codifica o MSIL◦Não possui GUI
![Page 18: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/18.jpg)
ILAsm - UsoILAsm - Uso
ilasm [Options] <sourcefile> [Options]◦Utiliza recursos do Próprio Framework◦Seleção de arquitetura, dependencias,
informações de debug, entre outras opções
◦Ilasm /?
![Page 19: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/19.jpg)
Características do .NETCaracterísticas do .NET
Seu assembler não requer “linguagem intermediária”
Assembler compõe o frameworkO código é independente do tipo de dado
◦Tipos básicos: int, double, floatBoa documentação
Especificação em:◦ http://www.cin.ufpe.br/~jfp/MonitoriaCompiladores/
![Page 20: Geração de Código Equipe de Monitores Teoria e Implementação de Linguagens Computacionais – IF688.](https://reader033.fdocumentos.tips/reader033/viewer/2022051515/552fc17c497959413d8f0acb/html5/thumbnails/20.jpg)
Geração de CódigoGeração de Código
José Francisco Pereira {[email protected]}Jobson Ronan {[email protected]}
Teoria e Implementação de Linguagens Computacionais – IF688