Você está na página 1de 6

01.

A avaliação de uma linguagem de programação é baseada em critérios sobre os


quais seus recursos são julgados. Descreva de forma objetiva e clara, quais são e
o que significam esses recursos.
Escritabilidade: facilidade da escrita de um programa
Legibilidade​: facilidade da leitura e compreensão
Custo​: custo total do projeto da linguagem além do treinamento, compilação e
execução do programa.
Confiabilidade​: programa se comporta de acordo com as especificações, em
todas as condições.

02. Cite de forma clara e objetiva três razões para se aprender Linguagens de
Programação.
- Aumento da capacidade de expressar ideias;
- Aumento da capacidade de escolhas de linguagens adequadas;
- Aumento da capacidade de aprender novas linguagens de programação;

03. A linguagem pascal usa o ponto e vírgula para separar instruções, enquanto o C
para determinar instruções. Qual destas formas é mais natural e qual tem menos
probabilidade de resultar em erros de sintaxe? Justifique sua resposta.
É mais natural a do pascal pois na nossa linguagem natural o ";" separa itens. E é
mais seguro a do C, pois sempre que encontrar um ";" sabe-se que a instrução
terminou, o que não acontece no pascal.

04. Quais são os métodos de implementação de linguagem de programação? Quais as


vantagens e desvantagens de cada um desses métodos?
Linguagem Compilada​: é aquela cujo programa-fonte é traduzido pelo compilador para
linguagem de máquina, a qual pode ser executada diretamente no computador. Esse
método tem a vantagem de uma execução de programa muito rápida, assim que o processo
de tradução for concluído.[​uma desvantagem está pendente​]
Linguagem Puramente Interpretada​: é aquela cujo programa fonte pode ser interpretado por
outro programa chamado interpretador, sem nenhuma conversão. O interpretador age como
uma simulação de software de uma máquina cujo ciclo buscar-executar lida com instruções
de programa em linguagem de alto nível em vez de instruções de máquina. Essa simulação
de software, evidentemente, fornece uma máquina virtual para a linguagem. Esse método
tem a vantagem de permitir uma fácil implementação de muitas operações de depuração do
código-fonte, porque todas as mensagens de erro em tempo de execução podem referir-se
a unidades do código. Por outro lado, tem uma desvantagem de que a execução do
programa é muito lenta.
Linguagem Hibridamente Interpretada​: é aquela cujo programa em linguagem de alto nível é
traduzido para uma linguagem intermediária projetada para permitir fácil interpretação. Esse
método tem a vantagem de ser mais rápido do que o da interpretação pura. [​uma
desvantagem está pendente]
05. O final da década de 60 e início da década de 70 trouxeram uma análise intensa, em
grande parte iniciada pelo movimento da programação estruturada, tanto do processo de
desenvolvimento de software como do projeto de linguagens de programação. qual a
principal razão para este estudo e como ele se desenvolveu?
Slide 1 do Vieira: Aumento do custo do software e diminuição do custo do hardware;
Mudança do paradigma orientado a processo para o orientado a dados.

06. Considere a seguinte gramática:

a) Faça o gráfico sintático desta gramatica;

b) Verifique a instrução ​C = ((B + C )*(A+ B)), pertence ou não a esta


gramática
<atbr> -> <id> = <exp>
-> C = <exp>
-> C = <termo>
-> C = <fator>
-> C = (<exp>)
-> C = (<exp> * <termo>)
-> C = (<termo> * <termo>)
-> C = (<fator> * <termo>)
-> C = ((<exp>) * <termo>)
-> C = ((<termo>) * <termo>)
-> C = ((<termo> + <fator>) * <termo>)
-> C = ((<fator> + <fator>) * <termo>)
-> C = ((<id> + <fator>) * <termo>)
-> C = ((B + <fator>) * <termo>)
-> C = ((B + <id>) * <termo>)
-> C = ((B + C) * <termo>)
-> C = ((B + C) * <fator>)
-> C = ((B + C) * (<exp>))
-> C = ((B + C) * (<termo>))
-> C = ((B + C) * (<termo> + <fator>))
-> C = ((B + C) * (<fator> + <fator>))
-> C = ((B + C) * (<id> + <fator>))
-> C = ((B + C) * (A + <fator>))
-> C = ((B + C) * (A + <id>))
-> ​C = ((B + C) * (A + B)); portanto, pertence.

c) Faça a arvore sintática para a instrução A = B + (A * C), se for possível.

d) Qual a ordem de precedência e de associatividade das operações + e *


nesta gramatica? Justifique.
Verificar recursividade da gramática.

07. Nas linguagens Java e C as variáveis locais são assumidas como dinâmicas na
pilha. Em relação a elas responda.
a) Quais as vantagens e desvantagens?
#Variável estática
*Vantagens
- eficiência (enderaçamento direto);
- sensibilidade à história;
*Desvantagem:
- redução da flexibilidade
- não permite recursão
- não permite compartilhamento
#Variável dinâmica
*Vantagens:
- permite recursão;
- permite compartilhamento;
*Desvantagens:
- Overhead de alocação e liberação;
- Subprogramas não retém suas histórias;
- Referência ineficiente (endereçamento indireto).

b) De que forma a vinculação ao armazenamento destas variáveis é feita?


A vinculação de variáveis estáticas é feita em tempo de compilação antes
de executar e a dinâmica em tempo de execução, quando o programa
encontra a declaração da variável.

07. Considere o seguinte programa em Pascal:


0 Programa main:
1 var x: Integer;
2 procedure sub3; forward;
3 procedure sub1;
4 var x: Integer;
5 procedure sub2;
6 begin {sub2}
7 …x…
8 end; {sub2}
9 begin {sub1}
10 …x…
11 end {sub1}
12 procedure sub3;
13 begin {sub3}
14 …x…
15 end {sub3}
16 begin {main}
17 …
18 end {main}
Suponha que a execução deste programa obedeça a seguinte ordem: main chama sub1;
sub1 chama sub2 e sub2 chama sub3. Neste caso, responda:

a) Supondo que esta linguagem usa escopo estático, a que declarações de x correspondem
os acessos a x em sub1, em sub2 e em sub3?
O acesso a x da linha 7 é correspondente ao x de sub1;
O acesso a x da linha 10 é correspondente ao x de sub1;
O acesso a x da linha 14 é correspondente ao x de main;

b) Supondo agora que esta linguagem usa escopo dinâmico, a que declarações de x
correspondem os acessos a x em sub1, em sub2 e em sub3?
O acesso a x da linha 7 é correspondente ao x de sub1;
O acesso a x da linha 10 é correspondente ao x de sub1;
O acesso a x da linha 14 é correspondente ao x de sub2 que é o x de sub1;

c) Descreva de forma clara e objetiva, três problemas ligados ao escopo estático.


redução da flexibilidade - não permite recursão - não compartilhamento.

d) Descreva de forma clara e objetiva, três problemas ligados ao escopo dinâmico.


Overhead de alocação e liberação - Subprogramas não retém suas histórias - Referência
ineficiente (end. indireto)

08. “As regras de escopo dinâmico tornam as programas mais confiáveis, mas apresentam
menor desempenho”. Está certo ou errado? Justifique.
Errado ao falar que torna mais confiavel, ja que o escopo dinamico impossibilita verificar
tipos das referencias a nao locais estaticamente e dificulta a leitura dos programas.

09. Em relação aos tipos de armazenamento:


a) Que vantagens e desvantagens as variaveis estaticas tem sobre as outras?
Vantagens: eficiência, endereçamento pode ser direto, e não sobrecarrega a execução com
alocação e liberação.
Desvantagens: reduz a flexibilidade, e o armazenamento não pode ser compartilhado.

b) Que desvantagens e desvantagens as variáveis dinâmicas na pilha apresentam?


Vantagens: suporte a programas recursivos.
Desvantagens: sobrecarga em tempo de execução da alocação e liberação, endereçamento
indireto (acesso mais lento) e nao sensíveis à história.

c) Que vantagens e desvantagens as variáveis dinâmicas explícitas na heap tem sobre as


outras?
Vantagens: ajuda construir estruturas dinâmicas, como lista ligadas e árvores.
Desvantagens: dificuldade de usar ponteiros e variáveis de referência corretamente, custo
de referência as variáveis e a complexidade do gerenciamento de armazenamento.
d) Que vantagens e desvantagens as variáveis dinâmicas implícitas na heap tem sobre as
outras?
Vantagens: alto grau de flexibilidade, permitindo códigos genéricos serem escritos.
Desvantagens: sobrecarga em tempo de execução para manter todos os atributos
dinâmicos, e perda na detecção de erros.

Você também pode gostar