Você está na página 1de 4

FACENS - Faculdade de Engenharia de Sorocaba Tópicos em Computação I

Formas Normais

Formas Normais
Algoritmo GLC ⇒ FNC
• Uma gramática é dita normalizada em relação
a um certo padrão quando todas as suas Etapa 1: Simplificação da Gramática
produções satisfazem às restrições impostas • Eliminação de produções vazias
pelo padrão em questão.
• Eliminação das produções da forma A → B
• padrão ⇒ formas normais. (produções unitárias)
• Restrições rı́gidas na definição das produções. • Eliminação de sı́mbolos inúteis
• Usadas no desenvolvimento de algoritmos e Gramática resultante: G1 = (V1 , T1 , P1 , S)
provas de teoremas.

Se quisermos converter uma GLC para um FNC, começaremos


As formas normais estabelecem restrições rı́gidas na definição com uma gramática simplificada, isto é, a gramática não terá ε-
das produções, sem reduzir o poder de geração das Gramáticas produções, produções unitárias ou sı́mbolos inúteis.
Livres de Contexto. São usadas principalmente no desenvolvi-
mento de algoritmos (com destaque para reconhecedores de lin-
guagens) e na prova de teoremas. As formas normais estudadas Algoritmo GLC ⇒ FNC
serão:
Etapa 2: Transformação do lado direito das
• Forma Normal de Chomsky produções de comprimento maior ou igual a dois:

• Forma Normal de Greibach • Garante que o lado direito das produções com
comprimento ≥ 2 é composto exclusivamente
por variáveis.
• A exclusão de um terminal pode ser realizada
colocando-se um não terminal intermediário.
Forma Normal de Chomsky Por exemplo, é possı́vel substituir a por Ca e
incluir a produção Ca → a
• Uma GLC G = (V, T, P, S) é dita na Forma
Normal de Chomsky (FNC) se todas as suas Algoritmo para a Etapa 2
produções são da forma
Gramática resultante: G2 = (V2 , T1 , P2 , S).
– A → BC ou
V2 = V1
–A→a
P2 = P1
onde A, B, C ∈ V e a ∈ T para toda A → X1 X2 ...Xn ∈P2 tal que n ≥ 2
• Linguagem não aceita palavra vazia faça se para r ∈ {1,...,n}, Xr é terminal
ent~
ao (suponha Xr = a)
V2 = V2 ∪ {Ca }
substitui a por Ca na prod. A
N. Chomsky é lingüista que primeiro propôs as gramáticas
livres de contexto como uma forma de descrever linguagens natu- P2 = P 2 ∪ { C a → a }
rais e que provou que toda GLC poderia ser convertida nessa
forma. Esta forma permite um teste eficiente da pertinência de
uma palavra a uma LLC. Para todo terminal a que aparecer em um corpo de com-
primento 2 ou mais, crie uma nova variável, digamos A. Essa
variável terá apenas uma produção A → a. Agora usamos A no
lugar de a em todo lugar em que a aparecer em um corpo de
comprimento 2 ou mais.

Profa. Tiemi Christine Sakata 1


FACENS - Faculdade de Engenharia de Sorocaba Tópicos em Computação I

• Etapa 2: exceto a produção E → x, as demais produções


devem ser substituı́das:
Algoritmo GLC ⇒ FNC
E → EC+ E | EC∗ E | C[ EC]
Etapa 3: Transformação do lado direito das C+ → +
C∗ → ∗
produções de comprimento maior ou igual a três C[ → [
em produções com exatamente duas variáveis: C] →]
• Etapa 3: As produções E → EC+ E | EC∗ E | C[ EC] de-
• O lado direito da produção com comprimento, vem ser substituı́das:
≥ 1, é composto por exatamente duas
E → ED1 | ED2 | C[ D3
variáveis. D1 → C + E
D2 → C ∗ E
• Desmembrar os corpos de comprimento 3 ou D3 → EC]
mais em uma cascata de produções, cada uma
Escrever a gramática resultante.
com um corpo consistindo em 2 variáveis.

Algoritmo para a Etapa 3 Forma Normal de Greibach


Gramática resultante: G3 = (V3 , T1 , P3 , S). • Uma GLC G = (V, T, P, S) obedece a Forma
V3 = V2 Normal de Greibach (FNG) se todas as suas
P3 = P2 produções são da forma:
para toda A → B1 B2 ...Bn ∈P3 tal que n ≥ 3 – A → aα
faça P3 = P3 − { A → B1 B2 ...Bn } onde A ∈ V e a ∈ T e α é uma palavra de
V3 = V3 ∪ { D1 ...Dn−2 } variáveis (α ∈ V ∗ ).
P3 = P3 ∪ { A →B1 D1 , D1 →B2 D2 • Algoritmo de transformação composto por 6
..., Dn−2 →Bn−1 Bn , } etapas, sendo que a primeira corresponde a
primeira etapa da FNC (simplificação da gr.).

A etapa 3 garante que o lado direito das produções de com- Toda linguagem NÃO VAZIA pode ser transformada na
primento maior do que um é composto exatamente por duas forma normal de Greibach. Esta forma tem várias conseqüências
variáveis. Para concluir a transformação é suficiente garantir que interessantes. Tendo em vista que cada uso de uma produção
o lado direito é composto por exatamente duas variáveis. Isto é introduz exatamente um terminal em uma forma sentencial, uma
possı́vel desmembrando as produções A → B1 B2 . . . Bn (n ≥ 2) palavra de comprimento n tem uma derivação de exatamente n
em grupos de produções com duas variáveis. Introduzimos n − 2 etapas.
variáveis.

Algoritmo GLC ⇒ FNG


Etapa 2: Renomeação das variáveis em uma
Exemplo ordem crescente qualquer.
Transforme a gramática abaixo na Forma Normal Gramática resultante: G2 = (V2 , T1 , P2 , S)
de Chomsky Suponha que o cardinal de V1 é n:
V2 = { A1 , A2 , . . ., An } é V1 onde as
G = ({E}, {+, ∗, [, ], x}, P, E} variáveis s~ ao renomeadas
P = {E → E + E | E ∗ E | [E] | x} P2 é P1 renomeando as variáveis nas
produç~ oes.

As variáveis da gramática são renomeadas em uma ordem


crescente qualquer, como, por exemplo, A1 , A2 , . . . , An , onde
• Etapa 1: a gramática já está simplificada. n é o cardinal do conjunto de variáveis. Diferentes critérios de

Profa. Tiemi Christine Sakata 2


FACENS - Faculdade de Engenharia de Sorocaba Tópicos em Computação I

renomeação podem resultar em diferentes gramáticas na FNG.


Entretanto, todas são equivalentes (geram a mesma linguagem). Algoritmo GLC ⇒ FNG
Etapa 4: continuação do primeiro para-faça
para r variando de 1 até n
faça ...
para toda Ar → Ar α ∈ P3
faça excluir Ar → Ar α de P3
Algoritmo GLC ⇒ FNG V3 = V3 ∪ {Br }
P3 = P3 ∪ {Br → α} ∪ {Br → αBr }
Etapa 3: Transformação de produções para a para toda Ar → Φ ∈P3 t.q. Φ n~ ao inicia
forma Ar → As α, onde r ≤ s. por Ar e alguma Ar →Ar α foi excluı́da
Etapa 4: Exclusão das recursões da forma faça P3 = P3 ∪ { Ar → ΦBr }
Ar → A r α
A gramática resultante destas duas etapas Etapa 4: as recursões (à esquerda) podem existir origi-
nalmente na gramática, ou serem geradas pela etapa ante-
realizadas em conjunto é: rior. A eliminação da recursão à esquerda pode ser realizada
introduzindo variáveis auxiliares e incluindo recursão à direita
G3 = (V3 , T1 , P3 , S) (Br → αBr ).

Algoritmo GLC ⇒ FNG Algoritmo GLC ⇒ FNG


Etapa 3:
Etapa 5: Um terminal no inı́cio do lado direito de
P3 = P 2 cada produção. G4 = (V3 , T1 , P4 , S).
para r variando de 1 até n P4 = P 3
faça para s variando de 1 até r-1 para r variando de n-1 até 1 e
faça para toda Ar → As α ∈ P3 toda Ar → As α ∈ P4
faça excluir Ar → As α de P3 faça excluir Ar → As α de P4
para toda As → β ∈ P3 para toda As → β ∈ P4
faça P3 = P3 ∪ {Ar → βα} faça P4 = P4 ∪ {Ar → βα}

O mesmo feito para Ar deve ser feito para Br .

Após a execução da etapa anterior, todas as produções da


forma Ar → As α são tais que r < s. Conseqüentemente,
Etapa 3: as produções são modificadas garantindo que a
as produções de maior variável An só pode iniciar por um ter-
primeira variável do lado direito é maior ou igual que do lado
minal no lado direito. Assim, se em An−1 → An α e An for
esquerdo, considerando a ordenação da etapa anterior. As
substituı́do pelas suas correspondentes produções (por exemplo,
produções Ar → As α tais que r > s são modificadas substi-
An → aβ), o lado direito das produções de An−1 também ini-
tuindo a variável As pelas suas correspondentes produções (As →
ciarão por um terminal (An−1 → aβα). A repetição do algo-
β1 | . . . | βm ) resultando em Ar → β1 α | . . . | βm α e as-
ritmo para An−1 , . . . , A1 resultará em produções exclusivamente
sim sucessivamente. Entretanto, como o conjunto de variáveis é
da forma Ar → aα.
finito, existe um limite para as produções crescentes, que pode
ser a geração de um terminal (Ar → aα) ou de uma recursão O algoritmo para garantir que as produções relativas às
(Ar → Ar α). variáveis auxiliares Br iniciam por um terminal do lado direito
é descrito abaixo.

para toda Br → As βr
faça excluir Br → As βr de P4
para toda As → aα
faça P4 = P4 ∪ {Br → aαβr }

Profa. Tiemi Christine Sakata 3


FACENS - Faculdade de Engenharia de Sorocaba Tópicos em Computação I

Algoritmo GLC ⇒ FNG

Etapa 6: Produções na forma A → aα onde α é


composta por variáveis.

Após a etapa 5, se α possui um sı́mbolo não


terminal, o mesmo pode ser substituı́do por uma
variável intermediária (etapa 2 do algoritmo
relativo à FNC).

É análoga a correspondente etapa do algoritmo relativo à


Forma Normal de Chomsky (etapa 2).

Exemplo
Transforme a gramática abaixo na Forma Normal
de Greibach

G = ({S, A}, {a, b}, P, S}


P = {S → AA | a, A → SS | b}

1. Gramática simplificada
2. Renomeação das variáveis em ordem crescente:
A1 → A 2 A2 | a
A2 → A 1 A1 | b
3. Ar → As α com r ≤ s:
A1 → A 2 A2 | a
A2 → A2 A2 A1 | aA1 | b
4. Ar → Ar α:
A1 → A 2 A2 | a
A2 → aA1 | b | aA1 B | bB
B → A 2 A1 | A 2 A1 B
5. terminal no inı́cio de cada lado direito das produções:
A1 → aA1 A2 | bA2 | aA1 B2 | bBA2 | a
A2 → aA1 | b | aA1 B | bB
B → aA1 A1 | bA1 | aA1 BA1 | bBA1 | aA1 A1 B | bA1 B | aA1 BA1 B |
bBA1 B
6. A → aα com α composta exclusivamente por variáveis.
Nenhum procedimento é necessário.

Profa. Tiemi Christine Sakata 4

Você também pode gostar