• Nenhum resultado encontrado

Linguagens Formais e Autômatos

N/A
N/A
Protected

Academic year: 2019

Share "Linguagens Formais e Autômatos"

Copied!
71
0
0

Texto

(1)

DCC063

Linguagens Formais

e Autômatos

(2)

 Tipos de Gramáticas – segundo a hierarquia de

Chomsky existem quatro tipos:

 Tipo 0 ou Irrestritas:

◼ P = { → | (NT)+, (NT)* }

 Tipo 1 ou Sensível ao Contexto

◼ P = { → | ||||, (NT)+, (NT)+}

Tipo 2 ou Livre de ContextoP = { A→ | AN, (NT)*}

 Tipo 3 ou Regular

◼ A→aB ou A→a, ou seja:

◼ P = { A→aX | AN, aT, XN{}}

Linguagens Livres de Contexto

(3)

Linguagens Livres de Contexto

 Exemplo: expressões aritméticas com + e *

E → N | E+E | E*E | (E)

N → DN | D

D → 0 | 1 | 2 | 3 | ... | 9

 Exemplo: {w | o comprimento de w é ímpar} G1: S → SSS | a | b

G2: S → aSa | aSb | bSa | bSb | a | b

G3: L → S

S → aA | bA | a | b

A → aS | bS

(4)

Linguagens Livres de Contexto

 A importância das LLC’s reside no fato de que

praticamente todas as linguagens de programação podem ser descritas por este formalismo

 A maioria das linguagens de programação

pertence a um subconjunto das LLC’s que pode ser

analisado por algoritmos que executam n.log(n)

passos, onde n é o tamanho da sentença de

entrada;

 Outro subconjunto, que corresponde às

linguagens LC não ambíguas pode ser analisado

em tempo n2;

(5)

Linguagens Livres de Contexto

 No pior caso, uma LLC ambígua pode ser

analisada em tempo n3;

 O que ainda é bastante eficiente, se comparado

às linguagens sensíveis ao contexto que pode requerer complexidade exponencial (2n), sendo,

portanto, computacionalmente intratáveis;

 Melhor ainda em relação às linguagens de tipo 0,

que podem ser inclusive indecidíveis, isto é, o algoritmo de análise pode não parar nunca .

(6)

Linguagens Livres de Contexto

 Relembrando, uma gramática livre de contexto

(GLC) é denotada por G = (N, T, P, S), onde N e T são conjuntos disjuntos de variáveis e terminais, respectivamente, P é um conjunto finito de produções, cada uma da forma A → , onde A é uma variável do conjunto N e  é uma cadeia de símbolos de (T  N)*. Finalmente, S é uma variável especial denominada símbolo inicial.

(7)

Lista simples: xxxxx...x Exemplo: números naturais

A → xA | x ou N → DN | D

A → Ax | x D → 0 | 1 | 2 | 3 | ... | 9

Lista com separadores: xSxSxSxS...Sx

A → xSA | x

Exemplo:cadeias de a’s separadas por $.

S → A$S

A → aA | a

Linguagens Livres de Contexto

(8)

Opção: G1 ou G2: A → B | C Exemplo1: comentário em pascal:

C → H | P

H → {M}

P → (*M*) M → LM | L

L → a | b | c |...| z | ‘A’ | ‘B’ | ... | ‘Z’ | 

Linguagens Livres de Contexto

(9)

Opção: G1 ou G2: A → B | C

Exemplo2: conj. números inteiros. Z → P | N

P → U | +U N → -U

U → DU | D D → 0 | 1 |...|9

Linguagens Livres de Contexto

(10)

Concatenação: G1G2

C → AB

Exemplo: número não negativo em ponto flutuante R → N.N | N | .N | N.

N → DN | D

D → 0 | 1 | 2 | 3 | ... | 9

Linguagens Livres de Contexto

(11)

Auto-aninhamento:

A → aAf | c

Exemplo: expressões aritméticas com + e * E → N | E+E | E*E | E/E | E-E | (E) N → DN | D

D → 0 | 1 | 2 | 3 | ... | 9

Linguagens Livres de Contexto

(12)

Auto-aninhamento e lista:

Exemplo: gramática que gera todas as cadeias que equilibram adequadamente os parênteses da esquerda com os da direita:

S → SS | (S) | 

Linguagens Livres de Contexto

(13)

Linguagens Livres de Contexto

Técnicas de definição de gramáticas

 Relações quantitativas:

1) {aib2i | i0} = {, abb, aabbbb, ...}

2) {aibj | j0 e i > j} = {aab, aaaa, aaaabb ...}

3) {aibj | j = 2i ou i > j} = {, aab, aaaa, aaaabb, abb ...}

4) {aibjckdm | i = m e j = 3k} = {abbbcd,

aabbbbbbccdd,...}

5) {aibj | ij e i,j > 0} = {abbb, aab, aaabbbb, aaaab...}

6) {aibjci+j| i,j > 0} = {abcc, aabccc, aabbbccccc, ...}

7) {anbncn| n0} = {abc, aabbcc, aaabbbccc, ...}. Não é

(14)

Linguagens Livres de Contexto

Exercícios

1. Uma palíndrome é uma cadeia que pode ser lida da mesma maneira da direita para a esquerda e da esquerda para a direita. Exemplos: a, aba, osso, asddsa. Defina uma gramática para a linguagem palíndrome (conjunto de

todas as palíndromes sobre o alfabeto A = {a, b, c, ..., z}).

2. Seja G = ({S}, {a, b}, P, S). Dê definições para o conjunto de produções P, de

maneira a gerar as seguintes linguagens:

a) Cadeias que começam e terminam coma.

b) Cadeias com tamanho ímpar.

c) Cadeias onde todos osa’saparecem consecutivos.

d) Cadeias onde todos osb’sprecedem todos os a’s.

(15)

Linguagens Livres de Contexto

Exercícios

3. Defina uma gramática que gere as expressões numéricas com o seguinte alfabeto dígitos: 0 a 9; sinais: +, - , * e /; parênteses: ( e ). Teste sua definição mostrando a derivação das seguintes cadeias:

a) 1+(3*534)

b) ((8/2-(25+3))

4. Definir uma gramática G que gere a linguagem composta pelas cadeias sobre = {a, b, c, d} de tal forma que

a) L(G) = {wdwR| w{a, b, c}*} b) L(G) = {wwR| w{a, b, c}*}

5. Definir gramáticas para as linguagens sobre alfabeto  = {a, b, c, d} :

a) Conjunto vazio;

b) Conjunto contendo apenas a cadeia vazia;

c) Conjunto de todas as cadeias sobre, incluindo ;

6. Construir gramáticas para as linguagens:

a) {x{a, b}* | x apresenta simultaneamente aabb e bbaa como subcadeias}

(16)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

 Muitas vezes é útil mostrar as derivações de uma

GLC através de árvores

 Estas figuras – chamadas árvores de derivação

ou árvores sintáticas – impõem certas estruturas

úteis às cadeias das linguagens geradas

 Os vértices de uma árvore de derivação são

rotulados com terminais ou variáveis, ou mesmo com a cadeia vazia

(17)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

 Se um vértice n é rotulado com A, e os filhos de n

são rotulados com X1, X2,..., Xk, da esquerda para a direita, então A→X1X2...Xk deve ser uma produção;

 Considere, como exemplo, a gramática:

E → E+E | E*E | (E) | id

(18)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

 Uma árvore de derivação para a sentença

(id+id)*id gerada por esta gramática

poderia ser:

18

E

E * E

( E )

E + E

id

(19)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

 Mais formalmente, seja G = (N, T, P, S) uma GLC.

Então uma árvore é uma árvore de derivação para G, se:

a. Cada vértice tem um rótulo, que é um símbolo de

N  T  {};

b. O rótulo da raiz é o símbolo S;

c. Os vértices interiores são rotulados apenas com

(20)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

d. Se o vértice n tem rótulo A, e os vértices n1, n2,..., nk

são filhos de n, da esquerda para a direita, com

rótulos X1, X2,..., Xk, respectivamente, então

A → X1X2...Xk

deve ser uma produção em P.

 Se o vértice n tem rótulo , então n é uma folha e 

(21)

Linguagens Livres de Contexto

Exemplo

 Considere a gramática G = ({S, A}, {a, b}, P, S),

onde P consiste de

S → aAS | a

A → SbA | SS | ba

 A figura seguinte é uma árvore de derivação

para uma sentença desta gramática, na qual os nodos foram numerados para facilitar a explicação:

(22)

Linguagens Livres de Contexto

Exemplo Os vértices interiores são 1, 3, 4, 5 e 7.

O vértice 1 tem rótulo S, e seus filhos, da esquerda para a direita têm rótulos a, A e S. Note que S→aAS é uma produção.

Os vértices 4 e 5 têm ambos o rótulo S. O único filho deles tem rótulo a; e S → a é uma produção.

Finalmente, o vértice 7 tem rótulo A, e seus filhos, da esquerda para a direita, tem rótulos b e a.

(23)

Linguagens Livres de Contexto

Árvore de Derivação e Ambigüidade

 Pode-se ver que a árvore de derivação é uma

descrição natural para a derivação de uma forma sentencial particular da gramática G

 Se uma gramática G tem mais de uma árvore de

derivação para uma mesma cadeia não vazia, então G é chamada de gramática ambígua.

 Uma linguagem livre de contexto para a qual

toda gramática livre de contexto é ambígua é denominada linguagem livre de contexto inerentemente ambígua. Ex {0i1j2k|i=j ou j=k}

(24)

Linguagens Livres de Contexto

Derivação mais à Esquerda e mais à Direita

 Se cada passo na produção de uma derivação é

aplicado na variável mais à esquerda, então a derivação é chamada derivação mais à esquerda.

 Similarmente, uma derivação onde a cada passo

a variável à direita é substituída, é chamada de

derivação mais à direita.

(25)

Linguagens Livres de Contexto

Derivação mais à Esquerda e mais à Direita

 Se w está em L(G), então w tem ao menos uma árvore de

derivação.

 Além disso, em relação a uma árvore de derivação

particular, w tem uma única derivação mais à esquerda e

uma única derivação mais à direita.

 Evidentemente, w pode ter várias derivações mais à

esquerda e várias derivações mais à direita, já que pode haver mais de uma árvore de derivação para w.

 Entretanto, é fácil mostrar que para cada árvore de

derivação apenas uma derivação mais à esquerda e uma derivação mais à direita pode ser obtida.

(26)

Linguagens Livres de Contexto

Derivação mais à Esquerda e mais à Direita

 Exemplo

derivação mais à esquerda correspondendo à árvore do exemplo anterior

derivação mais à direita correspondente

S  aAS

 aSbAS

 aabAS

 aabbaS

 aabbaa

S  aAS

 aAa

 aSbAa

 aSbbaa

 aabbaa

26

S → aAS | a

(27)

Linguagens Livres de Contexto

Simplificações de GLC

 Existem várias maneiras de restringir as produções de

uma gramática livre de contexto sem reduzir seu poder expressivo

 Se L é uma linguagem livre de contexto não vazia,

então L pode ser gerada por uma gramática livre de contexto G com as seguintes propriedades:

a) Cada variável e cada terminal de G aparecem na derivação de alguma palavra de L (não possui símbolos inúteis). Todos símbolos são ou geradores ou alcançáveis;

b) Não há produções da forma A → B, onde A e B são variáveis;

c) Se  não está em L, então não há necessidade de produções da forma A → .

(28)

Linguagens Livres de Contexto

Simplificações de GLC

 No caso de (a), estes símbolos (variáveis ou

terminais) são conhecidos como símbolos inúteis (símbolos improdutivos e símbolos inalcançáveis)

 Em (b) as produções A → B são conhecidas como

produções unitárias;

 As produções da forma A →  (item c) são

conhecidas como -produções;

 Existem algoritmos que podem ser aplicados nos

casos (a), (b) e (c) que produzem uma nova gramática equivalente à gramática original

(29)

Linguagens Livres de Contexto

Eliminação das -produções

 Toda GLC pode ser transformada em uma GLC

equivalente sem -produções; com exceção da produção S →  (S é o símbolo inicial), se esta existir.

 Assim procedendo, é possível mostrar que toda

GLC pode obedecer à restrição das GSC (tipo 1).

 O método de eliminação das -produções

consiste em determinar, para cada variável A em N, se A*.

(30)

Linguagens Livres de Contexto

Eliminação das -produções

 Se isso ocorrer diz-se que a variável A é

anulável;

 Pode-se, assim, substituir cada produção da

forma B→X1X2X3...Xn por todas as produções formadas pela retirada de uma ou mais variáveis Xi anuláveis

 Exemplo

(31)

Linguagens Livres de Contexto

Eliminação das -produções  Exemplo

Dada a gramática

A → BCDe

B →  | e C →  | a D → b | cC

Neste caso as variáveis anuláveis são B e C, assim, a gramática pode ser transformada na seguinte gramática:

A → BCDe | CDe | BDe | De B → e

C → a

D → b | c | cC

(32)

Linguagens Livres de Contexto

Eliminação das -produções

 Os não-terminais que derivam a cadeia  são

chamados -não-teminais.

 Um não-terminal (variável) A é um 

-não-terminal se existir uma derivação A* em G.

 Note que  está em L(G) se e somente se S é um -não-terminal. Onde S é o não terminal inicial.

 Se G não tem -não-terminal, ela é dita -livre.

(33)

Linguagens Livres de Contexto

Eliminação das -produções

 Se G tem -produções, então em uma derivação

sentencial da forma:

S  1  2  ...  n

 Os tamanhos das sentenças irão variar

não-monotonicamente um em relação ao outro, isto é, ora aumentam, ora diminui. Entretanto, se G não tem -produções, então:

|S|  |1|  |2|  ...  |n|

 Antes de apresentar um algoritmo para eliminar

as -produções, será apresentado um algoritmo para encontrar os -não-terminais.

(34)

Linguagens Livres de Contexto

Eliminação das -produções

Algoritmo: Encontrar o Conjunto dos -não-terminais

Entrada: Uma GLC G = (N, T, P, S)

Saída: O conjunto E de -não-terminais E  {A | AN e A → };

Repita

Q  {X | XN e XE e existe pelo menos uma produção da forma X → Y1Y2...Yn tal que Y1E, Y2E, ...,YnE};

E  EQ; Até Q = ;

(35)

Linguagens Livres de Contexto

Eliminação das -produções

 Exemplo: Seja G a seguinte gramática

S → aS | SS | bA

A → BB

B → CC | ab | aAbC

C → 

 Inicialmente temos E = {C} e se obtem:

B → CC | aAbC

C → 

(36)

Linguagens Livres de Contexto

Eliminação das -produções

 Quando o laço é executado pela primeira vez

deixa Q = {B} e

A → BB

B → CC | ab | aAbC C → 

(37)

Linguagens Livres de Contexto

Eliminação das -produções

 Como Q não é vazio, uma segunda iteração deixa

Q = {A}

S → bA

A → BB

B → CC | ab | aAbC C → 

obtendo E = {A, B, C}

 Mais uma vez, Q é não-vazio, mas uma iteração

subseqüente não acrescenta novos símbolos, assim o algoritmo termina. A, B e C são os únicos

-não-terminais em G.

(38)

Linguagens Livres de Contexto

Eliminação das -produções

 Para eliminar os -não-terminais de uma GLC,

pode-se usar o seguinte algoritmo, que elimina

-não-terminais sem introduzir novos

 A estratégia é baseada na seguinte ideia:

(39)

Linguagens Livres de Contexto

Eliminação das -produções

 Seja A um -não-terminal em G. Então ele é

dividido conceitualmente em dois não-terminais A’ e A’’, tal que A’ gera todas as cadeias não vazias e A’’ apenas gera .

 Agora, o lado direito de cada produção onde A

aparece uma vez, por exemplo, B→ A, é trocado por duas produções B → A’ e B →

A’’. Já que A’’ só gera , ele pode ser trocado por , deixando B → .

(40)

Linguagens Livres de Contexto

Eliminação das -produções

 Depois disso, pode-se usar A em lugar de A’;  A produção final fica:

B →  | B → A,

onde A não é mais um -não-terminal

 Se B→AA, então são obtidas as quatro

combinações possíveis pelas trocas de A por , e assim por diante.

(41)

Linguagens Livres de Contexto

Eliminação das -produções

Algoritmo:Eliminação de todos os -não-terminais

Entrada: Uma GLC G = (N, T, P, S)

Saída: Uma GLC G’ = (N’, T, P’, S’) -livre Construa o conjunto E;

P’  {p | pP e p não é -produção}

Repita

Se P’ tem uma produção da forma A→B, tal que BE,

(NT)* e   ,

então inclua a produção A →  em P’;

até que nenhuma nova produção possa ser adicionada a P’;

(42)

Linguagens Livres de Contexto

Eliminação das -produções

Algoritmo:Eliminação de todos os -não-terminais

Continuação...

se SE então

Adicione a P’ as produções S’ → S |  N’  N  {S’};

senão

S’  S; N’  N;

Fim-se;

(43)

Linguagens Livres de Contexto

Eliminação das -produções

Exemplo 1: Eliminar as -produções da seguinte

gramática

S → ABC

A → BB | 

B → CC | a

C → AA | b

(44)

Linguagens Livres de Contexto

Eliminação das -produções

Exemplo 2: Eliminar as -produções da seguinte

gramática

S → aBC

A → bB | 

(45)

Linguagens Livres de Contexto

Fatoração de GLC

 Uma GLC está fatorada se ela é determinística

 Ou seja, se ela não possui produções para um

mesmo não terminal no lado esquerdo cujo lado direito inicie com a mesma cadeia de símbolos ou com símbolos que derivam seqüências que iniciem com a mesma cadeia de símbolos

(46)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo:

S

aSB | aSa

A

a

B

b

Fonte de não

determinismo.

(47)

Linguagens Livres de Contexto

Fatoração de GLC

 Para fatorar uma GLC deve-se alterar as

produções envolvidas no não determinismo da seguinte maneira:

 As produções com não determinismo direto da

forma:

A →  | 

serão substituídas por: A → A’

(48)

Linguagens Livres de Contexto

Fatoração de GLC

 O não determinismo indireto é retirado por meio de

sua transformação em determinismo direto (através de substituições sucessivas) e posterior eliminação segundo o item (a).

(49)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo: fatorar a gramática:

S → aSB | aSa

A → b

B → a

 Eliminando o não determinismo direto:

S → aSS’

S’ →B | a

A → b

B → a

(50)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo...

 Veja que na produção

S’ → B | a

tem um não-determinismo indireto

 Tem-se que tornar este não determinismo

indireto em direto substituindo o lado direito de B → a na variável B da produção S’ → B

(51)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo...

 Obtém-se então

S → aSS’

S’ → a | a

A → b

B → a

(52)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo...

 Eliminando o não determinismo direto

S → aSS’

S’ → aS’’ S’’ → 

A → b

B → a

(53)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo: Fatorar a gramática

C → if E then C else C

C → if E then C

C → o

 C  Comando  E  Expressão

 o  Outro comando

(54)

Linguagens Livres de Contexto

Fatoração de GLC

 Exemplo: Fatorar a gramática

S → AC | BD

A → aD | cB

B → aB | dD

C → eC | eA

D → fD | AB

(55)

Linguagens Livres de Contexto

Eliminação da recursão a esquerda

 Um não-terminal A, em uma GLC G = (N, T, P, S) é

recursivo se A +A, para  e  (NT)*.

 Se  = , então A é recursivo à esquerda;  Se  = , então A é recursivo à direita.

 Esta recursividade pode ser direta ou indireta.  Uma GLC G = (N, T, P, S) possui recursão à

esquerda direta, se P contém pelo menos uma

produção da forma A → A.

(56)

Linguagens Livres de Contexto

Eliminação da recursão a esquerda

 Uma GLC G = (N, T, P, S) possui recursão à

esquerda indireta, se existe em G uma derivação

da forma: A n A, para algum n2.

(57)

Linguagens Livres de Contexto

Eliminação da recursão a esquerda

 Para eliminar as recursões diretas à esquerda de

um não terminal A, com produções

A → A1 | A2 | ... |Am | 1 | 2 | ... | n

onde nenhum i começa por A.

 Substituir estas produções-A por:

A → 1A’ | 2A’ | ... | nA’

(58)

Linguagens Livres de Contexto

Eliminação da recursão a esquerda

 Algoritmo:

Algoritmo: Eliminação da recursão á esquerda Entrada: Uma GLC G = (N, T, P, S);

Saída: Uma GLC G’ = (N’, T, P’, S) sem recursão à esquerda;

Ordene os não-terminais em uma ordem qualquer (ex: A1, A2, ...,An); para i de 1 a n faça

para j de 1 a i-1 faça

Substitua as produções Ai→Aj por Ai→1 | 2 |...| k, onde Aj→1 | 2 |...| k

são todas as produções-Aj correntes; fim_para;

Elimine as recursões à esquerda diretas entre as produções Ai; fim_para;

(59)

Linguagens Livres de Contexto

59

Eliminação da recursão a esquerda

 Exemplo: Eliminar a RE das gramáticas a seguir:

a) 𝐸 → 𝐸 + 𝑇 | 𝑇

𝑇 → 𝑇 ∗ 𝐹 | 𝐹 𝐹 → 𝐸 | 𝑖𝑑

b) A→ 𝐵𝑎 𝐴𝑎 𝑐

(60)

Linguagens Livres de Contexto

Eliminação da Ambiguidade de GLC (dicas)

 É apenas uma dica, pois não existe um algoritmo

para eliminar a ambiguidade, tampouco para verificar se um GLC é ambígua (nem LLC inerentemente ambíguas).

 A gramática GE:

𝐸 → 𝐸 + 𝐸 𝐸 ∗ 𝐸 𝐸 𝐸 − 𝐸 𝐸 𝐸 | 𝑖𝑑Τ

gera a linguagem ambígua L(GE)=LE das expressões aritméticas.

 Para retirar a ambiguidade, deve-se levar em

consideração, neste caso específico, a precedência e a associatividade dos operadores presentes em cada cadeia de L .

(61)

Linguagens Livres de Contexto

Eliminação da Ambiguidade de GLC (dicas)

 Precedência e associatividade dos operadores

aritméticos:

61

Associatividade Operadores Precedência

Esquerda +,

aumenta

Esquerda *, /

 Deve-se, então, criar:

 duas variáveis E (expressão) e T (termo) para os

dois níveis de precedência;

 uma variável F (fator) para as unidades básicas:

(62)

Linguagens Livres de Contexto

Eliminação da Ambiguidade de GLC (dicas)

 Para os operadores aritméticos * e / (maior

precedência e associatividade a esquerda):

𝑇 → 𝑇 ∗ 𝐹 | 𝑇/𝐹 |𝐹

 Para os operadores aritméticos + e – (menor

precedência e associatividade a esquerda):

𝐸 → 𝐸 + 𝑇 𝐸 − 𝑇 𝑇

 Gramática final que gera LE sem ambiguidade: EE + T | ET | T

TT*F | T/F | F Fid | (E)

(63)

Linguagens Livres de Contexto

Eliminação da Ambiguidade de GLC (dicas)

 Exercícios. 1) Desenvolver uma gramática não ambígua para a linguagens das expressões regulares contendo os operações: * (fecho de kleene), • (concatenação), | (união). Além dos operadores, deve-se usar (, ), a e b (2 símbolos

do alfabeto da ER)

2) Desenvolver uma outra gramática não ambígua para a seguinte gramática (gera a linguagem dos parênteses):

𝑆 → 𝑆 𝑆𝑆 𝜀

(64)

Linguagens Livres de Contexto

Eliminação da Ambiguidade de GLC (dicas)

3) Verifique se a gramática abaixo é ambígua e se sim, transformá-la em outra gramática não ambígua:

𝑆 → 𝑏𝑒𝑔𝑖𝑛 𝐿 𝑒𝑛𝑑 | 𝑖𝑑 ≔ 𝐸 𝐿 → 𝐿; 𝑆 | 𝑆

𝐸 → 𝐸 ∨ 𝐸 | 𝑖𝑑

(65)

Linguagens Livres de Contexto

Simplificações de GLC

 Símbolos inúteis (símbolos improdutivos e

símbolos inalcançáveis)

 Importância: em gramáticas grandes, como

gramáticas de linguagens de programação, pode acontecer de se esquecer de definir regras relativas a alguma variável, ou então, uma variável, apesar de ter suas regras já definidas, pode não ter sido utilizada na formação de novas regras.

 não usados na geração de cadeias de terminais;

 são excluídas as produções que contém os símbolos

inúteis e os próprios símbolos.

(66)

Linguagens Livres de Contexto

Simplificações de GLC

 Algoritmo para a exclusão de símbolos inatingíveis

(garante que qualquer variável gera terminais).

Etapa 1:

66

N1 = ;

repita

N1 = N1{A | A→P e (TN1)*}

até que o cardinal de N1 não aumente.

(67)

Linguagens Livres de Contexto

Simplificações de GLC

 Algoritmo para a exclusão de símbolos

improdutivos (garante que qualquer símbolo é

atingível a partir da variável inicial). Etapa 2:

67

T2 = ;

N2 = {S};

repita

N2 = N2{A | X→AP1,XN2};

T2 = T2{a | X→aP1,XN2};

(68)

Linguagens Livres de Contexto

Simplificações de GLC

 Exemplo1: Excluir os símbolos inúteis da

gramática:

68

S → aAa | bBb A → a | S

C → c

S → aAa | bBb

A → a | S C → c

S → aAa | bBb

A → a | S

C → c

S → aAa | bBb

A → a | S

C → c

Assim, N1 = {A, C, S} e a produção S → bBb deve ser retirada. Gramática após a primeira etapa:

(69)

Linguagens Livres de Contexto

Simplificações de GLC

 Exemplo1: Excluir os símbolos inúteis da

gramática:

69

Assim, N2 = {S, A} e T2 = {a} a produção C → c deve ser retirada. Gramática final:

S → aAa A → a | S C → c

S → aAa

A → a | S

C → c

S → aAa

A → a | S

C → c

(70)

Linguagens Livres de Contexto

Simplificações de GLC

 Exemplo2: Excluir os símbolos inúteis da

gramática:

70

S → ABC | AC | A | CC |  A → AB | AA | Ba

B → BA | A | aB

C → AB | aB | aC | a

S → ABC | AC | A | CC |  A → AB | AA | Ba

B → BA | A | aB

C → AB | aB | aC | a

S → ABC | AC | A | CC | 

A → AB | AA | Ba

B → BA | A | aB

C → AB | aB | aC | a

N1 = {S, C} e a gramática após a primeira etapa:

(71)

Linguagens Livres de Contexto

Simplificações de GLC

 Exemplo2: Excluir os símbolos inúteis da

gramática. Etapa 2:

71

S → CC | C → aC | a

S → CC |

C → aC | a

S → CC |

C → aC | a

Referências

Documentos relacionados

(2) Qual é a contribuição efetiva de uma teoria lingüística voltada para a crítica no que concerne a questões como família, pobreza, negligência familiar, negligência do

Inicializa Estados e copia Q1 para Q2 Inicializa Finais e copia F1 para F2 Inicializa Transições e copia 1 para 2.. de Souza,

Mais recentemente, Sime (1999), a partir de uma pesquisa em seis manuais sobre Psicologia Ambiental, publicados entre 1995 e 1997, intitula- do - não coincidentemente - “O que é

Lucas Silva de Oliveira, matrícula SIAPE nº 2141054, para concluir o curso de pós-graduação nível Doutorado, na Universidade Estadual de Campinas (UNICAMP), na área

Para Bolivia, informar número de documento de identificación y dirección en Bolivia, si tiene/ Para Bolivia, informar o número do documento de identificaçao e endereço na Bolivia, si

Dessa forma, conclui-se que, no presente estudo realizado com adolescentes que residem no interior do Estado de Santa Catarina, foi possível identificar que o percentual

Destes casos, dois (20%) se deram após o deslocamento da fêmea em di reção ao parceiro (em uma destas vezes, o macho se voltou pa- ra a parceira, montou sobre seu dorso e depois se

classificatório, com pontuação máxima de 100 (cem pontos) será ministrada na presença de uma banca examinadora e será constituída de uma aula, com duração de até 30