Você está na página 1de 12

Gramáticas Regulares

Gramáticas Regulares e Gramáticas Regulares Unitárias

Definição:
Seja G = {V, T, P, S} uma gramática e sejam A e B elementos de V e w uma palavra
de T*.
Então G é uma:
a) GLD: Se todas as regras de produção são da forma A  wB ou A  w.
Gramática Linear à Direita

b) GLE: Se todas as regras de produção são da forma A Bw ou A  w.


Gramática Linear à Esquerda

c) GLUD: Se todas as regras de produção são como na GLD e além disso |w| =< 1.
Gramática Linear Unitária à Direita

d) GLUE: Se todas as regras de produção são como na GLE e além disso |w| =< 1.
Gramática Linear Unitária à Esquerda

Note-se que nas gramáticas lineares o lado direito das produções apresentam no
máximo uma variável, que se existir irá sempre anteceder (LE- linear a esquerda) ou
suceder (LD – linear a direita) qualquer subpalavra de terminais.
Gramática Regular
• Teorema:
• Seja L uma linguagem, então:
• L é gerada por uma GLD sss
• L é gerada por uma GLE sss
• L é gerada por uma GLUD sss
• L é gerada por uma GLUE.
• Ou seja, as diversas formas de gramáticas lineares são
formalismos equivalentes.

• Gramática Regular:
• Uma gramática regular é qualquer gramática linear.
• Uma linguagem gerada por uma gramática regular G é
representada por L(G) ou GERA(G).
Gramática Regular
• Exemplo 1:
• A linguagem a(ba)* é gerada pelas seguintes gramáticas:

• a) GLD: G = ( {S, A}, {a, b}, {SaA, AbaA | ε} , S ).


• b) GLE: G = ( {S}, {a, b}, {SSba | a}, S ).
• c) GLUD: G = ( {S, A, B}, {a, b}, {SaA, AbB | ε , BaA}, S ).
• d) GLUE: G = ( {S, A}, {a, b}, {SAa | a, ASb}, S ).

• Exemplo 2:
• A linguagem (a+b)*(aa + bb) é gerada pelas seguintes gramáticas:
• a) GLD: G = ( {S, A}, {a, b}, {SaS | bS | A, Aaa | bb}, S ).
• b) GLE: G = ( {S, A}, {a, b}, {S Aaa | Abb, AAa | Ab | ε}, S ).

• Teorema:
• Se L é uma linguagem gerada por uma gramática regular, então L é uma
linguagem regular.
Gramática Regular
• Como vimos a Gramática Regular restringe as produções
de duas formas:

• 1-)O lado esquerdo tem apenas uma variável

• 2-)O lado direito contém no máximo uma variável.

• Para obtermos uma gramática que gera


linguagens reconhecidas por máquinas de maior poder
computacional que os Automatos Finitos, vamos tornar
estas exigências mais flexíveis.
Gramática de Livre Contexto
• Lado Esquerdo: Manteremos as restrições
da Gramática Regular
• Lado Direito: Será permitido qualquer
situação.
• G= ( V,T,P,S)
• As produções terão a seguinte forma:
• Ax, onde: A ε V , xε (V υ T)*
Gramática de Livre Contexto
• Exemplo:
• S AB S=>AB
• AaaA S=>aaAB
• A ε S=>aaB
• BBb S=aaBb
• Bε S=aaBb
S=aab
Gramática irrestrita
Uma gramática G = ( V,T,P,S) é chamada Irrestrita se
as produções forem da forma:

u v onde u  ( V  T )+ e v  ( V  T )*

Podem existir variáveis e terminais do lado direito e


esquerdo das produções.
A única restrição é não permitir ε do lado esquerdo
EXEMPLO
ÁRVORE DE DERIVAÇÃO
• Árvore de Derivação
• Derivação de uma palavra em forma de árvore
• Composição da árvore:
• Raiz: símbolo inicial da gramática
• Nodos internos: símbolos não terminais
• Nodos Folha: símbolos terminais ou palavra
vazia
• Uma mesma árvore pode representar
derivações distintas
Árvore de derivação
A palavra (a + b) * 10 tem a seguinte árvore de derivação:

G4 = ({E, I, N}, {a, b, 0, 1, (, ), +, *, - }, P4, E)


com
P4 = { E → I | N | E + E | E * E | ( E )
I → a | b | Ia | Ib
N → 0 | 1 | N0 | N1 | -N | +N }
LEFT MOST - RIGTH MOST
• G = ( {E}, {+, *, [, ], x}, P2, E)
• P = { E  E+E | E*E | [E] | x }
Usando a gramática anterior, para se derivar x+x*x, tem se

Derivação Mais à Esquerda


Seqüência de produção aplicada sempre na variável mais à esquerda.

E => E*E => E+E*E => x+E*E => x+x*E => x+x*x
E => E+E => x+E => x+E*E => x+x*E => x+x*x

Derivação Mais à DIREITA


Seqüência de produção aplicada sempre na variável mais à direita.

Derivações mais à direita


E => E+E => E+E*E => E+E*x => E+x*x => x+x*x
E => E*E => E*x E+E*x E+x*x x+x*x
Ambiguidade
• Uma GLC é ambígua se :
• Uma palavra possui duas ou mais árvores de derivação
• diferentes
• ou se:
• Possui mais de uma derivação mais à esquerda (direita)
• No exemplo anterior:
• Derivações mais à esquerda
• E => E*E => E+E*E => x+E*E => x+x*E => x+x*x
• E => E+E => x+E => x+E*E => x+x*E => x+x*x
• Portanto a gramática:
• G1 = ( {E}, {+, *, [, ], x}, P2, S)
• P2 = { E E+E | E*E | [E] | x }

• É ambígua.

Você também pode gostar