|
|
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:
|
|||||||||||||||
|
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:
|
|||||||||||||||
|
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:
|
|||||||||||||||
|
A gramática regular equivalente à G5 é:
|
|||||||||||||||
|
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. |
|||||||||||||||
|
|
|||||||||||||||
|
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 |