Sie sind auf Seite 1von 57

1

Departamento de Informtica Curso de Cincia da Computao

Linguagens Formais
Prof Alessandra Dahmer

Linguagens Formais
1 CONCEITOS BSICOS.........................................................................................................................3 1.1 ALFABETO E LINGUAGENS ......................................................................................................................3 1.2 GRAMTICAS.......................................................................................................................................4 1.3 TIPOS DE GRAMTICAS.........................................................................................................................6 2 EXPRESSES REGULARES (ER)....................................................................................................10 3 AUTMATO FINITO (AF).................................................................................................................12 3.1 AUTMATO FINITO DETERMINSTICO (AFD)...........................................................................................12 3.2 AUTMATO FINITO NO-DETERMINSTICO (AFND).................................................................................16 3.3 AUTMATO FINITO NO-DETERMINSTICO COM MOVIMENTOS (AFND-)..................................................18 3.4 RELAO ENTRE AUTMATOS FINITOS E GRAMTICAS REGULARES .............................................................21 3.5 EQUIVALNCIA ENTRE AUTMATOS FINITOS E EXPRESSES REGULARES ........................................................22 3.6 MINIZAO DE AFD COMPLETO...........................................................................................................27 4 GRAMTICAS LIVRES DE CONTEXTO (GLC)..........................................................................30 4.1 EXTENSO DA DEFINIO DE GLC........................................................................................................30 4.2 RVORES DE DERIVAO PARA GLC....................................................................................................30 4.3 DERIVAO MAIS ESQUERDA E MAIS DIREITA......................................................................................32 4.4 GRAMTICA AMBGUA........................................................................................................................33 4.5 TRANSFORMAES EM G.L.C..............................................................................................................33 4.5.1 Eliminao de Smbolos Inteis....................................................................................................34 4.5.2 Transformao de uma GLC qualquer para uma GLC -Livre...................................................35 4.5.3 Remoo de Produes Simples (unitrias)..................................................................................36 4.5.4 Fatorao de GLC.........................................................................................................................38 4.5.5 Eliminao de Recurso Esquerda (e a Direita).......................................................................39 4.6 FORMA NORMAL DE CHOMSKY (CNF)..................................................................................................41 4.7 FORMA NORMAL DE GREIBACH (GNF)..................................................................................................42 4.8 OUTROS TIPOS DE GLC.....................................................................................................................43 5 AUTMATO DE PILHA.....................................................................................................................45 5.1 PDA E LINGUAGENS LIVRES
DE

CONTEXTO............................................................................................50

6 MQUINA DE TURING......................................................................................................................53 6.1 MODELO BSICO DA MQUINA DE TURING.............................................................................................53 6.2 DEFINIO DE MQUINA DE TURING......................................................................................................54 6.3 RELAO ENTRE MQUINA DE TURING E GRAMTICA IRRESTRITA...............................................................56 BIBLIOGRAFIA.....................................................................................................................................56

Conceitos Bsicos

Uma linguagem um meio de comunicao, formada por um conjunto de palavras e de regras gramaticais que permitem combinar as palavras em sentenas sintaticamente corretas. Uma linguagem dita formal quando pode ser representada atravs de um sistema com sustentao matemtica. A Lingustica Formal compreende a representao da sintaxe (estrutura) e da semntica (significado) das sentenas de uma linguagem. Nesta disciplina ser abordada somente a estrutura sinttica das linguagens.

1.1

Alfabeto e Linguagens

Alfabeto, ou vocabulrio, um conjunto finito de smbolos. Exemplo: dgitos, letras, letras gregas, etc. Sentena, ou palavra, definida sobre um alfabeto qualquer sequncia finita de smbolos do alfabeto. Exemplo: alfabeto V = { 0,1} sentenas vlidas = 001 010011 O tamanho, ou comprimento, de uma sentena dado pelo nmero de smbolos que compem a sentena. Exemplo: alfabeto V = { a, b, c } sentena w = ab tamanho |w| = 2 Sentena vazia a sentena que no contm smbolos, possuindo tamanho 0. representada por . Seja V um alfabeto, representamos por: V* = conjunto de todas as sentenas compostas de smbolos de V incluindo a sentena vazia. V+ = V* - ( ). Exemplos: V = { 0,1} V* = { , 0, 1, 00, 01, 10, 11, ....} V+ = { 0, 1, 00, 01, 10, 11, ....}

Linguagem qualquer conjunto de sentenas sobre um alfabeto, ou seja uma linguagem L sobre um alfabeto V um subconjunto de V*. Conforme o nmero de sentenas que possuem,

as linguagens se classificam em: finitas vazias infinitas Como representar uma linguagem ? 1. listando as palavras (s para linguagem finita) 2. atravs de uma descrio algbrica Exemplo: (an bn cn | n >= 1) 3. definindo um algoritmo que determina se uma sentena pertence ou no linguagem: Reconhecimento Exemplo: autmato finito 4. definindo um mecanismo que gera sistematicamente as sentenas da linguagem em alguma ordem: Gerao Exemplo: gramtica

1.2

Gramticas

Uma gramtica serve para definir qual o subconjunto de sentenas que faz parte de uma determinada linguagem. um dispositivo formal para especificar uma linguagem potencialmente infinita de uma forma finita. Existem diversas formas de representar a sintaxe das linguagens: BNF, diagramas de sintaxe, notao formal de gramtica. Exemplo: Backus Naur Form (BNF) <programa> ::= <decl>; <bloco>. <bloco> ::= BEGIN <comando> END <comando> ::= <if> <atrib> <goto> ... Elementos: no-terminais ou variveis = <programa> <bloco> smbolos terminais = BEGIN ; END produes = <comando> ::= <if> smbolo inicial = <programa>

Notao Formal de Gramtica Uma gramtica G definida por uma qudrupla

G = ( N, T, P, S ) onde N - conjunto finito de no-terminais T - conjunto finito de terminais P - conjunto finito de regras de produo S - smbolo inicial da gramtica Observaes: NT = V = NT SN P = { | V+ e V* } Exemplo: G = ( N, T, P, I ) N = { I, D } T = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } P = { I D , D 0 , D 1 , D 2 , D 3 , D 4 , D 5 , D 6 , D 7 , D 8 , D 9 } Convenes Para facilitar a compreenso das expresses, so adotadas sempre que possvel as seguintes convenes: N = { A, B, C, ... T } Letras maisculas do incio do alfabeto para smbolos no-terminais T = { a, b, c, ... t } Letras minsculas do incio do alfabeto para smbolos terminais T* = { u, v, ... z } Letras minsculas do fim do alfabeto para sequncias de terminais ( N T )* = { , , , ... } Letras gragas para sequncias de variveis e terminais N T = { U, V, ... Z } Letras maisculas do fim do alfabeto para um smbolo terminal ou no-terminal Derivao Derivao uma operao de substituio efetuada de acordo com as regras de produo da gramtica. Representa-se esta operao pelo smbolo

Logo:

se P e e V*

Uma sequncia de derivaes, de zero ou mais passos, representada por *=> . Isto : 1 *=> m se 1 2, 2 3, ...., m-1 m, 1, 2, ..., m V* Para garantir que pelo menos uma derivao seja efetuada, a notao utilizada +=> . Isto : 1 +=> m se 1 2, 2 *=> m, 1, 2, ..., m V* Sentena e Forma Sentencial Uma sentena de uma linguagem uma sequncia formada de terminais, obtida a partir do smbolo inicial da gramtica desta linguagem, atravs de derivaes sucessivas. S
+ =

>u

{u= sequncia de terminais}

Uma forma sentencial uma sequncia qualquer, composta de smbolos terminais e de no-terminais, obtida a partir do smbolo inicial da gramtica atravs de derivaes sucessivas. S
* =

>

{=sequncia de variveis e terminais}

Linguagem A linguagem gerada por uma gramtica G = ( N, T, P, S ) o conjunto de todas as sentenas que podem ser geradas a partir do smbolo inicial desta gramtica, atravs de derivaes sucessivas. L(G) = { w | w T* e S +=> w } Exemplo: G = ( N, T, P, S ) G = ( {S}, {0,1}, P, S ) P = { S 0S1 S 01 } S 0S1 00S11 03S13 .... 0n-1S1n-1 0n1n L(G) = { 0n 1n | n >= 1 } 1.3 Tipos de Gramticas

Segundo a hierarquia de Chomsky, as gramticas podem ser de quatro tipos. Para G = ( N, T, P, S ) e V = N T, temos: Tipo 0 - Gramticas Irrestritas (GI)

So definidas pelas seguintes regras de produo: P = { | V+ , V* } Ou seja, do lado esquerdo da produo pode haver uma sequncia de quaisquer smbolos, desde que, entre eles, haja um no-terminal. Do lado direito da produo pode haver qualquer sequncia de smbolos, inclusive a sentena vazia. Tipo 1 - Gramticas Sensveis ao Contexto (GSC) Para toda produo P || <= || Ou seja, o comprimento da sentena do lado esquerdo deve ser menor ou igual ao comprimento da sentena do lado direito da produo. Do lado direito no aceito a sentena vazia. Ex: 1A2 1B2 Tipo 2 - Gramticas Livres de Contexto (GLC) Quando as regras de produo so todas na seguinte forma: P = { | N e } Ou seja, do lado esquerdo da produo deve, sempre, ocorrer um e apenas um no-terminal. A sentena vazia tambm no aceita do lado direito da produo. Ex: X abcX {no interessa o contexto em que X se encontra} Tipo 3 - Gramticas Regulares (GR) Toda produo da forma: A aB ou A a Ou seja: P = { A aX | A N, a T, X N {} } Ou seja, do lado esquerdo da produo deve, sempre, ocorrer um e apenas um no-terminal e do lado direito podem ocorrer ou somente um terminal, ou um terminal seguido de um no-terminal. Observao:

Exemplo de Gramtica Livre de Contexto: G = ( N, T, P, S ) N = { S, A, B } T = { a, b } P={ S aB S bA A a A aS

A bAA B b B bS B aBB }

L(G) o conjunto de todas as palavras em T que tem o mesmo nmero de as e bs. Linguagens geradas por gramticas Conforme o tipo da gramtica que d origem a uma linguagem, estas se classificam em: LSC LLC LR - Linguagem Sensvel ao Contexto - Linguagem Livre de Contexto - Linguagem Regular

A sentena vazia Vamos estender as definies das gramticas Tipo 1, 2 e 3 para permitir produes do tipo S , sendo S o smbolo inicial. Entretanto, isto s ser possvel se S no aparecer do lado direito de qualquer produo. Desde modo, a regra S somente ser utilizada para dar origem sentena vazia. A gramtica que possuir o smbolo inicial aparecendo do lado direito de regras de produo, dever ser transformada em outra equivalente que obedea a esta restrio. Observao: linguagem. gramticas equivalentes devem gerar a mesma

Quando for necessrio transformar a gramtica, dever ser includo um novo smbolo no-terminal (S) que passar a ser o novo smbolo inicial. Em seguida, devero ser includas em P todas as

regras que tinham o smbolo S do lado esquerdo, substituindo este por S, mais a regra S . Exemplo: Modificar a gramtica abaixo de modo a incluir a sentena vazia. G = { { S, A }, { a, b}, P, S } P={ S aS | aA A bA | b } Resposta: G = { { S, S, A }, { a, b}, P, S } P = { S S | S aS | aA A bA | b }

10

Expresses Regulares (ER)

Toda linguagem regular pode ser descrita por uma expresso simples, denominada Expresso Regular (ER). Trata-se de um formalismo gerador, pois expressa como construir (gerar) as palavras da linguagem. Uma ER definida recursivamente a partir de conjuntos (linguagens) bsicas e operao de concatenao e unio. gramticas expresses regulares autmatos finitos } geradores de linguagens reconhecedores de linguagens

Linguagens Regulares

Regras de formao de expresses regulares Dado um alfabeto 1) 2) 3) 4) os se se se smbolos do alfabeto so expresses regulares; R1 e R2 so ER, ento (R1 R2 ) uma ER; R1 e R2 so ER, ento (R1 R2 ) uma ER; R1 uma ER, ento (R1)* uma ER; (R1 R2) representa concatenao de linguagens; (R1) * representa a linguagem formada pela concatenao de zero ou mais palavras de R1. (R1|R2) representa unio de linguagens

Observao: p+ = pp* Exemplos:

11

Expresso Regular AA ba* (a) * (a | b)* (a (a | b))* (a (a | b)*) Identificadores l(l|d)*

Linguagem Gerada contm somente a palavra aa todas as palavras que iniciam por b, seguido de zero ou mais as { , a, aa, aaa, ... } { , a, b, aa, ab, bb, ba, aaa, ... } { , aa, ab, aaaa, abaa, aaab, ... } { a, aa, ab, aaa, aba, aab, ... } { l, ll, ld, lll, ... }

12

Inteiro com sinal (+ | -) d ( d )*

Autmato Finito (AF)

Um autmato finito um modelo matemtico (mquina abstrata) de um sistema, com entradas e sadas discretas. O sistema pode estar em qualquer uma de um nmero finito de configuraes internas (ou estados). O estado de um sistema resume as informaes anteriores at o momento atual do reconhecimento necessrias para determinar o seu comportamento face ao resto da sequncia que est analisando. Um bom exemplo de um autmato finito o mecanismo de controle de um elevador. Ele no lembra todas as requisies anteriores mas somente o andar atual, o direo de movimento (para cima ou para baixo), e a relao de requisies pendentes.

3.1

Autmato Finito Determinstico (AFD) Um AFD definido formalmente por uma 5-tupla (K, , , q0, F), um conjunto finito, no vazio, de estados um alfabeto finito de entrada o estado inicial e q0 K o conjunto de estados finais e F K a funo de transio de estados, mapeando K x em K. Isto

onde: K q0 F ,

(q, a) um estado para cada estado q e smbolo de entrada a.

Um autmato finito representado atravs de um controle finito, que tem acesso a uma fita onde est a sequncia a ser analisada. O autmato percorre esta fita da esquerda para a direita, lendo um smbolo de cada vez. Estando o controle em um estado, apontando para um determinado smbolo na entrada, ocorre uma transio de estado, que faz com que o controle passe para outro estado e avance para o prximo smbolo na entrada. Se isto se repetir com sucesso at o final da fita de entrada e, no final, o autmato estiver em um estado final, a sequncia foi reconhecida. Se, ao contrrio, ocorrer alguma falha (transio impossvel) o reconhecimento para e a sequncia no reconhecida.

13

( q, a ) = p

para q e p K e a , significa que, estando M no estado q e lendo o smbolo de entrada a, o cabeote de leitura movido uma clula para a direita e M vai para o estado p.

Diagrama de Transio Uma outra maneira de representar um autmato finito so os diagramas de transio. Trata-se de um grafo direcionado e rotulado. Os vrtices representam os estados, sendo representados por crculos. Os estados finais so representados por 2 crculos concntricos e o estado inicial indicado por uma seta. As arestas representam as transies entre 2 estados, sendo o rtulo o smbolo reconhecido. Exemplo:

( q0, a ) = q1 ( q1, a ) = q1 ( q1, b ) = q2 T (M) = { an b | n >= 1 }

M = ( ( q0, q1, q2 ), { a, b }, , q0, {q2} )

Tabela de Transio de Estados Uma terceira maneira de representar um autmato finito atravs de uma tabela, indicando na vertical os estados e na horizontal os smbolos do alfabeto. O estado inicial indicado com uma seta e os finais com asteriscos. O contedo da tabela indica as transies de estado possveis. Exemplo: a b

14

q0 q1 q2 * q2 Exemplo:

q1 q1 -

Autmato finito que reconhece sentenas em { 0, 1 }, as quais no contm dois ou mais 1s consecutivos.

M K F

= = = =

( ( ( (

K, , , q0, F ) q0, q1 ) 0, 1 ) q0, q1 ) 0 q0 q0

( q0, 0 ) = q0 ( q0, 1 ) = q1 ( q1, 0 ) = q0

* q0 * q1

1 q1 -

Extenso da funo para o domnio K x * (q, ) = q (q, xa ) = ( (q, x ), a ) para x * e a (q, x ) = p significa que M, iniciando no estado q, com a sequncia x na fita de entrada, entrar no estado p, aps o cabeote mover-se para a direita tantas clulas quanto for o comprimento de x. Uma sentena x aceita por M se ( q0, x ) = p para algum p em F. Linguagem aceita por M O conjunto de todos os x aceitos por M : T(M) = { x | ( q0, x ) = p p F }

15

Qualquer conjunto de sentenas aceito por um autmato finito dito ser REGULAR.

16

3.2

Autmato Finito No-Determinstico (AFND) Um AFND um sistema (K, , , q0, F), onde:

K q0 F ,

um conjunto finito, no vazio, de estados um alfabeto finito de entrada o estado inicial e q0 K o conjunto de estados finais e F K a funo de transio de estados, mapeando K x em 2K. Isto

(q, a) um subconjunto de K para cada estado q e smbolo de entrada a. Observao: 2K o conjunto de todos os subconjuntos de K Diferena importante entre determinsticos e no-determinsticos: (q, a) um conjunto de estados (possivelmente vazio) ao invs de um nico estado. (q, a) = { p1, p2, ..., pk }, significa que, M estando no estado q, olhando a na fita de entrada, move uma clula para a direita e escolhe qualquer um de p1, p2, ..., pk como prximo estado. Exemplo: AFND que aceita o conjunto de todas as sentenas que contm dois 0s ou dois 1s consecutivos.

M = ( { q0, q1, q2, q3, q4 }, { 0, 1 }, , q0, { q2, q4 } ) (q0, (q1, (q2, (q3, (q4, 0) 0) 0) 0) 0) = = = = = { q0, q3 } { q2 } { q4 } { q4 } (q1, (q2, (q3, (q4, (q0, 1) = { q0, q1 } 1) = { q2 } 1) = { q2 } 1) = 1) = { q4 }

Equivalncia entre DFAs e NFAs

17

Teorema:

Se L um conjunto aceito por um autmato finito nodeterminstico, ento existe um autmato finito determinstico que aceita L.

AFD

Seja M = ( K, , , q0, F ) um AFND que aceita L. Definimos um M = ( K, , , q0, F ) tal que:

- os estados de M constituem todos os subconjuntos do conjunto de estados de M: K = 2K. - F o conjunto de todos os estados de K contendo um estado de F. - um elemento de K denotado por [ q1 q2 ... qi ] onde q1 q2 ... qi K. - q0 = [ q0 ] - definimos ([ q1 q2 ... qi ], a ) = [ p1 p2 ... pj ] se e somente se ( { q1, q2, ... qi } ) = { p1, p2, ... pj } = = ( q1, a ) ( q2, a ) ... ( qi, a ) Exemplo Dado o AFND M = ( { q0, q1 }, { 0, 1 }, , q0, { q1 } ), onde: ( ( ( ( q0, q0, q1, q1, 0 1 0 1 ) ) ) ) = = = = { q0, q1 } { q1 } { q0, q1 }

M.

Construir um AFD M que reconhea a mesma linguagem que

M = ( K, { 0, 1 }, , [q0], F ) K = { [q0], [q1], [q0 q1], ) F = { [q1], [q0 q1] ) ( ( ( ( q0, q0, q1, q1, 0 1 0 1 ) ) ) ) = = = = { q0, q1 } { q1 } { q0, q1 } ( ( ( ( [q0], [q0], [q1], [q1], 0 1 0 1 ) ) ) ) = = = = [ q0, q1 ] [ q1 ] [ q0, q1 ]

( [q0, q1], 0 ) = [ q0, q1 ] desde que ( {q0, q1 }, 0 ) = ( q0, 0 ) ( q1, 0 ) = { q0, q1 } = { q0, q1 } e ( [q0, q1], 1 ) = [ q0, q1 ] desde que

18

( {q0, q1 }, 1 ) = ( q0, 1 ) ( q1, 1 ) = { q 1 } { q0, q1 } = { q0, q1 } (, 0 ) = (, 0 ) = q0 *q1 0 1 [q0, q1] q1 [q0,q1]

[q0] * [q1] *[q0,q1] 3.3

0 1 [q0,q1] [q1] [q0,q1] [q0,q1] [q0,q1]

Autmato Finito No-Determinstico com movimentos

(AFND- )

Pode-se estender o modelo do AFND para permitir transies com o como smbolo de entrada. Como exemplo tomemos o diagrama de transio abaixo que aceita a linguagem consistindo de qualquer nmero (incluindo zero) de 0s, seguido de um nmero qualquer de 1s que so seguidos igualmente de por um nmero qualquer de 2s.

Formalmente, ns definimos quntupla (K, , , q0, F), onde: K q0 F

AFND-

como

sendo

uma

um conjunto finito, no vazio, de estados um alfabeto finito de entrada o estado inicial e q0 K o conjunto de estados finais e F K a funo de transio de estados, mapeando K x ( {} ). A inteno que (q, a) consiste de todos os estados p tal que existe uma transio a de q para p, onde a ou um smbolo de .

Exemplo:

19

A tabela de transio para o AFND- acima a seguinte 0 1 2 q0 {q0} {q1} q1 {q1} {q2} q2 {q2} Ns devemos estender a funo de transio para a funo que mapeia K x * em 2K. O resultado desta funo ser todos os estados p tal que pode-se ir de q para p atravs de um caminho w, talvez incluindo-se arcos . Na construo de ser importante saber o conjunto de estados atingveis a partir de um determinado estado q usando-se somente . Ns utilizamos -CLOSURE(q) para assinalar o conjunto de todos os estados p, tal que existe um caminho de q para p nomeado . Exemplo: No exemplo acima o -CLOSURE(q0) = {q0, q1, q2} . Ns podemos considerar que o -CLOSURE(P), onde P um conjunto de estados, seja q em P -CLOSURE(q). Agora, ns definimos como segue: 1) (q, ) = -CLOSURE(q). 2) Para w em * e a em , (q, wa) = -CLOSURE(P), onde P = {p | para algum r em (q, w), p est em (r, a)} conveniente estender e para conjuntos dos estados de 3) 4) (R, a) = q em R (q, a), e (R, w) = q em R (q, w)

para os conjuntos de estados R. Note que nesse caso, (q, a) no necessariamente igual a (q, a), pois (q, a) inclui todos os estados alcanveis a partir de q por um caminho a (incluindo arcos ), enquanto que (q, a) inclui somente os estados alcanveis a partir de q atravs de arcos a. Igualmente, (q, ) no necessariamente igual a (q, ). Exemplo: Considere novamente o exemplo dado anteriormente. (q0, ) = -CLOSURE(q0) = {q0, q1, q2}

20

Ento

(q0, 0) = -CLOSURE( -CLOSURE( -CLOSURE( -CLOSURE( -CLOSURE( (q0, 1) = -CLOSURE( -CLOSURE( -CLOSURE( -CLOSURE( -CLOSURE(

( (q0, ), 0) ( {q0, q1, q2}, 0) (q0, 0) (q1, 0) (q2, 0) ) {q0} ) {q0} ) = {q0, q1, q2} ( (q0, ), 1) ( {q0, q1, q2}, 0) (q0, 1) (q1, 1) (q2, 1) ) {q1} ) {q1} ) = {q1, q2}

Equivalncia entre AFNDs e AFND- s Teorema: Se L aceita por um AFND-, ento L aceita por um AFND. Prova: Considere que M = (K, , , q0, F) seja um AFND-. Construa M = (K, , , q0, F) onde F = F {q0} se -CLOSURE( {q0} ) possui um estado de F, ou F nos outros casos, e (q,a) (q, a) para q K e a . Note que M no possue transies . Base: |x| = 1. definio de . Ento x um smbolo a, e (q0,a) = (q0, a) por

Induo: |x| > 1. Considere x = wa para smbolo a . Ento (q0,wa) = ((q0,w), a) Pela hiptese indutiva, (q0,w) = (q0, w). Considere (q0, w) = P. preciso mostrar que (P,a) = (q0, wa). Porm (P,a) = q em P (q, a) = q em P (q, a). Ento quando P = (q0,w) temos q em P (q, a) = (q, wa) pela regra (2) definio de . Ento (q0,wa) = (q0,wa).

21

Para completar a prova devemos mostrar que (q0,x) contem um estado de F se e somente se (q0, x) contem um estado de F. Se x = , ento a condio imediata a partir da definio de F. Isso , (q0,x) = {q0}, e q0 colocado em F quando (q0, x), que o CLOSURE(q0), contem um estado F. Se x , ento x = wa para algum smbolo a. Se (q0, x) contem um estado de F, ento (q0,x) contem o mesmo estado de F. Do mesmo jeito, se (q0,x) contem um estado de F diferente de q0, ento (q0, x) contem um estado de F. Se (q0,x) contem q0, e q0 no pertence a F, ento como (q0, x) = -CLOSURE(((q0,w),a)), o estado em -CLOSURE(q0) e em F precisa estar em (q0, x). Exemplo: Considere o AFND- dado anteriormente, vamos transform-lo em AFND. F = {q0, q1, q2} * q0 {q2} q1 {q2} * q2 {q2} O diagrama seria assim: 0 1 2 {q0,q1,q2} {q1,q2} {q1, q2}

3.4

Relao entre Autmatos Finitos e Gramticas Regulares

Teorema: Se G = (N, T, P, S) uma gramtica do tipo regular ento existe um autmato finito M = (K, T, , S, F) tal que T(M) = L(G). M um AFND (ou AFND-) os estados de M so as variveis de G, mais um estado adicional a, A N K = N {A} o estado inicial de M S

22

se P tem produo S ento F = {S,A}, caso contrrio F = {A} transies de M: 1. (B,a) = A para cada B a P 2. (B,a) = C para cada B aC P 3. (A,a) = para todo a T

Exemplo: G = ( {S,B}, {0,1}, P, S ) P: S 0B B 0B | 1S | 0

Construir um autmato finito que aceite L(G): M = ( {S,B,A}, {0,1}, , S, {A} ) um AFND (ou AFND-) (S,0) = {B} (S,1) = (B,0) = {B,A} (B,1) = {S} S 0B B 0B | 0 B 1S

3.5

Equivalncia entre Autmatos Finitos e Expresses Regulares

Teorema: Considere que r uma expresso regular. Ento existe um AFND- que aceita L(r). Prova: Ser mostrado por induo no nmero de operadores da ER que existe um AFND-, tendo um estado final que no possui sada a partir dele, tal que L(M) = L(r). Base: (Sem operadores) A ER r precisa ser , , ou a para algum a . Os AFNDs abaixo claramente satisfazem as condies.

Induo: (um ou mais operadores)

23

Assuma que o teorema verdadeiro para ER com menos que i operadores, i >= 1. Considere r tendo i operadores, Existe 3 casos dependendo da forma de r. CASO 1: r = r1 + r2. r1 e r2 precisam ter menos que i operadores. Ento existe AFND-s M1 = (Q1, 1, 1, q1, {f1}) e M2 = (Q2, 2, 2, q2, {f2}) com L(M1) = L(r1) e L(M2) = L(r2). J que ns podemos renomear os estados de um AF ao nosso prazer, ns assumimos que Q1 e Q2 so desarticulados. Considere q0 como sendo um novo estado e f0 um novo estado final. Construa M = (Q1 Q2 {q0, f0}, 1 2, , q0, { f0} ) onde definido por i) ii) iii) iv) (q0, ) = {q1, q2}, (q, a) = 1(q, a) para q Q1 - { f1} e a 1 {}, (q, a) = 2(q, a) para q Q2 - { f2} e a 2 {}, ( f1, ) = ( f2, ) = {f0}.

Lembre-se que pela hiptese indutiva que no existe transies fora de f1 e f2 em M1 ou M2. Ento todos os movimentos de M1 e M2 esto presentes em M. A construo de M mostrada na figura abaixo. Qualquer caminho no diagrama de transio de M a partir de q0 para f0 precisa comear indo para q1 ou q2 com . Se o caminho vai para q1, ento ele seguir qualquer caminho em M1 para f1 e ento ir para f0 com . Similarmente, podemos concluir o mesmo com caminhos atravs de M2. Estes so os nicos caminhos possveis de q0 para f0. Segue-se imediatamente que existe um caminho x em M a partir de q0 para f0 se e somente se existe um caminho x em M1 a partir de q1 para f1 ou caminho x em M2 a partir de q2 para f2. Ento L(M) = L(M1) L(M2) como desejado.

CASO 2: r = r1 r2. Considere M1 e M2 sendo como em CASO 1 e construa M = (Q1 Q2, 1 2, , {q0}, { f2} )

24

onde dado por i) ii) iii) (q, a) = 1(q, a) para q Q1 - { f1} e a 1 {}, ( f1, ) = {q2}, (q, a) = 2(q, a) para q Q2 e a 2 {}.

A construo de M mostrada na figura abaixo. Cada caminho em M a partir de q1 para f2 um caminho x de q1 para f1, seguido pela ligao de f1 para q2 por seguido por um caminho y de q2 para f2. Ento L(M) = { xy | x L(M1) e y L(M2)} e L(M) = L(M1) L(M2) como desejado.

CASO 3: r = r1*. Considere M1 sendo como em CASO 1 e L(M1) = r1, construa M = (Q1 {q0, f0}, 1, , q0, { f0} ) onde dado por i) ii) ( q0, ) = 1(f1, ) = {q1, f0}, (q, a) = 1(q, a) para q Q1 - { f1} e a 1 {}.

A construo de M mostrada na figura abaixo. Cada caminho a partir de q0 para f0 consiste de um caminho de q0 para f0 com ou um caminho de q0 para f1 com seguido por algum nmero (possivelmente zero) de caminhos de q1 para f1 e ento novamente para q1 com , cada caminho determinado por uma sequncia de smbolos L(M1), seguido por um caminho de q1 para f1 com com uma sequncia de smbolos L(M1) e finalmente para f0 com . Ento existe um caminho x em M a partir de q0 para f0 se e somente se ns podemos escrever x = x1 x2 ... xj para algum j >= 0 (o caso j = 0 x = ) tal que cada xi est em L(M1). Ento L(M) = L(M1)* como desejado.

25

26

Exemplo: Construir um AFND- para expresso regula 0 1* | 1. Podemos reescrever essa expresso com parenteses para ficar mais claro a precedncia. Ela ficaria assim: (0(1*)) | 1, ento essa expresso na forma r1 + r2, onde r1 = 01* e r2 = 1. O autmato para r2 fcil, sendo representado abaixo.

Ns podemos expressar r1 como r3 r4, onde r3 = 0 e r4 = 1*. O autmato para r3 seria tambm facilmente construido:

Podemos notar que r4 r5* onde r5 = 1. Um AF para r5 seria

Para construir um AF para r5* usa-se o CASO 3 visto anteriormente. O AF resultante mostrado abaixo.

27

Ento, para r1 = r3 r4 usa-se o CASO 2 visto anteriormente. o AF resultante seria o seguinte:

E finalmente, utiliza-se o CASO 1 para completar o AF para r = r1 + r2. O AF final mostrado abaixo.

3.6

Minizao de AFD completo Um autmato finito M = (K, T, , q0, F) mnimo quando:

1. no possuir estados inacessveis; 2. no possuir estados mortos; 3. no possuir estados equivalentes. Construo do AF mnimo:
1.

retirar de K os estados inacessveis, ou seja, todo estado q K para o qual no exista nenhuma sentena tal que, a partir de q0, q seja alcanado durante o reconhecimento; retirar de K os estados mortos, ou seja, todo estado que no seja estado final a partir do qual nenhum estado final poder ser alcanado durante um reconhecimento; construir todas as possveis classes de equivalncia de estados; construir M = (K, T, , q0, F) conforme segue:

2.

3. 4.

28

K o conjunto das classes de equivalncia obtidas; q0 a classe de equivalncia que contm q0; F o conjunto das classes de equivalncia que contm pelo menos um estado de F; o conjunto de transies tais que ([p], a) = [q] para toda transio (p1, a) = q1, onde p1 e q1 so elementos de [p] e
[q] respectivamente.

Construo das Classes de Equivalncia: Um conjunto de estados q1, q2, ..., qj est em uma mesma classe de equivalncia se todas as transies possveis a partir de cada um destes estados levam o autmato aos estados qi, qi+1, ..., qn, estando estes ltimos todos em uma mesma classe de equivalncia. Para construir as classes de equivalncia procede-se da seguinte maneira:
1.

criar um estado para representar as transies indefinidas;

2. dividir K em duas classes de equivalncia iniciais, uma contendo os estados finais e a outra todos os demais estados de K; 3. dividir sucessivamente as classes obtidas, de acordo com o conceito de classe de equivalncia, at que nenhuma nova classe possa ser obtida. Exemplo: Construa o AF mnimo que reconhea a mesma da linguagem do AF da tabela abaixo: * * q0 q1 q2 q3 q4 q5 a q1 q3 q3 q4 q5 b q5 q2 q2 q3 q1 q5

a) estado inacessvel : q4 b) estado morto : q5 c) classes de equivalncia : a q0 q1 q1 0

b 0 q2

29

* *

q2 q3

q3 q3

q2 q3 :

d) Autmato Finito sem Classes Equivalentes a b * [0] [0] [0] [1] [3] [2] [2] [2] [2] [3] [2] [0] e) Autmato Finito Mnimo a * [0] 0 [1] 3 [3] : b 0 0

30

Gramticas Livres de Contexto (GLC)

As Gramticas Livres de Contexto tem grande importncia dentro do estudo das Linguagens Formais pois atravs delas pode ser descrita a maior parte das construes sintticas das linguagens de programao. 4.1 Extenso da definio de GLC

Vamos estender a definio de GLC para permitir quaisquer produes da forma: A Estas produes, cujo lado direito contm somente a sentena vazia, so chamadas de -produes. Deste modo, uma GLC definida formalmente por regras de produo dadas por: P = { A | A N, (N T)* ) GLC -livre Uma GLC -livre quando no possui -produes ou quando possui uma nica -produo, S , onde S o smbolo inicial da gramtica e S no aparece do lado direito de nenhuma regra de produo. 4.2 rvores de Derivao para GLC

As rvores de derivao so representaes grficas para as derivaes nas GLC. Atravs destas, temos representada explicitamente a estrutura hierrquica que est implcita na linguagem. Formalmente, consideremos que G = (N, T, P, S) seja uma GLC. Uma rvore uma rvore de derivao para G se:
1.

todo nodo tem um rtulo que um smbolo de N T { };

2. o rtulo da raiz S; 3. se um nodo A tem um ou mais descendentes, ento A um elemento de N;


4.

se A1, A2, ..., An so descendentes diretos de A, da esquerda para a direita, ento A A1 A2 ... An uma produo de P;

31

5.

se D a nica subrvore da raiz e tem rtulo , ento a regra S P.

Exemplo: Considere a gramtica G = ( {S, A}, {a, b}, P, S ), onde P consiste de: S aAS | a A SbA | SS | ba a derivao da sentena aabbaa dada por: S aAS aSbAS aabAS aabbaS aabbaa A rvore de derivao correspondente a essa sentena seria: S a S a A b A b S a a

Profundidade da rvore de Derivao o comprimento do maior caminho entre a raiz e um nodo terminal. No exemplo anterior, a rvore de derivao da sentena tem profundidade 3. Limite de uma rvore de Derivao a sequncia formada pela concatenao, da esquerda para a direita, das folhas da rvore de derivao.

32

4.3

Derivao mais esquerda e mais direita

Uma rvore de derivao ignora variaes na ordem em que os smbolos foram substitudos na derivao. Por exemplo, na gramtica de expresso aritmtica abaixo: G = ( {E}, {+, *. (, ), -, id}, P, E ) onde P= E E E E E E + E E * E ( E ) - E id

a sentena - (id * id) pode ser derivada de dois modos diferentes: E - E - ( E ) - ( E + E ) - ( id + E ) - ( id + id ) ou E - E - ( E ) - ( E + E ) - ( E + id ) - ( id + id ) As derivaes acima correspondem mesma rvore de derivao: E ( E id E E + ) E id

Uma derivao chamada de mais esquerda quando o smbolo substitudo for o no-terminal mais esquerda da forma sentencial. Na derivao mais direita, o smbolo substitudo o no-terminal mais direita. Nas duas derivaes da sentena - ( id + id ) mostradas acima, a primeira mais esquerda e a segunda mais direita. Exemplo: Para a mesma gramtica anterior, obtenha as derivaes mais esquerda e mais direita da sentena id + id * id

33

Soluo:

Derivao mais esquerda E E + E id + E id + E * E id + id * E id + id * id Derivao mais direita E E + E E + E * E E + E * id E + id * id id + id * id

4.4

Gramtica Ambgua

Uma GLC ambgua quando, para alguma sentena da linguagem gerada, existe mais de uma rvore de derivao. Exemplo: A gramtica de expresso aritmtica apresentada antes ambgua. Isto pode ser visto atravs de duas rvores de derivao diferentes para a sentena vista: id + id * id E E id + E id E * E id E id E + E * E id E id

As duas derivaes analisadas no exemplo anterior esto representadas na primeira rvore de derivao. Linguagens Inerentemente Ambgua uma linguagem para a qual todas as GLC que a geram so ambguas. Exemplo de linguagem inerentemente ambgua: L = { an bn cm dm | n >= 1, m >= 1} { an bm cm dn | n >= 1, m >= 1} 4.5 Transformaes em G.L.C

A seguir sero vistas algumas transformaes que podem ser efetuadas em GLCs com o objetivo de torn-las mais simples ou de prepar-las para posteriores aplicaes. importante notar que, qualquer que seja a transformao efetuada, a linguagem gerada dever ser sempre a mesma.

34

4.5.1 Eliminao de Smbolos Inteis Em uma GLC, um smbolo (terminal ou no-terminal) intil se ele no aparece na derivao de nenhuma sentena. Ou seja, um smbolo intil se ele estril (isto , no gera nenhuma sequncia de terminais pertencente a uma sentena) ou inalcanvel (isto , no aparece em nenhuma forma sentencial da gramtica). Determinao do conjunto de smbolos frteis Pode ser efetuada atravs do seguinte algoritmo: a) b) Construir o conjunto N0 = e fazer i = 1 Repetir Ni = Ni-1 { A | A P e (Ni-1 T)* } i=i+1 at que Ni = Ni-1 Ni o conjunto de smbolos frteis.

c)

Se o smbolo inicial no fizer parte do conjunto de smbolos frteis, a linguagem gerada pela gramtica vazia. Exemplo: Retirar os smbolos estreis da gramtica: G = ( {S,A,B,C,D}, {a,b,c,d}, P, S ) P: S a A A a | b B B b | d D C cC | c D d D Soluo: N0 = N1 = {A,B,C} N2 = {S,A,B,C} N3 = {S,A,B,C} = N2 Conjunto de smbolos frteis: {S,A,B,C} Gramtica simplificada: G = ( {S,A,B,C}, {a,b,c}, P, S ) P: S a A A a | b B B b C cC | c Determinao do conjunto de smbolos alcanveis

35

Pode ser efetuada atravs do seguinte algoritmo: a) b) Construir o conjunto V0 = {S} (S = smbolo inicial) e fazer i = 1 Repetir Vi = { X|existe algum A X e A Vi-1 e , (N T)*} V i-1 i=i+1 at que Vi = Vi-1 Vi o conjunto de smbolos alcanveis.

c)

Exemplo: Simplificar a gramtica G do exemplo anterior, retirando os smbolos inalcanveis. Soluo: V0 = V1 = V2 = V3 = {S} {S, a, A} {S, a, A, b, B} {S, a, A, b, B} = V2

Conjunto de smbolos alcanveis: {S, a, A, b, B} Gramtica simplificada: G = ( {S,A,B}, {a,b}, P, S ) P: S a A A a | b B B b OBS: Note que aparentemente os dois passos so independentes e podem ser aplicados em qualquer ordem. Isto no verdadeiro. Isto ocorre porque a eliminao de smbolos inativos pode ocasionar o surgimento de smbolos inatingveis. O contrrio no verdadeiro. 4.5.2 Transformao de uma GLC qualquer para uma GLC -Livre Esta transformao sempre possvel e pode ser efetuada pelo seguinte algoritmo: a) Reunir em um conjunto os no-terminais que derivam direta ou indiretamente a sentena vazia: Ne = {A | A N e A + } Construir o conjunto de regras P como segue: b1) incluir em P todas as regras de P, com exceo daquelas da forma A b2) para cada ocorrncia de um smbolo Ne do lado direito de alguma regra de P, incluir em P mais uma regra, substituindo este smbolo por . Isto , para regra de P do

b)

36

tipo A B, B Ne e , V* incluir em P a regra A c) Se S Ne, adicionar a P as regras S S e S , sendo que N ficar igual a N S. Caso contrrio trocar os nomes de S por S e N por N. A nova gramtica ser definida por: G = (N, T, P, S)

d)

Exemplo: Transformar as GLC abaixo, definidas pelo respectivo conjunto de regras de produo P, para GLC -Livres. a) G = ( {S, B}, {a,b}, P, S ) P: S a B B b B | Soluo: Ne = {B} P : S a B | a B b B | b G = ( {S, D, C}, {b,c,d,e}, P, S ) P: S b D C e D d D | C c C | Soluo: Ne = {D, C} P : S b D C e | b C e | b D e | b e D d D | d C c C | c G = ( {S}, {a}, P, S ) P: S a S | Soluo: Ne = {S} P : S S | S a S | a

b)

c)

4.5.3 Remoo de Produes Simples (unitrias) Produes simples so produes da forma A B onde A e B N. Estas produes podem ser removidas de uma GLC atravs do seguinte algoritmo:

37

a) b)

Transformar a GLC em uma GLC -livre, se necessrio Para todo no-terminal de N, construir um conjunto com os no-terminais que ele pode derivar, em um ou mais passos. Isto , para todo A N, construir NA = { B | A * B } Construir P como segue: se B P e no uma produo simples, adicione a P as produes: A para todo A | B NA A GLC equivalente, sem produes simples, ser definida por: G = (N, T, P, S)

c)

d)

Exemplo: Transformar as GLC abaixo em gramticas equivalentes que no apresentem produes simples. a) G = ( {S, A}, {a,b}, P, S ) P: S b S | A A a A | a Soluo: Ns = {A} NA = {} P : S b S | a A | a A a A | a G = ( {S, A, B}, {a,b,c}, P, S ) P: S a S b | A A a A | B B b B c | b c Soluo: Ns = {A, B} NA = {B} NB = {} P : S a S b | a A | b B c | b c A a A | b B c | b c B b B c | b c

b)

38

4.5.4 Fatorao de GLC Uma GLC est fatorada se ela determinstica, isto , no possui produes cujo ladodireito inicie com o mesmo conjunto de smbolos ou com smbolos que gerem sequncias que iniciem com o mesmo conjunto de smbolos. Por exemplo, a gramtica fatorada no dever apresentar as seguintes regras: A a B | a C pois as duas iniciam com o mesmo terminal a. Outro exemplo de gramtica no-fatorada o seguinte: S A | B A a c B a b Para fatorar uma GLC devemos alterar as envolvidas no no-determinismo da seguinte maneira: produes

a) as produes que apresentam no-determinismo direto, da forma A | sero substitudas por A A A | sendo A um novo no-terminal b) O no-determinismo indireto retirado fazendo, nas regras de produo, as derivaes necessrias para torn-lo um determinismo direto, resolvido posteriormente como no item anterior.

Exemplo: Fatorar as GLC abaixo a) G = ( {S, A, B}, {a,b}, P, S ) P: S a A | a B A a A | a B b Soluo: P : S a S S A | B A a A A A | B b

39

b)

G = ( {S, A}, {a,b}, P, S ) P: S A b | a b | b a A A a a b | b Soluo: P : S a a b b | b b | a b | b a A A a a b | b P: S a S | b S S a b b | b S b | a A A a a b | b

4.5.5 Eliminao de Recurso Esquerda (e a Direita) Uma gramtica G = (N, T, P, S) tem recurso esquerda se existe A N tal que A + A , (N T)* Uma gramtica G = (N, T, P, S) tem recurso direita se existe A N tal que A + A, (N T)* A recurso dita direta se a derivao acima for em um passo, isto : - G tem recurso direta esquerda se existe produo A A P - G tem recurso direta direita se existe produo A A P Para eliminar a recurso direta esquerda usa-se o seguinte algoritmo: Seja G = (N, T, P, S) uma GLC sem produes e sem produes do tipo A A. a) Para eliminar recurso direta esquerda envolvendo um smbolo no-terminal A dividimos inicialmente o conjunto das produes de P do tipo A em subconjuntos: C1 = conjunto das produes A que apresentam recurso direta esquerda, ou seja, A A P onde (N T)*. C2 = conjunto das produes A que no apresentam recurso direta esquerda, ou seja, A P | A para qualquer . b) c) Cria-se um novo no-terminal B Substitua as produes A da gramtica original de acordo com os seguintes passos:

40

c.1) para cada produo A i C2 criar a produo A i B c.2) para cada produo A Ai C1 criar as produes B i B B OBS: A recurso direta esquerda foi transferida para recurso direita. Se a gramtica original tiver produes A A podero surgir produes aps a execuo do algoritmo. Alm disso, podem aparecer produes simples aps a execuo do algortimo. O algoritmo para eliminao de recurso direta direita anlogo. Para eliminar a recurso geral esquerda usa-se o seguinte algoritmo: Mtodo: Parte-se de uma gramtica G sem produes a) Estabelea uma ordenao qualquer no conjunto de noterminais da gramtica original G, isto , faa N = { A1, A2, A3, ..., An}, sendo que A1 < A2 < A3 < ... < An Gere uma GLC G = (N, T, P, S) equivalente em que para toda regra do tipo Ai Aj onde (N T)*, deve ocorrer Ai < Aj . k=0 enquanto existir k tal que existe produo Ak Aj tal que k >= j, isto , existe produo fora do padro Ai Aj , i < j faa: - procure o menor inteiro k tal que exista produo Ak Aj tal que k >= j OBS: Isto significa que para este k - existe produo incorreta Ak Aj onde k >= j - para todo i < k, todas as produes Ai Aj esto corretas, isto , i < j - enquanto houver produes do tipo Ak Aj , onde k > j faa: - eliminar a produo Ak Aj - para cada produo Aj existentes criar a produo Ak - se houver recurso direta esquerda com o smbolo Ak, isto , existe a produo Ak Ak , elimine-a pelo algortimo dado anteriormente.

b) c)

Exemplo:

41

Elimine as recurses esquerda da GLC abaixo G = (N, T, P, S) P: S A a A S b | c A | a Soluo: P: S A a A A a b | c A | a P: S A a A c A A | a A A a b A | 4.6 Forma Normal de Chomsky (CNF)

Uma GLC est na Forma Normal de Chomsky se ela -livre e apresenta todas as produes da forma onde A B C ou A a

A, B, C N e a T.

Prova-se que toda Linguagem Livre de Contexto -livre pode ser gerada por uma GLC na Forma Normal de Chomsky. Uma GLC -livre G = ( N, T, P, S ) pode ser colocada na CNF atravs do seguinte algoritmo: a) b) obter G = ( N, T, P, S ) a partir de G, removendo de G as suas produes simples, de modo que L(G) = L(G) nas regras de G cujo lado direito apresenta mais de um termo, substituir cada terminal (por exemplo, a T) por um novo noterminal (Aa), incluindo para cada um destes novos noterminais uma nova regra, Aa a, resultando G = (N, T, P, S) substituir cada regra do tipo A B1 B2 ... Bm, m >= 3 onde A, B1, B2, ...., Bm so no-terminais, pelo conjunto de regras A B1 B1 B1 B2 B2 ... Bm-2 Bm-1 Bm onde B1, B2, ..., Bm-2 so novos no-terminais a gramtica gerada est na CNF e dada por G = ( N, T, P, S )

c)

d)

Exemplo:

42

Dada a GLC abaixo, ache a gramtica equivalente na CNF G = ( {S, A, B}, {a, b}, P, S ) P: Soluo a) P: S A | A B A A a A | a B b B | b S a A | a | A B A A a A | a B b B | b S Aa A | a | A B A A Aa A | a B Ab B | b Aa a Ab b S Aa A | a | A B B B A A Aa A | a B Ab B | b Aa a Ab b

b)

P:

c)

P:

4.7

Forma Normal de Greibach (GNF)

Uma GLC est na Forma Normal de Greibach se ela -livre e apresenta todas as produes na forma: A a onde A N, a T e N*. Prova-se que toda a Linguagem Livre de Contexto -livre pode ser gerada por uma GLC na Forma Normal de Greibach. Para achar a gramtica equivalente a G = ( N, T, P, S), na GNF, deve-se seguir os seguintes passos: a) achar G = ( N, T, P, S ) tal que L(G) = L(G) e que G esteja na CNF b) ordenar os no-terminais de G em uma ordem quaisquer - por exemplo: N = { A1, A2, ..., Am } c) modificar as regras de P de modo a que, se Ai Aj uma regra de P, ento j > i d) a gramtica obtida do passo anterior, G, apresentar todas as

43

regras de Am com o lado direito iniciando por um terminal; atravs de substituies sucessivas dos primeiros termos das regras Ai anteriores, coloca-se estas tambm nessa forma e) se no item c tiverem sido includos novos no-terminais Bi (para retirar recurses esquerda), fazer tambm para as regras correspondentes a estes, as devidas substituies dos primeiros termos (que sero sempre terminais ou Ai) f) a gramtica final, G, est na GNF

Exemplo: Coloque a GLC abaixo na GNF G = ( {S,A}, {a,b}, P, S ) P: Soluo a) b) S A S | a A S A | b

G j est na CNF Renomear os no-terminais (ordem): S = A1 e A = A2 Logo P: A1 A2 A1 | a A2 A1 A2 | b a nica regra a modificar A2 A1 A2 substituindo A1 nessa regra pelas suas regras temos A2 A2 A1 A2 |a A2 | b para retirar a recursividade esquerda da 1 regra, introduzimos um novo no-terminal B2 resultando para G: P: A1 A2 A1 | a A2 a A2 B2 |b B2 |a A2 | b B2 A1 A2 B2 | A1 A2 P: A2 a A2 B2 | b B2|a A2 | b A1 a A2 B2 A1 | b B2 A1 | a A2 A1| b A1 | a B2 a A2 B2 A1 A2 B2 | b B2 A1 A2 B2 | a A2 A1 A2 B2 | b A1 A2 B2 |a A2 B2 | a A2 B2 A1 A2 | b B2 A1 A2 |a A2 A1 A2 | b A1 A2 | a A2

c)

d)

4.8

Outros Tipos de GLC

44

a)

Gramtica reduzida uma GLC que satisfaz s seguintes condies: 1 - L(G) e 2 - se A P ento A e G no possui smbolos inteis

b)

Gramtica sem ciclos uma GLC que no possui derivao da forma: A + A para A N

c)

Gramtica Prpria uma GLC que 1 - no possui ciclos 2 - -livre 3 - no possui smbolos inteis

d)

Gramtica de Operadores uma GLC que no possui produes da forma: A ... B C ... onde A, B, C N

ou seja, uma GLC na qual no aparecem dois no-terminais juntos em nenhuma regra de produo. e) Gramtica Linear

uma GLC na qual todas as produes se apresentam na forma: A x B w ou A x onde A, B N e x, w T*

45

Autmato de Pilha

O Autmato de Pilha a mquina abstrata que reconhece as Linguagens Livres de Contexto (LLC). chamado usualmente de Pushdown Automata (PDA). Consiste de um controle finito que tem acesso a uma fita de entrada (onde est a sequncia a ser analisada) e a uma pilha. O controle percorre a fita de entrada da esquerda para a direita, lendo um smbolo de cada vez. Na pilha, o controle pode empilhar smbolos, alm de retirar ou substituir o smbolo do topo. Uma caracterstica do PDA ser no-determinstico. Fita de Entrada 0 1 1 0 1

controle finito

w x y z Pilha

Movimento do Autmato de Pilha O movimento do PDA determinado pelo smbolo apontado na entrada, pelo smbolo no topo da pilha e pelo estado do controle finito. Existem dois tipos de movimentos: 1) um smbolo da fita lido e o cabeote avana para o prximo smbolo; 2) -move - movimento vazio, no qual o cabeote no se move, no importando qual o smbolo que est sendo apontado na fita de entrada. Linguagem Aceita por um PDA o conjunto de sentenas que, quando o autmato chegar no final de seu reconhecimento: a) b) resultam na pilha vazia ou levam o autmato a estado final.

46

Estes dois tipos de reconhecimento, por pilha vazia ou por estado final, so equivalentes. No reconhecimento atravs de pilha vazia, o conjunto de estados finais do autmato irrelevante, podendo ser vazio. Uma linguagem aceita por um autmato de pilha se e somente se for uma Linguagem Livre de Contexto. Definio de Autmato de Pilha Um autmato de pilha M um sistema definido por: M = ( K, , , , q0, Z0, F ) Kq0 Z0 Fonde

conjunto finito de estados alfabeto finito de entrada alfabeto finito da pilha estado inicial, sendo que q0 K smbolo inicial na pilha, sendo que Z0 conjunto finito de estados finais, sendo que F K mapeamentos

: K x ( ) x subconjuntos de K x * Tipos de mapeamentos: 1. ( q, a, z ) = ( ( p1, 1 ), ( p2, 2 ), ...., ( pm, m ) ) q, p1, p2, ..., pm K e a , Z , 1 * significando que o autmato de pilha M, estando no estado q, vendo o smbolo a na entrada e sendo Z o smbolo que est no topo da pilha, pode, para qualquer i, entrar no estado pi, substituir Z por i e avanar o cabeote de leitura da fita de entrada para o prximo smbolo. 2. ( q, , z ) = ( ( p1, 1 ), ( p2, 2 ), ...., ( pm, m ) ) significando que o autmato de pilha M, estando no estado q, independente do smbolo de entrada e com Z no topo da pilha, pode passar para um estado pi e substituir Z por i, sem avanar o cabeote de leitura da entrada. Costuma-se representar a pilha na horizontal, sendo o smbolo do topo da pilha aquele que est mais esquerda de i. onde:

47

Dependendo do comprimento de , temos as seguintes possibilidades de atuao do autmato de pilha: || > 1 || = 1 || = 0 troca o smbolo do topo e empilha outros troca o smbolo do topo desempilha ( = ).

Autmato de Pilha Determinstico Um PDA determinstico se: 1. 2. para cada q K e Z , sempre que (q, m Z) ento (1, a, Z) = para todo a para qualquer q K e Z e a , (q, m Z) nunca contm mais de um elemento.

A condio 1 evita a possibilidade de uma escolha entre um movimento independente da entrada (-move) e um movimento envolvendo um smbolo de entrada, enquanto que a condio 2 previne uma escolha de movimento para qualquer (q, a, Z) ou (q, , Z). Exemplo: um PDA que aceita, por pilha vazia, a linguagem ( w C wr | w {0,1}* ) onde wr a sequncia reversa de w, pode ser definido da seguinte maneira: M = ( {q1, q2}, {0,1,C}, {Z0,Z,U}, , q1, Z0, 0) ( ( ( ( ( ( ( ( ( ( ( ( q1, q1, q1, q1, q1, q1, q2, q2, q1, q1, q1, q2, 0, Z0 ) 0, Z ) 0, U ) C, Z0 ) C, Z ) C, U ) 0, Z ) , Z0 ) 1, Z0 ) 1, Z ) 1, U ) 1, U ) = = = = = = { { { { { { (q1, (q1, (q1, (q2, (q2, (q2, = (q2, (q1, = (q1, (q2, ZZ0) } ZZ) } ZU) } Z0) } Z) } U) } { (q2, ) } ) } UZ0) } { (q1, UZ) } UU) } ) }

={ ={ ={ ={

Configurao de um Autmato de Pilha

48

Chama-se de configurao de um PDA a um par (q, ) onde q K e *. Significa que o autmato est no estado q, com na pilha. por: A linguagem de uma configurao para outra representada a: (q, Z ) ( p, )
M

onde a , * Z (p, ) (q, a, Z) De acordo com as regras do PDA, o smbolo de entrada a pode levar M a passar de uma configurao (q, Z ) para outra (p, ). Do mesmo modo, podemos representar: a1 a2 ... an : (q1, 1) * ( qn+1, n+1)
M

se

a1, a2, ..., an q1, q2, ..., q n+1 K 1, 2, ...., n+1 * ai : (qi, i) ( qi+1, i+1) para todo 1 <= i <= n
M

Por conveno: : (q, ) * ( q, )


M

Descrio instantnea de um PDA A descrio instantnea de um PDA dada por seu estado, o contedo de sua pilha e pelo restante da sequncia de entrada a analisar. Assim, a descrio instantnea (q1, bc, AB) significa que o autmato est no estado q1, falta reconhecer bc e a pilha contm AB (com o smbolo A no topo). Exemplo: usando a descrio instantnea, o reconhecimento da sentena

49

01C10 atravs do PDA do exemplo anterior seria representado por (q1, 01C10, Z0) (q1, (q1, (q2, (q2, (q2, (q2, 1C10, ZZ0) C10, UZZ0) 10, UZZ0) 0, ZZ0) , Z0) , )

Linguagem aceita por um PDA Utilizando a notao vista de configurao de uma autmato de pilha, podemos representar a linguagem aceita por ele de duas maneiras, conforme o modo em que efetuado o reconhecimento das sentenas: T(M) = = T(M) = = linguagem aceita por estado final {w | w : (q0, Z0) * ( q, ) para * e q F}
M

linguagem aceita por pilha vazia {w | w : (q0, Z0) * ( q, ) para q F}


M

Representao Grfica do Autmato de Pilha O PDA tambm pode ser representado por um grafo, similar aquele utilizado no autmato finito. Os rtulos dos arcos devero indicar, alm do smbolo apontado na fita de entrada, o smbolo que est no topo da pilha e o conjunto de smbolos que deve substituir aquele que est no topo da pilha durante a transio. Isto , o rtulo deve ser da forma (a, W) Z a W Z * Exemplo: L(M) = ( an bn | n >= 0 ) As transies representadas no grafo deste exemplo so as onde

o smbolo de entrada o smbolo no topo da pilha a sequncia que ir substituir o topo da pilha

50

seguintes: ( ( ( ( ( q0, q1, q1, q2, q2, a, Z0 ) a, Z0 ) b, Z0 ) b, Z0 ) , Z0 ) = = = = = { { { { { (q1, (q1, (q2, (q2, (q3, XZ0) } XX) } ) } ) } ) }

5.1

PDA e Linguagens Livres de Contexto

Teorema: Se L uma Linguagem Livre de Contexto (LLC), ento existe um autmato de pilha M tal que L = N (M). Algoritmo para construir M Seja G = (N, T, P, S) uma GLC na GNF. Assumimos que L(G). O PDA M que reconhece esta linguagem dado por: M = ( {q1}, T, N, , q1, S, ) O mapeamento construdo a partir das regras de P, sendo que para regra A a P corresponde ( q1, a, A ) (q1, ) Exemplo: Construir um PDA M para reconhecer a linguagem gerada pela gramtica abaixo: G = ( {S,A}, {a,b}, {S aAA, A bS | aS | a}, S ) Soluo: M = ( {q1}, {a,b}, {S,A}, , q1, S, ) ( q1, a, S ) = { (q1, AA) } ( q1, b, A ) = { (q1, S) } ( q1, a, A ) = { (q1, S), (q1, ) } Teorema: Se L uma linguagem reconhecida por algum autmato de pilha, ento L uma Linguagem Livre de Contexto, isto , pode ser gerada por uma gramtica G livre de contexto. Algoritmo para construir G Seja M = ( K, , , , q0, Z0, ) um PDA. A gramtica que gera a linguagem reconhecida por este autmato dada por: G = ( N, , P, S )

51

onde NPconjunto de objetos da forma [q, A, p] onde q, p K e A , mais o smbolo S obtido da seguinte forma: 1. S [q0, Z0, q] para cada q K 2. [q, A, p] a [q1, B1, q2] [q2, B2, q3] ... [qm, Bm, qm+1] para cada q, q1, q2, ..., qm+1 K, onde p = qm+1, a U , A, B1, B2, ..., Bm , tal que (q, a, A) (q1, B1B2 ... Bm). Se m = 0, ento q1 = p, (q, a, A) (p, ) e a produo [q, A, p] a. onde

Exemplo: Seja M = ( {q0, q1}, {0,1}, {X, Z0}, , q0, Z0, ) (q0, (q0, (q0, (q1, (q1, (q1, 0, Z0) 0, X) 1, X) 1, X) , X) , Z0) = = = = = = { { { { { { (q0, (q0, (q1, (q1, (q1, (q1, XZ0) } XX) } ) } ) } ) } ) }

Construir uma GLC G = (N, T, P, S) tal que L(G) = T(M) Soluo: N = { S, [q0, X, q0], [q0, X, q1], [q1, X, q0], [q1, X, q1], [q0, Z0, q0], [q0, Z0, q1], [q1, Z0, q0], [q1, Z0, q1] } T = { 0, 1} Na construo das regras de produo inicia-se com as produes de S, acrescentando a P s as produes dos noterminais que aparecem do lado direito de algum regra: P: S [q0, Z0, q0] [q0, Z0, q1] [q0, X, q0] [q0, X, q1] [q1, Z0, q1] [q1, X, q1] | | | | | [q0, Z0, q0] [q0, Z0, q1] 0 [q0, X, q0] [q0, Z0, q0] 0 [q0, X, q1] [q1, Z0, q0] 0 [q0, X, q0] [q0, X, q1] 0 [q0, X, q1] [q1, X, q1] 0 [q0, X, q0] [q0, X, q0] 0 [q0, X, q1] [q1, X, q0] 0 [q0, X, q0] [q0, X, q1] 0 [q0, X, q1] [q1, X, q1] 1 1|

Como no existem produes para os no-terminais [q0, X, q0] e [q1, Z0, q0], as regras que os apresentam devem ser removidas.

52

Simplificando, chegamos ao seguinte conjunto de regras P: P: S [q0, [q0, [q1, [q0, [q1, Z0, q1] X, q1] Z0, q1] X, q1] X, q1] [q0, Z0, q1] 0 [q0, X, q1] [q1, Z0, q1] 0 [q0, X, q1] [q1, X, q1] 1 1|

53

Mquina de Turing

As linguagens chamadas de linguagens irrestritas, podem ser reconhecidas por Mquinas de Turing. As mquinas de Turing foram propostas como modelos matemticas para representar procedimentos. Qualquer cmputo que possa ser descrito por uma mquina de Turing, poder ser realizado mecanicamente. De outra parte, qualquer cmputo que possa ser realizado por um computador digital, poder ser descrito por uma mquina de Turing. Tese de Church - qualquer processo que possa ser chamado de procedimento, pode ser realizado por uma mquina de Turing.

6.1

Modelo Bsico da Mquina de Turing Fita de Entrada a1 a2 a3 ... ai ... an B B ...

Controle Finito A mquina de Turing possui uma fita de entrada, onde colocada a sentena a ser reconhecida, posicionada nas clulas mais esquerda ( a1 ... an ). Esta fita limitada esquerda, mas infinita direita. O restante das clulas da fita de entrada preenchido com caracteres brancos (B). O movimento da mquina de Turing depende do smbolo lido e do estado do controle finito. Dependendo destes elementos, a mquina pode: - trocar de estado - gravar um smbolo diferente de branco sobre o smbolo lido na fita, substituindo o que estava gravado anteriormente - mover o cabeote de leitura uma clula para a esquerda ou para a direita sobre a fita de entrada.

54

6.2

Definio de Mquina de Turing Uma mquina de Turing (T) definida por T = ( K, , , , q0, F ), onde: K = conjunto finito de estados = conjunto finito de smbolos da fita, incluindo o smbolo branco = conjunto de smbolos de entrada, que um subconjunto de , no incluindo o branco = funo de movimento, que pode ser indefinida para alguns argumentos, sendo definida por : K X K X ( - B ) X ( L, R ) onde L = movimento do cabeote para a esquerda R = para a direita = estado inicial, q0 K = conjunto finito de estados finais, F K

e q0 F

Configurao da Mquina de Turing A configurao de uma mquina de Turing representada por ( q, , i ) q i onde

= estado atual da mquina, q K = poro no branca da fita, ( - B )* = distncia do cabeote ao limite esquerdo da fita. a1 a2 a3 ... ai ... an | | | | B ...

|<--------- i ---------------> | | | q | |<------------------------------ ------->

Descrio Instantnea da Mquina de Turing definida por 1 q 2 onde

q = estado corrente da mquina, q K 1 2 = sequncia de caracteres em *, contedo da fita de entrada esquerda do cabeote, ou at o ltimo smbolo diferente de B.

55

Assume-se que o cabeote esteja apontando para o smbolo mais esquerda de 2. Se = , o cabeote est apontando para B. O smbolo B pode ocorrer em 1 2. Movimentos da Mquina de Turing Seja ( q, A1 A2 ... An, i ) uma configurao da mquina de Turing T, onde 1 <= i <= n+1. Se 1 <= i <= n e ( q, Ai ) = ( p, A, R ) ento ( q, A1 A2 ... An, i ) ( p, A1 A2 ... Ai-1 A Ai+1 ... An, i+1 ) Se 2 <= i <= n e ( q, Ai ) = ( p, A, L ) ento ( q, A1 A2 ... An, i ) ( p, A1 A2 ... Ai-1 A Ai+1 ... An, i-1 ) Se i = n+1 e ( q, B ) = ( p, A, R ) ento ( q, A1 A2 ... An, i+1 ) ( p, A1 A2 ... An A, i+2 ) Se i = n+1 e ( q, B ) = ( p, A, L ) ento ( q, A1 A2 ... An, i+1 ) ( p, A1 A2 ... An, n ) Linguagem aceita pela Mquina de Turing o conjunto de palavras em * que causa a mquina de Turing a entrar num estado final, tendo partido do estado inicial, com o cabeote de leitura sobre o primeiro smbolo de estrada. Assim, a linguagem aceita por T = ( K, , , , q0, F ) L(T) = { w | w e (q0, w, 1) * (q, , i) para algum q F, * e um inteiro i } Parada da Mquina de Turing Se uma mquina de Turing T aceita a linguagem L, ento T pra para as palavras de L. Entretanto, para palavras que no pertencem linguagem L e que, portanto, no so aceitas por T, possvel que T no pare.

Exemplo: abaixo

Definir uma mquina de Turing que reconhece a LLC L = { 0n 1n | n >0 1 }

56

e representar, atravs de configuraes sucessivas, o reconhecimento da sentena 000111. Soluo: T = ( K, , , , q0, F ) K = { q0, q1, q2, q3, q4, q5 } = { 0, 1} = { 0, 1, B, X, Y } F = { q5 } = { ( q0, 0 ) = ( q1, X, R ) ( q1, 0 ) = ( q1, 0, R ) ( q1, 1 ) = ( q2, Y, L ) ( q2, Y ) = ( q2, Y, L ) ( q2, X ) = ( q3, X, R ) ( q2, 0 ) = ( q4, 0, L ) ( q4, 0 ) = ( q4, 0, L ) ( q4, X ) = ( q0, X, R ) ( q3, Y ) = ( q3, Y, R ) ( q3, B ) = ( q5, Y, R ) ( q1, Y ) = ( q1, Y, R ) ( q0, 000111, 1 ) (q1, X00111, 4 ) (q4, X00Y11, 1 ) (q3, XXXYYY, 6 ) (q1, X00111, 2 ) (q2, X00Y11, 3 ) (q0, X00Y11, 2 ) (q3, XXXYYY, 7 ) (q1, X00111, 3 ) (q4, X00Y11, 2 ) (q1, X00Y11, 3 ) (q5, XXXYYY, 8 )

6.3

Relao entre Mquina de Turing e Gramtica Irrestrita

Teorema: Se a linguagem L gerada por uma gramtica irrestrita, ento L pode ser reconhecida por uma Mquina de Turing Teorema: Se uma linguagem L reconhecida por uma Mquina de Turing, ento L gerada por uma gramtica irrestrita.

Bibliografia
HOPCROFT, J.E. & ULLMAN, J.D. Formal Languages and Their Relation to Automata. Addison-Welley Publishing Company, Reading, Massachussets, 1969.

57

HOPCROFT, J.E. & ULLMAN, J.D. Introduction to Automata Theory, Languages, and Computation. Addison-Welley Publishing Company, Reading, Massachussets, 1979. MENEZES, PAULO FERNANDO BLAUTH. Linguagens Formais Autmatos. Editora Sagra-Luzzatto, Porto Alegre, 1997. e

PRICE, ANA MARIA DE ALENCAR & EDELWEISS, NINA. Introduo As Linguagens Formais, PORTO ALEGRE, 1989. 60 P. RAYWARD-SMITH, V.J. A First Course in Formal Language Theory. Blackwell Scientific Publications, Oxford, 1983.

Das könnte Ihnen auch gefallen