1 / 37

Identificando Linguagens Não Regulares

Identificando Linguagens Não Regulares. Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação a ser armazenada em qualquer estágio é estritamente limitada. Exemplo: A linguagem L={ a n b n |n  0} não é regular.

julio
Télécharger la présentation

Identificando Linguagens Não Regulares

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Identificando Linguagens Não Regulares • Linguagens regulares podem ser finitas; • Uma linguagem é regular sss, em processando qualquer cadeia, a informação a ser armazenada em qualquer estágio é estritamente limitada.

  2. Exemplo: A linguagem L={ an bn|n0} não é regular. • Suponha que L é regular. Então existe um AFD M=(Q, {a,b},S,q0,F) que a reconhe-ce. Seja k o número de estados de M. Consideremos o funcionamento de M na entrada anbn, onde n k

  3. aaaaaaaaaabbbbbbbbbb q 0 n n r • Como nk, deve existir algum estado p tal que M está em p mais de uma vez enquanto percorrendo a parte inicial da sequência de a’s (princípio da casa dos pombos).

  4. Quebre anbn em 3 pedaços u, v, w onde v é a cadeia de a’s percorrida entre duas ocorrências de p. aaaaaa aaaabbbbbbbbbb q0u pvpw r

  5. Seja j=|v|>0 (j=4, no exemplo) *(q0,u) = p *(p,v) = p *(p,w) = r  F • Logo podemos remover v o que resultaria numa cadeia ser erroneamente aceita:

  6. *(q0,uw) = *(*(q0,u),w) = *(p,w) = r  F aaaaaa bbbbbbbbbb q0 p r u w

  7. Lema do Bombeamento (Pumping Lemma) TEOREMA: Seja L uma linguagem regular. Então existe um inteiro positivo m, tal que w  L com |w| m pode ser decomposta comow= xyz com |xz|m e |y|1 tal que wi=xyiz está também em L para todo i = 0,1,2, ...

  8. Prova • Sejam q0, q1,…, qn os estados do AFD que reconhece L. Agora tome uma cadeia w  L tal que |w|=km=n+1. • Seja q0,qi,qj, … ,qf o conjunto de estados do autômato no reconhe-cimento de w. Como esta cadeia tem no mínimo n+1 entradas, pelo menos um estado deve ser repetido, e tal repetição não deve começar após o n-ésimo movimento.

  9. Portanto, a sequência deve ter a seguinte forma q0,qi,qj, … ,qr, … ,qr, …, qf • indicando que devem existir subcadeias x, y, z de w tal que *(q0,x)=qr, *(qr,y)=qr, *(qr, z)=qf com |xz|  n+1 = m e |y|1. • Donde segue imediatamente que *(q0,xz)=qf, *(q0, xy2z)=qf, *(q0,xy3z)=qf ... q.e.d

  10. Gramáticas • Gramáticauma ferramenta comum e poderosa para definir linguagens. • Definição: Uma gramática G é uma quádrupla G=(V, T, S, P) onde: • V é um conjto finito de variáveis ou símbolosnão-terminais; • T é um conjunto finito de símbolos terminais; • S  V é um símbolo especial chamado de símbolo inicial ou variável de início; • P é um conjunto finito de produções

  11. As regras de produção são da forma xy, onde x é um elemento de (VT)+ e y está em (VT)*. • As produções são aplicadas como segue: • dada uma cadeia w da forma w=uxv, dizemos que a produção é aplicável a esta cadeia e podemos usá-la para trocar x por y, obtendo assim uma nova cadeia z=uyv • Isto é escrito por wz (w deriva z ou z éderivada de w ou z deriva de w).

  12. Se w1w2...wn, dizemos que w1 deriva wn e escrevemos w1*wn • * indica que foi tomado um número não-especificado de etapas (inclu-indo zero) para derivar wn de w1. Logo w*w sempre se dá. • Para indicar que pelo menos uma produção foi aplicada, escreve-mos w+v

  13. Aplicando as regras de produção em ordens diferentes, uma gramática pode gerar muitas cadeias. O conjunto de todas tais cadeias é a linguagem definida ou gerada pela gramática.

  14. Linguagem Gerada • Definição: Seja G = (V, T, S, P) uma gramática. Então o conjun-to L(G) = {wT* | S*w} é a linguagem gerada por G. • Se w  L (G), então a sequência Sw1w2 … wnw é uma derivação da sentença (ou palavra) w.

  15. Exemplo • G = <{S}, {a,b}, S, P> onde P é dado por SaSb e S • Então SaSb  aaSbb  aabb • Logo podemos escrever S*aabb • Uma gramática define completamen-te L(G), porém pode não ser fácil obter uma descrição explícita da linguagem a partir da gramática. • Neste exemplo, no entanto, não é difícil conjecturar que L(G)={anbn|n0}

  16. Gramáticas Regulares • Uma gramática G = <V, T,S,P> diz-se linear à direita se todas as produções são da forma A xB ou Ax onde A, B  V, e x  T*. • e linear à esquerda se todas as produções são da forma AxB Ax

  17. Uma gramática regular é uma que é ou linear à direita ou linear à esquerda. • Observe que numa gramática regular no máximo aparece uma variável no lado direito de qualquer produção. Além disso, essa variável está mais à esquerda ou mais a direita de qualquer produção.

  18. Exemplos • G1 = ({s},{a,b},S,P1), P1: SabS|a é linear à direita. • SabS  ababS  ababa • L (G1) é a linguagem L((ab)*a) • G2 = ({S,S1,S2},{a,b},S,P2), com produções SS1ab, S1S1 ab|S2, S2a é linear à esquerda. • S S1abS1ababS2ababaabab • L(G2) é a linguagem L(a(ab)*)

  19. Cuidado! A gramática G=({S,A,B},{a,b},S,P) com produções SA AaB| BAb não é regular!

  20. Gramáticas Lineares À Direita Geram Linguagens Regulares • Construir um AFND que simula as derivações de uma gramática linear à direita. Ab…cDAb…cdE por DdE • O AFND vai do estado D para o estado E quando o símbolo d for encontrado.

  21. Teorema. Seja G = (V, T, S, P) uma gramática linear à direita. Então L(G) é uma linguagem regular. Prova. Assumir V={V0,V1,…,Vp}, com S=V0 e que temos produ-ções da forma V0v1Vi, Viv2Vj, …, ou Vnvl, …

  22. Se w é uma cadeia em L(G), então por causa das formas das produções em G, a derivação deve ter a forma da equação acima. V0 v1Vi  v1v2Vj * v1v2… vk Vn  v1v2… vk ve = w

  23. O autômato a ser construído repro-duzirá a derivação, consumindo cada um desses v’s. • O estado inicial do autômato será ro-tulado V0, e para cada Vi existirá um estado não final rotulado Vi. • Para cada Via1a2…amVj definire-mos tal que *(Vi,a1a2…am)=Vj • Para cada Via1a2…am ,*(Vi,a1a2…am)=Vf, onde Vf é um estado final. Os estados intermedi-ários não são de interesse e podem ser dados rótulos arbitrários.

  24. vi vj a1 a2 am ... representa Via1a2…amVj a1 a2 am … representa Via1a2…am vi vf

  25. Suponha agora que w  L (G). No AFND existe uma aresta de V0 a Vi rotulada v1, de Vi a Vj rotulada v2, etc., tal que Vf  *(V0, w), e w é aceita por M. • Inversamente, suponha que w é aceita por M. Para aceitar w o autômato tem de passar pela sequência de estados V0, Vi,…,Vf usando caminhos rotulados v1,v2,…,vl

  26. Portanto, w deve ter a forma w=v1v2…vkvl e a derivação V0v1Viv1v2Vj*v1v2…vkVk  v1v2…vkvl é possível. Logo W está em L(G), e assim o teorema está provado.

  27. Exemplo • Construir um autômato que aceita a linguagem gerada pela gramática V0aV1 V1abV0 |b • começamos do grafo de transição com vértices V0, V1 e Vf.

  28. A primeira regra de produção cria uma aresta rotulada a entre V0 e V1. Para segunda regra, precisamos introduzir um vértice adicional tal que existe um caminho rotulado ab entre V1 e V0.

  29. Finalmente, precisamos adicionar uma aresta rotulada b entre V1 e Vf • A linguagem gerada pela gramática e reconhecida pelo autômato é a linguagem regular L ((aab)*ab) b a v0 v1 vf b a v2

  30. Gramáticas Lineares À Direita Para Linguagens Regulares • Começamos agora do AFD para a linguagem e invertemos a construção do teorema anterior • Os estados do AFD tornam-se as variáveis da gramática, e • Os símbolos que causam as transições tornam-se os terminais nas produções

  31. Teorema: Se L é uma linguagem regular sobre o alfabeto , então existe uma gramática linear à direita G = (V,,S,P) tal que L = L(G).

  32. Prova: Seja M = (Q,,,q0, F) um AFD que aceita L. Assumiremos que Q = {q0,q1,…, qn) e  = {a1, a2,…am}. • Vamos construir uma gramática linear à direita G = (V, , S, P) com V = {q0, q1,…,qn} e S = q0. • Para cada transição  (qi, aj) = qk de M, colocamos em P a produção qiajqk. • Além disso, se qk está em F, acrescentamos a P a produção q.

  33. Primeiro mostramos que G defini-da dessa maneira pode gerar toda cadeia em L. Considere w  L da forma w = aiaj…akal. • Para M aceitar essa cadeia ele deve se movimentar via  (q0, ai) = qp,  (qp, aj) = qr, ...  (qs, ak) = qt,  (qt, al) = qf F

  34. Por construção, a gramática terá uma produção para cada um desses ’s. Portanto, podemos fazer a derivação q0aiqpaiajqr*aiaj…akqt  aiaj…akalqfaiaj…akal com a gramática G, e w  L(G).

  35. Inversamente, se w  L(G), então sua derivação deve ter a forma da equação acima, mas isto implica que  (q0, ai, aj…akal) = qf, completando a prova. q.e.d.

  36. Equivalência Entre Linguagens Regulares E Gramáticas Regulares • Os resultados anteriores estabele-cem a conexão entre linguagens regulares e gramáticas lineares à direita. • Podemos fazer uma conexão análo-ga entre linguagens regulares e gramáticas lineares à esquerda, mostrando assim, a equivalência de gramáticas e linguagens regulares.

  37. Teorema. Uma linguagem é regular se e somente se existe uma gramáti-ca regular G tal que L = L(G).

More Related