A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

O Processo de Compilação

Apresentações semelhantes


Apresentação em tema: "O Processo de Compilação"— Transcrição da apresentação:

1 O Processo de Compilação
Fases da compilação Análise sintática (e léxica) Análise contextual Geração de código As fases estão associadas às três partes da especificação de uma linguagem: sintaxe, restrições contextuais (semântica estática) e semântica.

2 Fases de um compilador Programa fonte Relato de erros
Análise sintática AST Análise contextual Relato de erros AST Decorada Geração de código Programa objeto

3 Fases de um compilador (II)
Programa fonte Análise léxica Análise sintática Gerenciador da tabela de símbolos Análise semântica Tratamento de erros Gerador de código intermed. Otimizador de código Gerador de código Programa destino

4 Ferramentas Complementares a um Compilador
Vários componentes fazem parte do processo de compilação: preprocessador, compilador, assembler, carregador e/ou link-editor.

5 Bibliotecas/ códigos objeto
Programa fonte assembler preprocessador Código objeto (relocável) Programa fonte compilador Carregador/ link-editor Bibliotecas/ códigos objeto Código executável Programa em assembler

6 Scanning/Parsing Análise léxica – lê a seqüencia de caracteres e a organiza como tokens – seqüencias de caracteres com algum significado Análise sintática – agrupa caracteres ou tokens em uma estrutura hierárquica com algum significado

7 Parsing let var n : Integer; var c: Char in begin c := ‘&’; n := n end let var Ident. colon Ident. let var n : Integer Ident. becomes Ident. op intlit n := n + 1

8 AST Program LetCommand sequentialCommand sequentialDeclaration
AssignCommand AssignCommand VarDeclaration VarDeclaration SimpleV. CharExpr. ... SimpleT. SimpleT. CharLit. Ident. Ident. Ident. Ident. Ident. ‘&’ n Integer c Char c

9 AST Program LetCommand sequentialCommand ... ... AssignCommand
BinaryExpr. SimpleV. VnameExpr. IntExpr. SimpleV. Ident. Op. IntLit. Ident. n n + 1

10 AST decorada – Análise Contextual
Program LetCommand sequentialCommand sequentialDeclaration AssignCommand AssignCommand VarDeclaration VarDeclaration SimpleV. CharExpr. : char ... SimpleT. SimpleT. CharLit. Ident. Ident. Ident. Ident. Ident. ‘&’ n Integer c Char c

11 AST decorada – Análise Contextual
Program LetCommand sequentialCommand ... ... AssignCommand BinaryExpr. : int SimpleV. : int VnameExpr. : int IntExpr. SimpleV. : int Ident. : int Op. IntLit. Ident. n n + 1

12 Geração de código PUSH 2 LOADL 38 STORE 1[SB] LOAD 0[SB] LOADL 1 CALL Add STORE 0[SB] POP 2 HALT

13 Passos Um passo é uma travessia do programa fonte, ou de uma representação interna dele. Um compilador de um passo atravessa o programa uma única vez. Um compilador de múltiplos passos faz várias travessias O projeto de um compilador é diretamente relacionado ao número de passos

14 Compilação em múltiplos passos
Módulo principal (driver) chama cada um dos passos, responsáveis pela análise sintática, análise contextual e geração de código. Driver do Compilador Analisador Sintático Analisador Contextual Gerador de Código

15 Compilação em passo único
Analisador sintático vai realizando/chamando as atividades de análise contextual e geração de código, à medida que lê e reconhece o programa

16 Compilação em passo único
Driver do Compilador Analisador Sintático Analisador Contextual Gerador de Código

17 Geração de código let var n : Integer; var c: Char in begin c := ‘&’; n := n end PUSH 2 LOADL 38 STORE 1[SB] LOAD 0[SB] LOADL 1 CALL Add STORE 0[SB] POP 2 HALT

18 Pontos relevantes no Projeto de um Compilador
Velocidade – possível vantagem para um passo Espaço – possível vantagem para um passo (dados x programa) Modularidade – vantagem de múltiplos passos Flexibilidade – vantagem de múltiplos passos Transformações/otimizações de programas – vantagem de múltiplos passos Características da linguagem fonte podem inviabilizar o uso de um passo único – se a linguagem permite o uso de uma função antes da sua definição, por exemplo.

19 Exemplo: Compilador de Triangle
public class Compiler { public static void compileProgram (...) { Parser parser = new Parser (...); Checker checker = new Checker (...); Encoder generator = new Encoder(...); Program theAST = parser.parse(); checker.check(theAST); generate.encode(theAST); } ...

20 Estrutura do Compilador de Triangle
Triangle. CodeGenerator Triangle. ContextualAnalyzer Triangle. SyntacticAnalyzer Triangle. AbstractSystaxTrees


Carregar ppt "O Processo de Compilação"

Apresentações semelhantes


Anúncios Google