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

Lista2e3Compiladores.pdf

Avatar for luccasmaso luccasmaso
February 14, 2012
33

 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.