Universidade Federal de Santa Catarina – UFSC Centro Tecnológico – CTC Departamento de Informática e Estatística – INE Linguagens Formais e Compiladores – INE5317 Professor Ricardo Silveira Azambuja Alunos: Gustavo Henrique Nihei Léo Willian Kölln 0513222-3 0513227-4 Lista de Exercícios n.º 2 1. Construir GLCs e autômatos de pilha para as seguintes linguagens: a) L={ w|w possui aaa como subpalavra} G = ({S, A}, {a, b}, P, S) P: S → aaa | AaaaS | aaaAS A → aA | bA | ε Autômato de Pilha: M = ({a, b}, {q0, qf}, F, q0, {qf}, {1, 2, 3}) F(q0, a, ε) = {(q0, 1)} F(q0, a, 1) = {(q0, 2)} F(q0, a, 2) = {(q0, 3)} F(q0, b, ε) = {(q0, ε)} F(q1, ?, 3) = {(qf, ε)} b) L={uanvanw | n ∈ {1,2}, u, v, w são palavras de {a,b}* e |u| = |v| = 5} G = ({S, A, B, C, D, U, W}, {a, b}, P, S) P: S → UaUaW | UaaUaaW U → aA | bA A → aB | bB B → aC | bC C → aD | bD D→a|b W → aW | bW | ε Autômato de Pilha: M = ({a, b}, {q0, q1, q2, q3, q4, qf}, F, q0, {qf}, {1, 2, 3, 4, 5, X}) F(q0, ε, ε) = {(q1, 5)} F(q1, a, 5) = {(q1, 4)} F(q1, a, 4) = {(q1, 3)} F(q1, a, 3) = {(q1, 2)} F(q1, a, 2) = {(q1, 1)} F(q1, a, 1) = {(q1, ε)} F(q1, b, 5) = {(q1, 4)} F(q1, b, 4) = {(q1, 3)} F(q1, b, 3) = {(q1, 2)} F(q1, b, 2) = {(q1, 1)} F(q1, b, 1) = {(q1, ε)} F(q1, a, ?) = {(q2, X)} F(q2, a, ε) = {(q3, X)} F(q3, a, ε) = {(q3, 5)} F(q3, a, 5) = {(q3, 4)} F(q3, a, 4) = {(q3, 3)} F(q3, a, 3) = {(q3, 2)} F(q3, a, 2) = {(q3, ε)} F(q3, b, ε) = {(q3, 5)} F(q3, b, 5) = {(q3, 4)} F(q3, b, 4) = {(q3, 3)} F(q3, b, 3) = {(q3, 2)} F(q3, b, 2) = {(q3, ε)} F(q3, a, X) = {(q4, ε)} F(q4, a, X) = {(q4, ε)} F(q4, ε, ?) = {(qf, ε)} F(qf, a, ε) = {(qf, ε)} F(qf, b, ε) = {(qf, ε)} c) L={w|w é expressão regular sobre alfabeto {x}} G = ({S}, {(,+, *, ), x}, P, S) P: S → Sx | S+S | S* | (S) | ε Autômato de Pilha: M = ({(, +, *, ), x}, {q0, q1, qf}, F, q0, {qf}, {X, P}) F(q0, x, ε) = {(q0, X)} F(q0, (, ε) = {(q0, P)} F(q0, +, X) = {(q0, X)} F(q0, *, X) = {(q0, ε)} F(q0, x, ε) = {(q1, ε)} F(q0, ε, ε) = {(q1, ε)} F(q1, x, X) = {(q1, ε)} F(q1, ), P) = {(q1, ε)} F(q1, ?, ?) = {(qf, ε)} 2. Obtenha autômatos de pilha que reconheçam as seguintes linguagens: a) L={anb2ncmdm+2 | n é maior ou igual a zero e m é maior ou igual a 1} G = ({S, A, B, C}, {a, b, c, d}, P, S) P: S → Abdd A → aAbb | ε B → cCd C → cCd | ε M = ({a, b, c, d}, {q0, q1, q2, q3, q4, qf}, F, q0, {qf}, {A, B}) F(q0, a, ε) = {(q0, A)} F(q0, ε, ε) = {(q1, ε)} F(q1, b, A) = {(q1, B)} F(q1, b, B) = {(q1, ε)} F(q1, ε, ?) = {(q2, ε)} F(q2, c, ε) = {(q2, A)} F(q2, ε, A) = {(q3, A)} F(q3, d, A) = {(q3, ε)} F(q3, ε, ε) = {(q4, ε)} F(q4, d, ε) = {(q4, B)} F(q4, d, B) = {(q4, ε)} F(q4, ?, ?) = {(qf, ε)} b) L={aibnci | i > 0, n é maior ou igual a 1} G = ({S, A, B}, {a, b, c}, P, S) P: S → aSc | A A → bB B → bB | ε M = ({a, b, c}, {q0, q1, q2, qf}, F, q0, {qf}, {X, A, B}) F(q0, a, ε) = {(q0, X)} F(q0, ε, ε) = {(q1, A)} F(q1, b, A) = {(q1, B)} F(q1, b, B) = {(q1, B)} F(q1, ε, B) = {(q2, ε)} F(q2, c, X) = {(q2, ε)} F(q2, ?, ?) = {(qf, ε)} 3. Construa os autômatos de pilha equivalentes as gramáticas abaixo: a) G = ({S, B, C}, {a, b}, P, S) P: S → aB | aC B → aBC | aCC | b C → bB M = ({a, b}, {q0, q1, qf}, F, q0, {qf}, {S, B, C}) F(q0, ε, ε) = {(q1, S)} F(q1, a, S) = {(q1, B)} F(q1, a, S) = {(q1, C)} F(q1, a, B) = {(q1, BC)} F(q1, a, B) = {(q1, CC)} F(q1, b, B) = {(q1, ε)} F(q1, b, C) = {(q1, B)} F(q1, ?, ?) = {(qf, ε)} b) G = ({E,T,P}, {(,a,t,+,*,-,?,), P, E) P: E → (EP | at | a T → +E | *E| -E | /E P→) Gramática simplificada na FNG: G = ({E, P}, {(, a, t, )}, P, E) P: E → (EP | aB | a B→t P→) M = ({(, a, t, )}, {q0, q1, qf}, F, q0, {qf}, {S, B, P}) F(q0, e, e) = {(q1, S)} F(q1, (, S) = {(q1, SP)} F(q1, a, S) = {(q1, B)} F(q1, a, S) = {(q1, ε)} F(q1, t, B) = {(q1, ε)} F(q1, ), P) = {(q1, ε)} F(q1, ?, ?) = {(qf, ε)} 4. Para a gramática: G = ({S, A}, {a, b}, P, S) P: S → bAS | a A → SaA | SS | ab a) obtenha a árvore de derivação de sentença “bbabaaabbaba” b) descreva qual a linguagem gerada pela gramática L = {w | w ∈ {a,b}* e a quantidade de a's é maior ou igual a quantidade de b's. Além disso, a palavra ou é iniciada com b, ou |w| = 1} c) obtenha as árvores de derivação para outras sentenças quaisquer bbbbabaaaaaaaba 5. Eliminar símbolos inúteis, produções simples, recursão à esquerda da gramática: G = ({S, A, B, C}, {a, b, c}, P, S) P: S → aBa | A A → aA | a | B | Sa B → bB | b | C C → cC | abC * Símbolos Inúteis Não há símbolos inúteis * Produções Simples P': S → aBa | aA | a | Sa | bB | b | cC | abC A → aA | a | Sa | bB | b | cC | abC B → bB | b | cC | abC C → cC | abC * Recursões à Esquerda P'': A1 → aA3a | aA2 | a | bA3 | b | cA4 | abA4 | aA3aB | aA2B | aB | bA3B | bB | cA4B | abA4B B → a | aB A2 → aA2 | a | bA3 | b | cA4 | abA4 | aA3aa | aA2 | aa | bA3a | ba | cA4a | abA4a | aA3aBa | aA2Ba | aBa | bA3Ba | bBa | cA4Ba | abA4Ba A3 → bA3 | b | cA4 | abA4 A4 → cA4 | abA4 G = ({A1, A2, A3, A4, B}, {a, b, c}, P'', A1) 6. Colocar a GLC nas formas normais de Chomsky e Greibach: G = ({S, A, B}, {a, b, c}, P, S) P: S → AB A → aBc | a B → bSa | b * Chomsky GFNC = ({S, A, A1, B, B1, X, Z}, {a, b, c}, PFNC, S) PFNC: S → AB A → XA1 | a A1 → BZ B → YB1 | b B1 → SX X→a Z→c * Greibach GFNG = ({A1, A2, A3, B, C, D}, {a, b, c}, PFNG, A1) PFNG: A1 → aA3B | aA3 A2 → aA3C | a A3 → bA1D | b B → cA3 C→c D→a 7. Considerando a GLC a seguir: G = ({S, A, B, C}, {a, b}, P, S) P: S → A | B | AB A → aB | bS | b B → bB | Ba | c C → AS | AB | b a) Eliminar símbolos inúteis. Não há símbolos inúteis. b) Eliminar produções simples da gramática obtida no item anterior. G = ({S, A, B, C}, {a, b, c}, P', S) P': S → aB | bS | b | bB | Ba | c | AB A → aB | bS | b B → bB | Ba | c C → AS | AB | b c) Eliminar recursão à esquerda da gramática do item b. G = ({A1, A2, A3, B, A4}, {a, b, c}, P'', A1) P'': A1 → aA3 | bA1 | b | bA3 | A3a | c | A2A3 A2 → aA3 | bA1 | b A3 → bA3 | c | bA3B | cB B → a | aB A4 → aA3A1 | bA1A1 | bA1 | aA3A3 | bA1A3 | bA3 | b d) Colocar na FNC GFNC = ({S, A, B, C, X, Y, Z}, {a, b, c}, PFNC, S) PFNC: S → XB | YS | b | YB | BX | c | AB A → XB | YS | b B → YB | BX | c C → AS | AB | b X→a Y→b Z→c e) Colocar na FNG GFNG = ({A1, A2, A3, A4, B, X}, {a, b, c}, PFNG, A1) PFNG: A1 → aA3 | bA1 | b | bA3 | c | bA3X | cX | bA3BX | cBX | aA3A3 | bA1A3 | bA3 A2 → aA3 | bA1 | b A3 → bA3 | c | bA3B | cB B → a | aB A4 → aA3A1 | bA1A1 | bA1 | aA3A3 | bA1A3 | bA3 | b X→a 8. Simplificar a gramática: G = ({S, A, B, C}, {a, b, c}, P, S) P: S → aA | aB | C A → CA | a B → bB | bC C → aC | c G = ({S, A, B, C}, {a, b, c}, P', S) P': S → aA | bB | aC | c A → CA | a B → bB | bC C → aC | c