Buscar

[Compiladores - UVA] A2

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

20/11/2021
Rio de Janeiro, RJ
Disciplina: Compiladores
Aluno: André Luiz Braga Vasco de Paula
Matrícula: 20201103664
A A2 foi dividida em 4 trabalhos individuais. O presente documento foi
dividido então em partes iguais para a resolução de cada trabalho. Para
facilitar a navegação, utilize os seguintes links para navegar pelo
documento:
Trabalho 1 Trabalho 2 Trabalho 3 Trabalho 4
Trabalho 1 de 4 (29/10/2021)
1. Cite e explique os princípios que fundamentam a compilação
just-in-time e sua evolução ao longo dos anos.
O compilador JIT é executado após o início do programa e compila o
código (normalmente bytecode ou algum tipo de instrução da
máquina virtual) em tempo real (ou just-in-time, como é chamado)
em um formato geralmente mais rápido. O JIT tem acesso a
informações em tempo de execução dinâmico, enquanto que um
compilador padrão não, permitindo que ele faça otimizações no
código, como funções embutidas que são usadas com frequência,
levando a códigos mais rápidos;
É um claro contraste com o compilador tradicional que compila todo
o código em linguagem de máquina antes da execução do
programa.
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
2. Faça uma análise da figura abaixo e explique sua arquitetura e o
processo do compilador “just-in-time”.
Compilador Otimizador é responsável, como seu nome sugere, por
aplicar otimizações no código, que podem utilizar algumas
informações como tipo de dados, que são coletadas em tempo de
compilação, pelo offline profiler, ou execução, pelo online profiler,
para especializar o código e deixá-lo mais eficiente;
Online Profiler: Coleta as informações do programa e monitora as
unidades de código executadas, permitindo assim a geração de
código focado nas unidades;
Offline Profiler: Coleta informação de tempo de inicialização de
programas e da compilação que serão utilizadas pelo compilador no
processo de geração e análise de código;
Gerente de compilação: Encarregado de criar um planejamento de
compilação para o compilador otimizador utilizado durante a
geração de código. Pode utilizar as informações obtidas pelo online e
offline profilers para isto.
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
Compilador base: Gera código nativo em tempo de execução para
todas unidades invocadas.
Gerente de código: Como o nome sugere, ele gerencia as áreas do
código do programa. Possui duas tarefas: Enviar a versão correta da
unidade de código acionada para execução e enviar uma unidade de
código para recompilação ou compilação.
Monitor: Tem como objetivo atualizar os parâmetros de frequência.
3. Quais ou qual é a vantagem de se utilizar um compilador JIT?
A grande vantagem do compilador JIT é que ele permite o aumento
do desempenho na execução de programas, uma vez que os
ambientes de execução compilam o código em tempo de execução
para código de máquina, aumentando a performance, no lugar de
avaliar e executar linha por linha como em interpretadores
tradicionais.
Como citado anteriormente, o compilador JIT utiliza estratégias de
compiladores e interpretadores, buscando sempre otimizar a
execução.
Trabalho 2 de 4 (05/09/2021)
1. Julgue o item que se segue a respeito das características da linguagem
PHP e de compiladores.
Compilador é o programa que traduz o código fonte de uma linguagem de
programação de alto nível para uma linguagem de programação de baixo
nível.
( X ) Certo () Errado
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
2. Com relação a linguagens de programação e compiladores, julgue os
itens subsequentes.
A etapa de análise semântica de um compilador tem como objetivo
verificar os inter-relacionamentos de um programa, validando tipologias,
fluxos de controle e unicidade na declaração de variáveis.
( X ) Certo ( ) Errado
3. Com relação a linguagens de programação e compiladores, julgue os
itens subsequentes.
Chama-se cruzado o compilador que gera um programa que seja
executável em pelo menos um sistema operacional diferente daquele
onde o compilador tenha sido executado.
( X ) Certo ( ) Errado
4. Com relação a linguagens de programação e compiladores, julgue os
itens subsequentes.
Em um compilador, os tokens são identificados na fase de análise léxica e
são representados por três propriedades: classe, valor e posição.
( X ) Certo ( ) Errado
5. No que se refere à compilação e interpretação de programas, julgue os
próximos itens.
Os interpretadores, em vez de produzirem um programa objeto, fruto da
tradução, executam diretamente as operações especificadas no código
fonte.
( ) Certo ( X ) Errado
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
6. No que se refere à compilação e interpretação de programas, julgue os
próximos itens.
Compilador é um utilitário responsável por executar um programa objeto
diretamente na máquina.
( ) Certo ( X ) Errado
7. A respeito de softwares básicos e aplicativos, julgue os itens
subsecutivos.
O interpretador é considerado um tradutor que não gera código-objeto,
mas que, diferentemente do compilador, traduz o programa linha a linha,
ou seja, o programa é executado à medida que é traduzido.
( X ) Certo ( ) Errado
8. Assinale a opção correta, LEVANDO EM CONSIDERAÇÃO AS QUESTÕES
ACIMA
a) ( ) A conversão da representação física das instruções para código lógico
é feita pelo Gerador.
b) ( X ) O compilador é responsável por gerar um programa em linguagem
de máquina não executável, a partir de um programa escrito em uma
linguagem de alto nível.
c) ( ) A conversão da representação simbólica das instruções para código
criptografado é feita pelo Registrador.
d) ( ) O compilador é responsável por gerar um programa em linguagem
de alto nível não executável, a partir de um programa escrito em uma
linguagem de máquina executável.
e) ( ) O cointerpretador é responsável por gerar um programa em
linguagem de máquina não interpretável, a partir de um programa escrito
em uma linguagem de usuário
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
Trabalho 3 de 4 (12/11/2021)
1. Dê uma definição para os termos seguintes:
a. Símbolo Terminal;
São os componentes básicos encontrados pelo léxico. Em
alguns casos são chamados por “token names”, por exemplo, o
primeiro componente do token produzido pelo léxico.
b. Símbolo Inicial;
Um símbolo não terminal que forma a raiz da árvore de
análise;
c. Símbolo não Terminal;
Variáveis sintáticas que ajudam a definir a estrutura sintática
da linguagem
d. Produção;
Uma regra que quando aplicada reescreve a sequência do fim
para o início;
2. Considere a estrutura seguinte:
struct {
char type;
int count;
short size;
double value;
char swap[2];
float number;
};
a. Qual a dimensão da estrutura em uma máquina de 32 bits
com um alinhamento de 4 bytes?
28 bytes;
b. Reorganize a estrutura de modo a otimizar o espaço ocupado
sem perder o alinhamento;
struct {
double value;
float number;
int count;
short size;
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
char swap[2];
char type;
};
c. Qual a dimensão da estrutura em uma máquina sem
alinhamento (packed struct)?
21 bytes
Trabalho 4 de 4 (19/11/2021)
1. De acordo com o exposto, crie um esquema. Como se fosse um
mapa mental para resumir o conteúdo acima. Você pode utilizar e
acrescentar outra referência, caso julgue necessário.
O analisador usa um CFG (Gramática livre de contexto) para validar a
string de entrada e produzir saída para a próxima fase do
compilador. A saída pode ser uma árvore de análise ou uma árvore
de sintaxe abstrata (ASG)
Árvore de Análise ASG
Uma árvore de instruções é uma
representação gráfica do processo
de troca durante a derivação.
Uma ASG é uma forma
condensada de uma Árvore de
Análise.
Numa Árvore de Análise:
- Cada nó interno representa
uma regra gramática;
- Cada nó folha representa um
terminal;
Numa ASG:
- Cada nó interno representa
um operador;
- Cada nó folha representa um
operando;
Árvores de Análise representam
todo e cada detalhe da sintaxe
real.
ASGs não representamtodos os
detalhes da sintaxe real (por isso
são chamadas de abstratas).
Árvores de Análise são menos
densas do que ASGs para o
mesmo construto de
linguagem.
ASGs são mais densas que
Árvores de Análise.
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
2. De acordo com o exposto, você deve colocar um trecho de código na
linguagem C ou na linguagem Java. Depois, separar uma instrução e
montar a árvore sintática para exemplificar o seu esquema de
resumo
public void function exemplo( ){
int a = 5;
int b = 8;
int c = 14;
int resultado;
resultado = (a+b) * (c-a)+( (b/a) * (a + b) )
}
O primeiro passo que devemos fazer é transformar a expressão
armazenada na variável resultado (que está em notação Infix, utilizada em
expressões lógicas e aritméticas) e devemos convertê-la para uma notação
Postfix, uma vez que desta forma a análise se torna mais rápida.
Portanto, temos que:
(INFIX) (a+b) * (c-a)+( (b/a) * (a + b) ) → (POSTFIX) a b + c a - * b a / a b + * +
Podemos então construir nossa árvore;
Passo 1:
Passo 2:
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664
Passo 3:
Passo 4:
Passo 5:
Passo 6:
Passo 7:
UVA Tijuca
Aluno: André Luiz Braga Vasco de Paula - 20201103664

Continue navegando