• Nenhum resultado encontrado

Compiladores e Computabilidade

N/A
N/A
Protected

Academic year: 2022

Share "Compiladores e Computabilidade"

Copied!
8
0
0

Texto

(1)

Compiladores e Computabilidade

Prof. Leandro C. Fernandes

UNIP –Universidade Paulista, 2018

INTRODUÇÃO

Motivação e

Conceitos fundamentais

(2)

Por que estudar Compiladores?

É parte do conhecimento básico de um desenvolvedor

Como os compiladores funcionam?

Como os computadores trabalham?

(conjuntos de instruções, registradores, modos de endereçamento, estrutura de dados de tempo de execução, ...)

Quais códigos de máquina são gerados para certas construções da linguagem?

(consideração a cerca da eficiência) O que é um bom projeto de linguagem?

É um projeto de programação não trivial!

Também é útil para o desenvolvimento de softwares em geral

Leitura de argumentos estruturados sintaticamente

Linha de comando (shell S.O.) Leitura de dados estruturados

(ex. Arquivos XML, part lists, imagens, ...) Buscas em espaços de nomes hierárquicos Interpretação de códigos de comandos

O que são essas coisas?

• Visual Studio

• Netbeans

• gcc

• Browser

• Eclipse

• Java

• HTML

• Assembler

• PHP

• Assembly

• Babylon

• Python

• JVM

• .NET

• Pascal Objects

• Lua

Ferramenta de Apoio Compilador

Tradutor Interpretador

Linguagem

(3)

O que são essas coisas?

gcc

javac

babylon

masm

JVM

python

dotNET

Browser

Visual Studio

Codeblocks

NetBeans

Eclipse

Assembly

HTML

Python

Java

PHP

C#

O que está acontecendo !?

• Qual é todo o processo que ocorre desde a codificação de um algoritmo por um programador até a sua execução em um computador?

Quais os elementos envolvidos neste processo?

Quais tarefas cabem a cada um desses elementos?

Quais fatores influenciam de um ou de outro modo esse processo?

Quais elementos podem ser reutilizados?

Quais elementos são específicos?

(4)

Compilador (comercial)

Da codificação ao executável ...

solução

#include..

#define T void mai..

int x;

for (i=T;.

Pré-processador

/lib/inclu void mai..

int x;

for (i=10

Compilador

01010001 100011 01011010 101011 10010101

Linker

01010001 10110011 01011011 01011100 10101001

- Remover macros;

- Incluir caminhos (paths) de arquivos; e - Realizar outras substituições ...

- Verificar e compreender o código fonte para, então, traduzi- lo e gerar um equivalente que seja codificado na linguagem de baixo nível da plataforma alvo.

01010001 100011 01011010 101011 10010101 10001101 01101010 10111001 01010100 00100011 01011011 01011100 10101010 10001100 01101010

- Reunir num arquivo único e executável todos os módulos que compõe o programa, resolvendo as referências cruzadas e ligações que há no código Código fonte

- Arquivo texto - Linguagem fonte

Código fonte sem macros - Ling. fonte

Código objeto - Arquivo binário - Instruções ISA - Depende arquit.

Código Executável - Módulo de carga - Cód. de máquina

realocável Códigos objeto

- Bibliotecas - Outros módulos

POR DENTRO DO COMPILADOR

Quais tarefas são realizadas para a transformação do código?

(5)

Estrutura Dinâmica de um Compilador

Fluxo de caracteres v a l = 10 * v a l + i

análise léxica (scanning)

Fluxo de tokens 1 (ident)

"val"

3 (atrib)

- 2 (número)

10 4 (mult)

- 1 (ident)

"val"

5 (soma)

- 1 (ident)

"i"

número do token valor do token

análise sintática (parsing)

Árvore sintática

ident= número* ident+ ident Termo

Expressão Comando

Faz a varredura do arquivo fonte reconhecen- do e identificado cada um dos elementos significativos da linguagem; e eliminando qualquer caracteres irrelevantes ao processo de compilação

Verifica a estrutura do código, analisa se todos os elementos encontrados estão na ordem esperada e determina qual a relação que existe entre eles (contexto).

Como resultado, constrói uma representação estruturada do código fonte que será utilizada no processo de tradução

Estrutura Dinâmica de um Compilador

análise semantica Árvore sintática

ident =number *ident + ident Termo

Expressão Comando

Representação

intermediária árvore sintática, tabela de símbolos, ...

otimização geração de código

ld.i4.s 10 Código de máquina

geração de código intermediário

Verifica a natureza dos identificadores, seus tipos e escopo, além da compatibilidade entre os elementos envolvidos nas instruções.

Sintetiza um código equivalente em linguagem de baixo nível, próximo da plataforma alvo.

Realiza melhorias no código gerado, buscando otimizar instruções e eliminar trechos sem efeito ou inalcançáveis.

Produz o código final em linguagem de máquina, de acordo com a plataforma alvo.

(6)

Compiladores vs Interpretadores

Compilador traduz para código de máquina

varredor analisador

gramatical ... gerador

de código loader

código fonte código de máquina

Variação: interpretação de um código intermediário ... compilador ...

código fonte código intermediário (ex. Common Intermediate

Language (CIL))

VM código fonte é traduzido para o código de uma máquina virtual

A máquina interpreta o código simulando a máquina real

Interpretador executa o código fonte "diretamente"

varredor analisador gramatical

código fonte interpretação

comandos em um laço são lidos e analisados gramaticalmente a cada iteração

Compiladores de Uma Passagem

• As fases trabalham de maneira intercalada:

Cada etapa é realizada para o trecho ou seção corrente da análise;

Quando esta parte termina, o processo é retomado para o próximo trecho de código.

• O programa alvo está completo quando terminar a leitura do programa fonte

Código fonte

varredura do símbolo (token)

análise gramatical do símbolo

verificação do símbolo

geração de código para o símbolo

fim de arquivo?

(7)

Compiladores de Multiplas Passagens

As fases são "programas" separados, que são executados sequencialmente

Cada fase lê de um arquivo e escreve em um novo arquivo.

Por quê multiplas passagens?

se a memória for escassa (irrelevante atualmente)

se a linguagem for complexa

se a portabilidade for importante

caracteres

análise lexical

símbolos (tokens)

análise gramatical

árvore

análise semântica

...

código

Compiladores de Duas Passagens

(Atual)

Front End

+ análise léxica + análise gramatical

+ análise semântica respresentação intermediária

Back End

+ geração de código interm.

+ otimização

+ geração de código final

dependente da linguagem Java

C Pascal

dependente da máquina Pentium PowerPC SPARC qualquer combinação possível

Vantagens

• melhor portabilidade

• possibilidade de muitas combinações entre front-ends e back-ends

• otimizações são mais fáceis na representação

Desvantagens

• lenta

• necessita mais memória

(8)

Estrutura Estática de um Compilador

utiliza

analisador gram. & sem.

an. léxico

tabela de símbolos

gerador de código provê os símbolos a

partir do código fonte

mantém as informações sobre os nomes e tipos declarados

gera o código de máquina

"programa principal"

gerencia toda a compilação

fluxo de dados

Referências

Documentos relacionados

O teste de tetrazólio é resultado de muitas pesquisas e sua aplicação em embriões zigóticos para estudo da viabilidade de sementes de coqueiro é importante por possibilitar

Crisóstomo (2001) apresenta elementos que devem ser considerados em relação a esta decisão. Ao adquirir soluções externas, usualmente, a equipe da empresa ainda tem um árduo

Os principais objectivos definidos foram a observação e realização dos procedimentos nas diferentes vertentes de atividade do cirurgião, aplicação correta da terminologia cirúrgica,

psicológicos, sociais e ambientais. Assim podemos observar que é de extrema importância a QV e a PS andarem juntas, pois não adianta ter uma meta de promoção de saúde se

Finally,  we  can  conclude  several  findings  from  our  research.  First,  productivity  is  the  most  important  determinant  for  internationalization  that 

Portanto, tendo em vista esse grande desafio que a tecnologia impõe às estratégias de preservação digital, e devido à complexidade e à especifi- cidade do documento

não para em s4 sem transições " " em s5 reconhecido maiorIgual s0 → s2 ignora os brancos do início. sem transições " " em s2 reconhecido

A teoria das filas de espera agrega o c,onjunto de modelos nntc;máti- cos estocásticos construídos para o estudo dos fenómenos de espera que surgem correntemente na