Ybadoo - Soluções em Software Livre
Turmas
2º Semestre de 2016

Questão 01

Quando se consideram linguagens especificadas através de gramáticas livres de contexto, deve-se também considerar de que forma é feita a aceitação sintática de suas sentenças para fins de compilação e/ou interpretação. Quando se trata de efetuar o reconhecimento de sentenças, o que se busca, na verdade, é localizar uma sequência de produções que, quando aplicada à raiz da gramática, forneça como resultado, através da série correspondente de derivações, a sentença fornecida para análise. Sendo possível completar a derivação, diz-se que a sentença pertence à linguagem; caso contrário, que ela não pertence à linguagem.

Por exemplo, a derivação da sentença a + a sobre a gramática livre de contexto G1 pode produzir a sequência de derivação E ⇒ T + E ⇒ F + E ⇒ F + T ⇒ a + T ⇒ a + F ⇒ a + a, no qual foram aplicadas seis produções, sendo elas (1), (4), (2), (6), (4), (6).

G1 = ({E, T, F}, {a, +, *, (, )}, P1, E)
P1 = {ET + E (1)
ET (2)
TF * T (3)
TF (4)
F → ( E ) (5)
FA } (6)

Conforme exposto, para o reconhecimento da sentença abcdac sobre a gramática livre de contexto G2 é necessário a aplicação de quantas produções?

G2 = ({S, A, B, C}, {a, b, c, d}, P2, S)
P2 = {SABC
A → aA | ε
B → bB | CdA
C → cC | ε}

a. 10 produções

b. 11 produções

c. 12 produções

d. 13 produções

e. 14 produções

Questão 02

A característica que torna as gramáticas livres do contexto especialmente adequadas à formalização sintática das linguagens de programação é a sua capacidade de representação de construções aninhadas, que são frequentemente encontradas em linguagens dessa categoria. Construções aninhadas costumam ocorrer em linguagens de programação, por exemplo, na construção de expressões aritméticas, em que subexpressões são delimitadas, através do uso de parênteses; na estruturação do fluxo de controle, em que comandos internos são inseridos como parte integrante de outros externos; na estruturação do programa, em que blocos, módulos, procedimentos e funções são empregados para criar diferentes escopos.

Uma expressão numérica é composta por parênteses ( ), colchetes [ ], chaves { }, números e os símbolos de operação. Entre os parênteses, colchetes e chaves, primeiro resolvemos a parte interna dos parênteses, em seguida os colchetes e, logo após, as chaves. Entre os símbolos de operação, primeiro resolvemos a multiplicação * e/ou divisão /, e logo após, a adição + e/ou subtração -.

Conforme exposto, desenvolva uma gramática livre de contexto, não ambígua, que reconheça expressões numéricas, como por exemplo 25 + {14 - [25 * 4 + 40 - (20 / 2 + 10)]}.

G = ({A, B, C, D, E, F, G, H, I, J, K, N, X}, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, *, /, {, }, [, ], (, )}, P, A)
P = {AA + B | A - B | B
BB * C | B / C | C
C → { D } | N
DD + E | D - E | E
EE * F | E / F | F
F → [ G ] | N
GG + H | G - H | H
HH * I | H / I | I
I → ( J ) | N
JJ + K | J - K | J
KK * N | K / N | N
NNX | X
X → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}

Questão 03

Uma gramática livre de contexto é dita normalizada em relação a um certo padrão quando todas as suas produções seguem as restrições impostas pelo padrão em questão. É comum designar tais padrões como formas normais. Por exemplo, diz-se que uma gramática G = (V, Σ, P, S) obedece à Forma Normal de Chomsky se todas as produções p ∈ P forem de uma das duas formas seguintes:

1. ABC, ou

2. A → a

Conforme exposto, qual das gramáticas livres de contexto corresponde à Forma Normal de Chomsky da gramática livre de contexto G3.

G3 = ({W, X, Y, Z}, {a, b}, P3, W)
P3 = {W → aWb | Y
X → bXa | Y
Y → aZb
Z → ε}

a.

G = ({W, X, Y, A1, A2, A3, B1, B2, B3}, {a, b}, P, W)
P = {WA1X | A2B1
XWB2
YA3B3
A1 → a
A2 → a
A3 → a
B1 → b
B2 → b
B3 → b}

b.

G = ({W, X, Y, A1, A2, A3, B1, B2, B3}, {a, b}, P, W)
P = {WB1X | A2B1
XWA2
YA3B3
A1 → a
A2 → a
A3 → a
B1 → b
B2 → b
B3 → b}

c.

G = ({W, X, A1, A2, B1, B2}, {a, b}, P, W)
P = {WB1X | A2B1
XWA2
A1 → a
A2 → a
B1 → b
B2 → b}

d.

G = ({W, X, A1, A2, B1, B2}, {a, b}, P, W)
P = {WA1X | A2B1
XWB2
A1 → a
A2 → a
B1 → b
B2 → b}

e.

G = ({W, X, Y, Z, S, A1, A2, A3, A4, A5, B1, B2, B3, B4, B5}, {a, b}, P, W)
P = {WA1Z | A2B1
XB3S | A3B4
YA5B5
ZWB2
SXA4
A1 → a
A2 → a
A3 → a
A4 → a
A5 → a
B1 → b
B2 → b
B3 → b
B4 → b
B5 → b}

Questão 04

As formas normais estabelecem restrições rígidas na definição das produções, sem reduzir o poder de geração das Gramáticas Livres de Contexto, sendo usadas principalmente no desenvolvimento de algoritmos (com destaque para reconhecedores de linguagens) e na prova de teoremas. Por exemplo, diz-se que uma Gramática Livre de Contexto G = (V, Σ, P, S) obedece à Forma Normal de Greibach se todas as suas produções p ∈ P forem da forma:

1. A → σα, σ ∈ Σ, α ∈ N*

Conforme exposto, apresente a Forma Normal de Greibach da gramática livre de contexto G4.

G4 = ({S, W, A}, {x, y, z}, P4, S)
P4 = {SWx
WSy | Ay
ASz | z}
G = ({A, B, C, D, E, X1, X2, X3, X4, X5, X6, X7, X8, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Y10, Z1, Z2, Z3, Z4}, {x, y, z}, P, A)
P = {A → zC1Y1B1X1 | zY2B1X2 | zC1Y3X3 | zY4X4
B → zC1Y5B1 | zY6B1 | zC1Y7 | zY8
B1 → xY9B1 | xY10
C → zC1 | z
C1 → yB1X5Z1C1 | yX6Z2C1 | yB1X7Z3 | yX8Z4
X1 → x
X2 → x
X3 → x
X4 → x
X5 → x
X6 → x
X7 → x
X8 → x
Y1 → y
Y2 → y
Y3 → y
Y4 → y
Y5 → y
Y6 → y
Y7 → y
Y8 → y
Y9 → y
Y10 → y
Z1 → z
Z2 → z
Z3 → z
Z4 → z}

Questão 05

Linguagens sensíveis ao contexto são aquelas cujas sentenças exibem características de dependência – ou vinculação – entre trechos distintos das mesmas. Ou seja, determinadas partes de uma sentença só serão consideradas válidas se ocorrerem simultaneamente a trechos relacionados, presentes em outras regiões da mesma sentença. Daí a origem do nome "sensibilidade ao contexto".

Formalmente, uma gramática sensível ao contexto G = (V, Σ, P, S) é aquela cujas regras do conjunto P obedecem ao formato α → β, onde:

  • α ∈ V*NV*
  • β ∈ V*
  • |β| ≥ |α|

Analise as seguintes afirmativas sobre gramáticas sensíveis ao contexto:

I. A gramática sensível ao contexto G5 representa a linguagem {anbncn | n ≥ 1}.

G5 = ({S, Q}, {a, b, c}, P5, S)
P5 = { S → aSQ | abc
bQc → bbcc
cQQc}

II. A gramática sensível ao contexto G6 representa a linguagem {anbncn | n ≥ 1}.

G6 = ({S, B, C}, {a, b, c}, P6, S)
P6 = { S → aSBC | aBC
CBBC
aB → ab
bB → bb
bC → bc
cC → cc}

III. A gramática sensível ao contexto G7 representa a linguagem {anbnan | n ≥ 1}.

G7 = ({S, B, X}, {a, b}, P7, S)
P7 = { S → aBSa | aBXa
Ba → aB
BXXb
aX → a}

A análise permite concluir que:

a. apenas a afirmativa I está correta.

b. apenas a afirmativa II está correta.

c. apenas a afirmativa III está correta.

d. apenas as afirmativas I e II estão corretas.

e. apenas as afirmativas II e III estão corretas.

Questão Extra

Uma gramática linear à esquerda é aquela em que todas as produções exibem as seguintes características:

  • α ∈ N
  • β ∈ Σ, β ∈ N, β ∈ NΣ ou β = ε, de forma não exclusiva.

Gramáticas lineares à esquerda também são conhecidas como gramáticas do tipo 3, e geram linguagens denominadas regulares, ou simplesmente do tipo 3. As linguagens regulares constituem a classe de linguagens mais simples dentro da Hierarquia de Chomsky, a qual prossegue com linguagens de complexidade crescente até as linguagens mais gerais, do tipo 0.

Conforme exposto, a gramática linear à esquerda G8 representa qual expressão regular.

G8 = ({A, B, C, D, E, F, G, H, I}, {a, b, c}, P8, A)
P8 = {ABc
BCb | Db
CCa | Cb | Cc | Db
DEa | Ga
EFc | Hc
FFa | Fb | Fc | Ga
GHc
HIb
I → ε}

a. (bca(a + b + c)*cab(a + b + c)*bc)

b. (bca(ε + (a + b + c)*c)a(ε + b(a + b + c)*)bc)

c. (bca(ε + (a + b + c)*ca)(ε + b(a + b + c)*)bc)

d. (bca(ε + (a + b + c)*)cab(ε + (a + b + c)*)bc)

e. (bc(ε + a(a + b + c)*c)a(ε + b(a + b + c)*)bc)