Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Lista2e3Compiladores.pdf

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for luccasmaso luccasmaso
February 14, 2012
36

 Lista2e3Compiladores.pdf

Avatar for luccasmaso

luccasmaso

February 14, 2012
Tweet

Transcript

  1. UFSC – CTC – INE INE5622 – INTRODUÇÃO A COMPILADORES

    LISTA DE EXERCÍCIOS N 2 (10/2) O Peko passou alguns links: Implementação Léxica: http://www.inf.ufsc.br/~adriana/fase_06/ic/GALS_LSI-081.pdf Mais Materiais: http://www.inf.ufsc.br/~adriana/fase_06/ic/ Comentário em bloco: http://ostermiller.org/findcomment.html Added: Possível resposta ( Lista 2 - 9 ) i ). Mini sumário Sumário Lista 2 Lista 3 Lista 2 1) Construa um A. F. M | a. T(M) = { an bm ck | n,m,k 0 (n + k) seja ímpar m seja par} E.R: (a(aa)* (bb)* (cc)*) | ( (aa)* (bb)* c(cc)*) E.R: (aa)* ((a(bb)*)|(bb)*c) (cc)* Não gera x = acc a) | a b c *q0 | q3 q4 q7 *q1 | -- q4 q7 *q2 | -- -- q7 ->q3 | q0 q5 q2 q4 | -- q1 -- q5 | -- q6 -- q6 | -- q5 q2 q7 | -- -- q2
  2. b. T(M) = { x | x (1,2,3)* o Σ

    dos elementos de x seja divisível por 43} obs: Σ = somatório obs2: quem botou “divisivel por 3?”, porque? na lista ta 4 ... obs3: o olinto que disse pra mudar Se for divisível por 4 b) | 1 2 3 *->q0 | q1 q2 q3 q1 | q2 q3 q0 q2 | q3 q0 q1 q3 | q0 q1 q2 c. T(M) = { x | x (a, b, c)* x não possui os substrings “ab” e “bc”}. E.R: c* ((a+c+)*(b+a+c+)*) | (a+(a*c+((a+)|(b+a+))*)) | (b+(a+(a*c+a+)*(c+b+))*) outra opcao? E.R = c* (a+ | a+c | b+ | b+a+ | b+a+c+)? Não gera x= cacc c) | a b c
  3. *->q0 | q1 q2 q0 *q1 | q1 -- q0

    *q2 | q1 q2 -- d. T(M) = { x | x (a, b, c)* todos os a’s estejam em posições pares de x} (OBS. O primeiro elemento ocupa uma posição ímpar em x) E.R: ( ((b|c)a) | (b|c)(b|c) )* Não gera x=bbb E.R: ( (b|c)(b|c|a))* | (b|c((b|c|a)(b|c))* ) d) | a b c *->q0 | -- q1 q1 *q1 | q0 q0 q0 e. T(M) seja um comentário na linguagem PASCAL - inicia com “(*” e termina com “*)”, podendo ter qualquer seqüência de caracteres no seu interior (inclusive “*” e “)” ). e) | ( * a b ) ->q0 | q1 -- -- -- -- q1 | -- q2 -- -- -- q2 | q2 q3 q2 q2 q2 q3 | q2 q3 q2 q2 q4 *q4 | -- -- -- -- --
  4. f. T(M) = { an (b, c)* | n 0

    n+#c’s é par e não existem b’s consecutivos} f) | a b c *->q0| q3 q2 q4 *q1 | -- q2 q4 *q2 | -- -- q4 q3 | q0 q5 q1 q4 | -- q5 q1 q5 | -- -- q1 2) Construa a G.R. correspondente a dois dos A.F. obtidos no item anterior. 1c) | a b c *->q0 | q1 q2 q0 *q1 | q1 -- q0 *q2 | q1 q2 -- 0’->a1| a| b2| b| c0| c| e 0-> a1| a| b2| b| c0| c
  5. 1-> a1| a| c0| c 2-> a1| a| b2| b

    1d) | a b c *->q0 | -- q1 q1 *q1 | q0 q0 q0 0’-> b1| b| c1| c| e 0-> b1| b| c1| c 1-> a0| a| b0| b| c0| c 3) Seja G seguinte G.R. : S -> aS | aC | bA | b | cD | c | dC A -> bS | aA | a | aD | dD | d C -> dC | cD | c D -> dD | cC | d Pede-se: a) M | T(M) = L(G) b) Determinize e Minimize M c) Determine T(M) | a b c d * q 0 | q2 q3 -- q1 *q1 | -- -- q4 q1 *q2 | q2 q3 q4 q1 ->q3 | q3 q0 q1 q4 q4 | -- -- q1 q4 3-> a3| b0| b| c1| c| d4 4-> c1| c| d4 0-> a2| a| b3| d1| d 1-> c4| d1| d 2-> a2| a| b3| c4| d1| d T(M) ={ x|x E (a,b)* (c,d)* ^ b+c = ímpar ^ Não exista a seq. (bn c) | n seja ímpar } 4) Minimize os seguintes A.F. e determine a Linguagem aceita por eles: a) a b b) a b * S B,C A,D * S A B A B A A S C,E B A B *B A,C - C C D C B -
  6. D D C *D E - E D,S - a)

    | a b *->q0| q0 q0 T(M) = {x| x E (a,b)*} b) | a b *->q0| q2 q1 *q1 | q2 -- q2 | q0 q3 q3 | q0 -- T(M) = {(a,b)* ^#a’s é par e n exista bs consecutivos} como se elimina os equivalentes em a)? após determinizado, todos os estados sao finais e nao tem transicao para erro ... todos os estados da letra (a) são equivalentes; c) a b * S A,E B,F * A D B * B A C * C E C D D F E - C F D - c) | a b *->q0| q1 q2 *q1 | q3 q2 *q2 | q1 q4 *q3 | q3 q5 *q4 | q6 q4 *q5 | q3 -- *q6 | -- q4 T(M) = {x | x E (a,b)* ^ não exista a seq aabb nem bbaa } 5) Construa a E.R. correspondente aos seguintes C.R.: a. { x | x (a, b, c)* todos os b’s de x sejam consecutivos x não possui a’s consecutivos } a?(c+a?)* b* (b+ ( a?(c+a?)* ) )? outra opcao: (a?c)* ab? b* (a?c)*a?
  7. essa aí gera um ‘a’ obrigatoriamente... Também pensei quando vi,

    mas ab = a.b = (ab) logo, ? é para os dois b. { x | x (a, b) + # a’s é par e # b’s é par} ( ((ab|ba)(aa|bb)*(ab|ba)) | (aa|bb) )+ c. { an bm | n,m 0 (n*m) é ímpar} a(aa)*b(bb)* d. { x | x (l, d, _, @)+ | x começa com “l” ou “@”, não possui “_ _”, não termina com “@” e não termina com “_”} L | ( (L|@) ( _? (L|D|@) )* _? (L|D) ) 6) Construa um A.F. correspondente a 2 das E.R. obtidas no item anterior. não sei se é A.F.M. 5a) | a b c *->q0 | q1 q2 q0 *q1 | -- q2 q0 *q2 | q4 q2 q3 *q3 | q4 -- q3 *q4 | -- -- q3 não sei se é A.F.M. 5c) | a b ->q0 | q1 -- q1 | q2 q3 q2 | q1 -- *q3 | -- q4 q4 | -- q3 5b) 7 ) a)Construa o AF M´ que represente o complemento de M definido por:. a b q0 q1 q3 * q1 q0,q2 q4 q2 q1 q5 q3 q1 - *q4 q0 - q5 q1 - Minimizada Complemento
  8. a) | a b *q0 | q2 q1 *q1 |

    q2 -- ->q2| q0 q3 q3 | q0 -- -- | -- -- a) | a b q0 | q2 q1 q1 | q2 E *->q2| q0 q3 *q3 | q0 E *E | E E T(M) = {x|xE(a,b)* ^ #a’s é impar e n existem bs consecutivos} T(M’) = {x|xE(a,b)* ^ #a’s par ^ bs consecutivos com #a’s par ou impar No complemento não deveria ter b’s consecutivos? Tem! Olha ali. ^ bs consecutivos com #a’s par ou impar -- é um estado, mudei pra E para ficar melhor entendível. b) T(M’) seja o complemento da seguinte LR : Abre parênteses “ T(M) é a Linguagem Aceita por M É o conjunto de todas as sentenças aceitas por M. Formalmente, definimos por: T(M) = {x | (qo, x) = p p F}” L = { x | x (a, b)* # a’s + #b’s é ímpar ^ divisível por 3} | a b *->q0 | q1 q1 *q1 | q2 q2 *q2 | q3 q3 q3 | q1 q1 T(M’) = { x | x (a, b)* # a’s + #b’s é (ímpar ^ não divisível por 3) ou par } 8) Construa a ER, a GR e o AFD Mínimo que representem a seguinte LR: { x | x (0, 1)+ o antepenúltimo símbolo de x seja “1”} Considerações da solução enviada para a lista sin81 0 1 Alc -> S S A X A E B X B C D X *C F G X *D E D X E F G X *F S A X *G E B X Se fizer:
  9. S- 1A+1B+*1D+OE 1110 não sei o E deveria ser estado

    final... essa gramatica nao foi feita em cima de uma lógica, então é grande a chance de ter algo errado essa aqui resolve, mas poderia ter uns 10 estados a menos Reply: Verdade tem muitos estados. Parece estar ok, só falta minimizar então. # GR S-> 0X | 1Y X-> 0S | 1Y Y-> OZ | 1Q Z-> 0 | 1 | 0S | 1Y Q-> 0 | 1 | 0Z | 1Q AFND ->S-> X Y X-> S Y Y-> Z Q Z-> [A,S] [A,Y] Q-> [A,Z] [A,Q] *A -> - - AF ALC|ViVo AFD M
  10. ->S-> X Y | X | X X-> S Y

    | X | X Y-> Z Q | X | X Z-> [AS] [AY] | X | X Q-> [AZ] [AQ] | X | X *[AS]-> X Y | X | X *[AY]-> Z Q | X | X *[AZ]-> [AS] [AY] | X | X *[AQ]->[AZ] [AQ] | X | X ____ 0 1 *q0 q4 q5 *q1 q6 q7 *q2 q0 q1 *q3 q2 q3 ->q4 q4 q5 q5 q6 q7 q6 q0 q1 q7 q2 q3 CE F K-F 1) { AS, AY, AZ, AQ }0 { S, X, Y, Z, Q }1 2) { AS, AY,} 0 { AZ, AQ }1 { S, X,Y }2 { Z,Q }3 3) { AS }0 { AY }1 { AZ }2 { AQ }3 { S, X }4 { Y }5 { Z }6 { Q }7 4) *{ AS }0 *{ AY }1 *{ AZ }2 *{ AQ }3 ->{ S, X }4 { Y }5 { Z }6 { Q }7 ER (0|1)* 1 (0|1) (0|1) 9 ) Você deve saber ... a) Mostrar a Equivalência entre CR, ER, GR e AF; b) Vantagens e desvantagens dos AFD e AFND; c) Reconhecer sentenças em AFD e AFND;
  11. d) Se um AFD é ou não mínimo e como

    minimizá-lo; e) Porque estados finais não podem ser equivalentes a estados não-finais; f) Como especificar (mecanismos?) e implementar (estratégias?) aspectos léxicos de linguagens de Programação; g) Razões que motivam o estudo de Linguagens de Programação; h) Principais critérios e características usados no projeto e na avaliação de Linguagens de Programação. added: i) Qual a L mais importante quando se trata do processo de compilação de linguagens de programação, e por que ela é considerada como tal? O aspecto central do processo de compilação é a análise sintática, tudo demais que ocorre no processo de compilação depende da análise sintática. • As GR apesar de serem mais eficientes elas não tem o poder de expressão para representar sintáticamente uma linguagem. • As GSC embora mais abrangentes que as GLC são muito caras. • As GLC não são tão restritas como as GR e também não tão caras quanto as GSC. Logo a gramática utilizada para a análise sintática é a gramática livre de contexto e como a análise sintática é o core, digamos assim, da compilação, podemos considerar a GLC como a G mais importante na compição de linguagens de programação. Audio 17 após 12 min 10) Aplique os algoritmos FIRST e FOLLOW para as seguintes Gs e qual a linguagem gerada. a) S-> Ab | ABc B-> bB | Ad | E A-> aA | E FIRST first(S)-> {a,b,c,d} first(B)-> {a,b,d,E} first(A)-> {a,E} FOLLOW follow(S)-> {$} follow(A)-> {b,a,d,c} follow(B)-> {c} b) S-> ABC A-> aA | E B-> bB | ACd C-> cC | E FIRST first(S)-> {a,b,c,d} first(A)-> {a,E} FOLLOW follow(S)-> {$} follow(A)-> {a,b,c,d}
  12. 3) Existe GR ambígua? Sim Existe Linguagem finita inerentemente ambígua?

    Não Se sim, exemplifique, senão justifique. 4) Elimine as RECURSÕES À ESQUERDA das seguintes G.L.C.:
  13. a) E->E+T | E-T | T T->T* F | F

    | T/F F->F** P | P P->(E) | id | cte E->TE’ E’->+TE’|-TE’|e T->FT’ T’->*FT’|/FT’|e F->PF’ F’->**PF’|e P->(E) | id | cte b) S->Bc | Sc B->Bb|Ab A-> Aa | As | a S->BcS’ S’->cS’|e B->AbB’ B’->bB’|e A-> aS’ S’-> aS’|sS’|e 5) FATORE às seguintes G.L.C.: a) S->bcD | Bcd B->bB | e D->dD | e S-> bS’ | cd S’-> cS’’ | bBcd S’’-> dS’’’ | e S’’’-> dD | e B-> bB | e D-> dD | e S-> bS’|cd S’->cD|bBcd B-> bB|e D->dD|e b)P-> DL | L D-> dD | e L-> L; C | C V-> id [E] | id C-> V=exp | id (E) E-> exp, E | exp Retirar RE L-> CL’ L’->;CL’|e P->dDL | L D->dD | e L->CL’ L’->;CL’| e V->idV’ V’->[E] | e C->idC’ C’->V’=exp| (E) E->expE’ E’->,E | e 6 – a) Esquematize as classes de analisadores sintáticos e comente as vantagens e desvantagens das implementações com e sem back-track. b) Quais as vantagens de se especificar formalmente a sintaxe de Ling. de Programação?
  14. first(V)={v,E} first(L)={com,E} first(L’)={com,E} first(C)={com,E} follow(V)={com,e,$} follow(L)={e,$} follow(L’)={e,$} follow(C)={com,e,$} first (intersec.)

    follow = {com} Não é possível efetuar uma análise sintática através do LL(1), pois a G apresenta como intersecção do Fi^Fo={com} e não (vazio). Caso eu tenta implementar o analisador, eu poderia implementar apenas um único caminho para o procedimento C.