Buscar

Lista de Exercícios Compiladores

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 5 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

Prévia do material em texto

GRACE KELLY DA SILVA 
1. O que é: 
a. Linguagem de alto nível. 
São aquelas cuja sintaxe se aproxima mais da nossa linguagem e se distanciam mais da 
linguagem de máquina. Elas possuem um nível de abstração que faz com que você 
entenda aquele código mais facilmente, pois foi removido da sintaxe o que você não 
precisa entender em um primeiro contato com programação ou pra quem nunca vai 
mexer com linguagens de baixo nível. 
 
b. Linguagem intermediária. 
Linguagem de computador usada na programação como um estágio intermediário entre 
a linguagem-fonte de origem (geralmente uma linguagem de alto nível) e a linguagem 
de destino (geralmente o código de máquina). Muitos compiladores de alto nível usam a 
linguagem assembly como uma linguagem intermediária. 
 
c. Linguagem de baixo nível. 
É aquela que se aproxima mais da linguagem de máquina. Ela é muito mais voltada ao 
dispositivo (processador, micro controlador, etc.). Normalmente envolve números e 
letras que nada mais são que instruções diretas ao dispositivo. 
 
2. Explique qual a aplicação da tabela de símbolos e a função dos símbolos reservados. 
 
A tabela de símbolos é utilizada em compiladores para o armazenamento de 
informações de identificadores, tais como constantes, funções, variáveis e tipos de 
dados. É utilizada em quase todas as fases de compilação, como a varredura, a análise 
sintática, a análise semântica, otimização e geração de código. Em cada fase ela pode 
ser utilizada como base para comparações ou mesmo atualizada com novos 
identificadores durante a saída de cada fase. Um compilador usa uma tabela de símbolos 
para guardar informações sobre os nomes declarados em um programa. A tabela de 
símbolos é pesquisada cada vez que um nome é encontrado no programa fonte. 
Alterações são feitas na tabela de símbolos sempre que um novo nome ou nova 
informação sobre um nome já existente é obtida. 
 
3. Tendo como base a linguagem de programação C. Execute o processo de análise 
léxica separando os símbolos reservados conforme suas funções no trecho código 
abaixo: 
 
 LETRA → [A-Z] | [A-Z] 
DÍGITO → [0-9] 
DÍGITOS → DÍGITO DÍGITO* 
IDENTIFICADOR → LETRA [LETRA | DÍGITO]* C 
 
LEXEMA CLASSIFICAÇÃO FUNÇÃO 
// 
INT PALAVRA 
RESERVADA 
Usado para declarar valores inteiros 
MAIN PALAVRA 
RESERVADA 
Representa o programa principal 
( Inicio de parâmetro 
VOID PALAVRA 
RESERVADA 
Parâmetro vazio 
) Fim de parametros 
{ Inicio de função 
a IDENTIFICADOR 
, Separador de variavel 
b IDENTIFICADOR 
c IDENTIFICADOR 
; fim de instrução 
SCANF PALAVRA 
RESERVADA 
Usado para receber uma entrada do usuario 
“ Inicio de string 
% impressão de um valor 
d IDENTIFICADOR 
“ Fim de string 
& Usado para identificar um endereço na memoria 
= IDENTIFICADOR simbolo aritmetico usado para armazenar o resultado 
+ IDENTIFICADOR simbolo aritmetico usado para somar dois numeros 
PRINTF PALAVRA 
RESERVADA 
Usada para impressão de resultados 
\n PALAVRA 
RESERVADA 
Usado para saltar uma linha 
RETURN PALAVRA 
RESERVADA 
Usada para retornar um valor 
0 DIGITO numero 
} final de função 
4. Explique como ocorre o processo de geração da árvore gramatical para o trecho de 
código do exercício anterior. 
A árvore gramatical separa o código em três endereçamentos, simbolos reservados nó a 
nó e abaixo nós filhos de acordo com cada instrução. 
 
 
5. Crie, em linguagem intermediária um programa que some dois valores inteiros. 
 
Reg1 = c 
Reg2 = b + Reg1 
c = Reg2 
 
6. Que tipos de metodologias computacionais são aplicada na 5ª fase de compilação 
para reduzir o código gerado pela 4ª fase? 
 
Otimização pode ocorrer em um número de "níveis": 
Nível de design 
No nível mais alto, o projeto pode ser otimizado para fazer o melhor uso dos recursos 
disponíveis. A implementação deste projeto irá se beneficiar do uso de algoritmos 
eficientes e adequados a implementação destes algoritmos irão beneficiar de escrever 
código de boa qualidade. O projeto arquitetônico de um sistema predominantemente afeta 
seu desempenho. A escolha do algoritmo afeta a eficiência mais do que qualquer outro 
item do projeto. 
Nível de compilação 
O uso de um compilador otimizado tende a assegurar que o programa executável é 
optimizada, pelo menos tanto quanto o compilador pode prever. 
Nível Assembly 
No nível mais baixo, escrevendo código usando uma linguagem de montagem projetado 
para uma plataforma de hardware específico, normalmente, produzem o código mais 
eficiente, pois o programador pode aproveitar o repertório completo de instruções de 
máquina. Os sistemas de operação da maior parte das máquinas tem sido 
tradicionalmente escrito em código Assembler por esta razão. 
Runtime (tempo de execução) 
Apenas compiladores e programadores assembler são capazes de realizar a otimização 
de tempo de execução. 
Em geral, os compiladores usualmente permitem especificar qual o grau de esforço 
desejado no processo de otimização. Por exemplo, em gcc há opções na forma -O... 
que dão essa indicação, desde -O0 (nenhuma otimização) até -O3 (máxima otimização, 
aumentando o tempo de compilação), incluindo também uma opção -Os, indicando que 
o objetivo é reduzir a ocupação de espaço em memória. 
 
7. Quais as principais diferenças das linguagens compiladas para as linguagens 
interpretadas? 
Um compilador transforma o código fonte em um código em que o computador 
entenda. Nas linguagens compiladas o código fonte é todo compilado antes de ser 
executado. Já nas linguagens interpretadas o código fonte é interpretado e executado 
em tempo real.

Outros materiais