Você está na página 1de 3

Lista de Exerccios

1) Qual a desvantagem de haver demasiados recursos em uma


linguagem?
Linguagens muito complexas tendem a ter um custo de implementacao muito alto como
tambem o custo de aprendizado/treinamento dos programadores.
2) Descreva os trs mtodos gerais para implementar uma linguagem de
programao.
Compilao: Em um caso extremo, programas podem ser traduzidos para linguagem de
maquina. Tem a vantagem de uma execucao de programa muito rapida assim que o
processo de traducao for concluido. No entanto o processo de traducao pode ser lento. A
otimizacao que pode tornar os programas menores ou mais rapidos e uma parte opcional
da compilacao.
Interpretao: Na extremidade oposta dos metodos de implementacao, os programas
podem ser interpretados por outro programa chamado interpretador, sem nenhuma
conversao. Possui a vantagem de permitir uma facil implementacao de programas (erros
de execucao podem ser facilmente e rapidamente mostrados). Porem sua execucao e
mais lenta (10 a 100 vezes) que programas compilados devido a decodificacao das
instrucoes de linguagem de alto nivel. Outra desvantagem e que geralmente requer mais
espaco. Interpretacao pura deve ser utilizada em linguagens que nao possuam grande
complexidade.
Hbrido: E um meio termo entre compilador e interpretador puro, onde um programa
de linguagem de alto nivel e traduzido para uma linguagem intermediaria que permite
facil interpretacao.
3) Escreva uma EBNF para uma instruo de chamada a um mtodo Java.
<chamada_metodo> -> [<identificador>.]<identificador> ( [{ <parametro> ,}
<parametro>] )
<parametro> -> <valor> | <identificador>
<identificador> -> a | b | c ...
<valor> -> 1 | 2 | 3 ...
4) Escreva uma EBNF para uma instruo de cabealho(header) para
definio de uma classe Java.
<classe> -> [ <permissao>] [<modificador>] class <identificador> [extends
<identificador>] [implements <identificador> { , <identificador> }] { }
<permissao> -> public | private | protected
<modificador> -> abstract | final
<identificador> -> a | b | c ...
5) Prove que a seguinte gramtica ambgua.
<S> -> <A>
<A> -> <A> + <A> | <id>
<id> -> a | b | c
A prova pode ser feita mostrando duas arvores de analise que gerem uma mesma cadeia.
Ex.: a + b + c
1)
<S>
<A>
<A > + <A>
<A> + <A> <id>
<id> <id> c
a
b

2)
<S>
<A>
<A> + <A>
<id> <A> + <A>
a <id> <id>
b
c
6) Apresente uma definio semntica operacional dos seguintes
cdigos:
A) IF-THEN-ELSE do C
if expressao = 0 goto else;
instrues...;
goto saida;
else: instrues...;
saida: instrues...;
B) FOR do C
expressao1;
loop: if expressao2 = 0 goto saida;
instrues ;
expressao3;
goto loop;
saida: instrues...;
7) Escreva a funo de correspondncia da semntica denotacional para
as seguintes instrues:
A) Nmeros binrios
Mbin(0) = 0;
Mbin(1) = 1;
Mbin(<num_bin> 0) = 2 * Mbin(<num_bin>)
Mbin(<num_bin> 1) = 2 * Mbin(<num_bin>) + 1
B) WHILE do C
Admitindo-se as funcoes Msl que relaciona listas de instrucoes com estados e Mb que
relaciona expressoes booleanas com valores boleanos (ou error):
Ml(while B do L, s) =
if Mb(B, s) = undef
then error
else if Mb(B, s) = false
then s
else if Msl(L,s) = error
then error
else
Ml(while B do L, Msl(L, s))
8) De qual maneira a semantica operacional e a semntica denotacional
diferem?
Na semantica operacional, as mudancas de estados sao definidas por algoritmos
codificados.
Na semantica denotacional, as mudancas de estados sao definidas por funes
matemticas.
9) Compute a pr-condio mais fraca para cada uma das seguintes
sequencias de instrues de atribuio e suas ps-condies :
A) a = 3 * (2 * b + a)

b=2*a1
{b > 5}
{2b + a > 1}
B) while y <> x do
y=y+1
end
{y = x}
{y <= x}

Você também pode gostar