O Processo de Compilao Fases da compilao Anlise

  • Slides: 20
Download presentation
O Processo de Compilação • Fases da compilação – Análise sintática (e léxica) –

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.

Fases de um compilador Programa fonte Relato de erros Análise sintática AST Análise contextual

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

Fases de um compilador (II) Programa fonte Análise léxica Análise sintática Gerenciador da tabela

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 Gerador de código intermed. Otimizador de código Gerador de código Programa destino Tratamento de erros

Ferramentas Complementares a um Compilador • Vários componentes fazem parte do processo de compilação:

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

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

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

Scanning/Parsing • Análise léxica – lê a seqüencia de caracteres e a organiza como

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

Parsing let var n : Integer; var c: Char in begin c : =

Parsing let var n : Integer; var c: Char in begin c : = ‘&’; n : = n + 1 end

AST Program Let. Command sequential. Declaration Assign. Command Var. Declaration Assign. Command Simple. V.

AST Program Let. Command sequential. Declaration Assign. Command Var. Declaration Assign. Command Simple. V. Char. Expr. . Simple. T. Char. Lit. Ident. Var. Declaration n Integer c Char c ‘&’

AST Program Let. Command . . . sequential. Command. . . Assign. Command Simple.

AST Program Let. Command . . . sequential. Command. . . Assign. Command Simple. V. Ident. n Binary. Expr. Vname. Expr. Int. Expr. Simple. V. Ident. Op. Int. Lit. n + 1

AST decorada – Análise Contextual Program Let. Command sequential. Declaration Assign. Command Var. Declaration

AST decorada – Análise Contextual Program Let. Command sequential. Declaration Assign. Command Var. Declaration Assign. Command Simple. V. Char. Expr. : char. . . Simple. T. Char. Lit. Ident. Var. Declaration n Integer c Char c ‘&’

AST decorada – Análise Program Contextual Let. Command . . . sequential. Command. .

AST decorada – Análise Program Contextual Let. Command . . . sequential. Command. . . Assign. Command Simple. V. : int Ident. n Binary. Expr. : int Vname. Expr. : int Int. Expr. Simple. V. : int Op. Int. Lit. Ident. n + 1

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

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

Passos • Um passo é uma travessia do programa fonte, ou de uma representação

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

Compilação em múltiplos passos • Módulo principal (driver) chama cada um dos passos, responsáveis

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

Compilação em passo único • Analisador sintático vai realizando/chamando as atividades de análise contextual

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

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

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

Compilação em um passo único let var n : Integer; var c: Char in

Compilação em um passo único let var n : Integer; var c: Char in begin c : = ‘&’; n : = n + 1 end PUSH 2 LOADL 38 STORE 1[SB] LOAD 0[SB] LOADL 1 CALL Add STORE 0[SB] POP 2 HALT

Pontos relevantes no Projeto de um Compilador • Velocidade – possível vantagem para um

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.

Exemplo: Compilador de Triangle public class Compiler { public static void compile. Program (.

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

Estrutura do Compilador de Triangle. Syntactic. Analyzer Triangle. Contextual. Analyzer Triangle. Abstract. Systax. Trees

Estrutura do Compilador de Triangle. Syntactic. Analyzer Triangle. Contextual. Analyzer Triangle. Abstract. Systax. Trees Triangle. Code. Generator