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

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

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.

Apresentações semelhantes


Apresentação em tema: "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."— 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 Programa objeto Análise sintática Análise contextual Geração de código Relato de erros AST AST Decorada

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

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 compilador preprocessador assembler Carregador/ link-editor Programa fonte Programa em assembler Código objeto (relocável) Código executável Bibliotecas/ códigos objeto

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 + 1 end let var Ident. n colon : Ident. Integer Ident. n becomes := Ident. n op + intlit 1

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

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

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

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

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áticoAnalisador ContextualGerador 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 Analisador Sintático Analisador Contextual Gerador de Código Driver do Compilador

17 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 let var n : Integer; var c: Char in begin c := ‘&’; n := n + 1 end

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. SyntacticAnalyzer Triangle. ContextualAnalyzer Triangle. CodeGenerator Triangle Triangle. AbstractSystaxTrees


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google