O Processo de Compilao Fases da compilao Anlise
- Slides: 20
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 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 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: 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 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 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 : = ‘&’; n : = n + 1 end
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. 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 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. . . 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 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 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 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 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 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 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 (. . . ) { 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 Triangle. Code. Generator
- Compilao
- Anlise swot
- Processos administrativos princípios e fases
- Fases do processo disciplinar oab
- Preliminares de mérito processo penal
- Processo galvanico
- Consulenza di processo
- Processo saude doença
- Fatores que influenciam no processo empreendedor
- Processo fisico
- Deltoides posterior
- Deduzione
- Fasi del processo penale minorile schema
- 6 etapas do processo decisório
- Processo non spontaneo
- Processo sociale
- Tradução biologia
- Composição quimica do cimento
- Tipos de cimento portland
- Ssa cursos e notas
- A diversidade das plantas