AULA Nº 5.2

(Download da Aula)

<< anterior próxima >>
menu de aulas dúvidas
 

Gramáticas e Árvores

 Gramáticas Livres de Contexto e Árvores Sintáticas

 

Definição: Uma gramática G = (VN, VT, S, P) é livre de contexto se as produções P estão são da forma N ® a , onde a Î (VN È VT)* e N Î VN .

 

Exemplo:

 

i) E ® T | E + T | E - T

 

ii) T ® F | T * F | T / F

 

iii) F ® i | F ** i

 

E - símbolo inicial , i) , ii) e iii) correspondem à gramática G5.

 

L(G5): Expressões aritméticas com a variável i.

 

E ê i - i * i + i ** i

 Árvore Sintática

 

Representa, passo a passo a geração de uma cadeia por uma gramática.

 

A árvore sintática fornece a estrutura gramatical da cadeia analisada.

 

E Ü E+ T Ü E - T+ T Ü T - T+ T Ü F - T+ T Ü i - T+ T Ü i -T * F + T Ü...

 

 Definição: Dada uma gramática livre de contexto :

 

1-

A árvore constituída inicialmente pelo nó rotulado S é uma árvore sintática.

 

2-

A árvore obtida pela substituição de uma folha (nó final), rotulada N, de uma árvore sintática, pela árvore

 

 

 

 

onde N ® x1 , x2 ... xn Î P é uma árvore sintática.

 

Observações:

 

1-

A construção da árvore termina quando todas as folhas forem terminadas.

 

2-

A cada árvore sintática corresponde pelo menos uma geração.

 

3-

A cada geração corresponde pelo apenas uma única árvore sintática (embora várias gerações possam ter a mesma árvore sintática).

 

4-

Qualquer nó não folha é rotulado com um NT de G

 

5-

Um nó NT N e seus nós descendentes imediatos x1 , x2 ... xn correspondem a uma geração direta N ® x1 , x2 ... xn .

 Gramáticas Ambíguas

 

Definição: Dada uma gramática G = (VN, VT, S, P) ela é ambígua se existir uma cadeia x Î L(G) para o qual podem ser construídas duas árvores sintáticas diferentes.

 

Exemplo: E ® E + E | E * E | i (G6)

 

 

G6 é ambígua.

 

Contra - exemplo:

 

S ® MN ; M ® a ; N ® b G7

 

Temos duas gerações:

  1. S Ü MN Ü aN Ü ab
  2. S Ü MN Ü Mb Ü ab

 

Uma única árvore sintática:

 

 Geração Canônica

 

Para que uma cadeia gerada por uma gramática corresponda a uma única geração, particulariza-se a geração da seguinte forma: Cada geração direta deve substituir o NT (não terminal) mais à direita.

 

Definição: Uma geração direta xNy ® xuy com N Î VN e x, y Î (VN È VT)* é canônica se y contém apenas símbolos terminais.

 

Definição: Uma gramática G é ambígua se, e somente se, existir uma cadeia x Î L(G) para a qual exista mais do que uma geração canônica.

 

Exemplo: S ® S + S | i (G8)

 

A cadeia i + i + i tem duas gerações canônicas:

  1. S Ü S + S Ü S + S + S Ü S + S + i Ü S + i + i Ü i + i + i
  2. S Ü S + S Ü S + i Ü S + S + i Ü S + i + i Ü i + i + i

 

Portanto, G8 é ambígua.

 

Seja a gramática G7 : S ® MN ; M ® a ; N ® b

 

Esta gramática tem apenas uma geração canônica: S Ü MN Ü Nb Ü ab

 Comparação entre Gramáticas de Tipo 2 (Gramática Livre de Contexto) e Tipo 3 (Gramática Regular)

 

Toda gramática regular é uma gramática livre de contexto.

 

As produções das gramáticas regulares são mais simples do que as produções das gramáticas livres de contexto.

 Vantagens das Gramáticas Livres de Contexto sobre as Gramáticas Regulares

 

As gramáticas livres de contexto permitem a construção de árvores sintáticas mais complexas.

 

Exemplo: Gramática G5:

  1. E ® T | E + T | E - T
  2. T ® F | T * F | T / F
  3. F ® i | F ** i

 

A gramática regular equivalente à G5 é:

  1. E ® iM | i
  2. M ® + E | - E | * E | / E | ** E

 

Chamamos a esta gramática de G9 .

 

As árvores sintáticas correspondentes à cadeia i - i * i + i ** i serão:

 

Para a gramática G5 :

 

 

Para a gramática G9 :

 

 

Todas as árvores sintáticas de gramáticas regulares são binárias. Cada nó tem:

 

1-

Um descendente terminal;

 

2-

Eventualmente, um descendente NT (não terminal);

 

A árvore sintática de gramáticas livres de contexto representam precedência entre as unidades sintáticas.

 

As gramáticas livres de contexto geram linguagens mais complexas.

 

  1. E ® T | + T | - T | E + T | E - T
  2. T ® F | T * F | T / F
  3. F ® P | F ** P
  4. P ® i | (E)

 

Chamamos a gramática descrita acima de G10:

 

É impossível obter-se uma gramática regular que gere linguagens com sentenças balanceadas.

 

Exemplo: L = {an bn | n ³ 1} é gerada por: S ® aSb | ab (chamaremos G11)

 Autômato com Pilha

 

Assim como não existe uma gramática regular que gere sentenças balanceadas (ex.: L = {an bn | n ³ 1}), não existe um autômato finito que a reconheça.

 

Para reconhecer linguagens geradas por gramáticas livres de contexto precisamos de autômatos com pilhas.

 

 Gramáticas Livres de Contexto com Expressões Regulares

 

Lado direito de cada produção com expressões regulares.

 

Exemplo: S ® aS | b (chamaremos G12), é equivalente a S ® a*b ;

L(G12) = a*b

 

NT definidos recursivamente

 

1-

N ® a N | b

N ® a *b

a , b Î (VN È VT)* ou são expressões regulares com símbolos de VN e VT

 

2-

N ® Na | b

N ® b *a