linguagens formais

Upload: gregroy

Post on 08-Jul-2015

737 views

Category:

Documents


2 download

TRANSCRIPT

1

Departamento de Informtica Curso de Cincia da Computao

Linguagens FormaisProf Alessandra Dahmer

Santa Cruz do Sul, agosto de 2007.

2

1

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

3

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

1.2

Uma gramtica serve para definir qual o subconjunto de sentenas que faz parte de uma determinada linguagem. um dispositivo formal para especificar potencialmente infinita de uma forma finita. uma linguagem

Existem diversas formas de representar a sintaxe das linguagens: BNF, diagramas de sintaxe, notao formal de gramtica. Notao Formal de Gramtica Uma gramtica G definida por uma qudrupla G = ( N, T, P, S ) onde N - conjunto finito de no-terminais (ou variveis) 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 }

4

P= {ID,D0,D1,D2,D3,D4,D5, D6,D7,D8,D9} Convenes Para facilitar a compreenso das expresses, so adotadas sempre que possvel as seguintes convenes: Letras maisculas do incio do alfabeto para smbolos no-terminais T = { a, b, c, ... t } Letras minsculas do incio do alfabeto para smbolos terminais Letras minsculas do fim do alfabeto para T* = { u, v, ... z } sequncias de terminais ( N T )* = { , , , ... } Letras gregas 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 : se 1 *=> m 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* N = { A, B, C, ... T }

5

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. Do lado direito da produo pode haver qualquer sequncia de smbolos, inclusive a sentena vazia. Tipo 1 - Gramticas Sensveis ao Contexto (GSC)

6

Regras de produo na forma: P = { | || = 0 (o caso j = 0 x = ) tal que cada xi est em L(M1). Ento L(M) = L(M1)* como desejado. 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:

19

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.

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

20

Um autmato finito M = (K, T, , q0, F) mnimo quando: 1. no possui estados inacessveis; 2. no possui estados mortos; 3. no possui 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; 2. 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; 3. construir todas as possveis classes de equivalncia de estados; 4. construir M = (K, T, , q0, F) conforme segue: 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;

21

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) AFD sem estados mortos e inacessveis: q0 q1 q2 q3 a q1 q3 q3 b q2 q2 q3

* *

c) Classes de equivalncia : < q0 q1 > < q2 q3 >

< q0 > < q1 > < q2 q3 > [0] [1] [2] e) Autmato Finito Mnimo : [0] [1] * [2] a [1] [2] b [2] [2]

22

4

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; 5. se D a nica subrvore da raiz e tem rtulo , ento a regra S P.

23

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. 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 }

24

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 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:

25

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. 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

26

a) b)

c)

Pode ser efetuada atravs do seguinte algoritmo: 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.

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={ SaA Aa|bB Bb|dD C cC | c DdD } Soluo: N0 N1 N2 N3 = = = = { A, B, C} { S, A, B, C} { 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 Aa|bB Bb C cC | c } Determinao do conjunto de smbolos alcanveis Pode ser efetuada atravs do seguinte algoritmo: a) Construir o conjunto V0 = { S } (S = smbolo inicial) e fazer i = 1 b) 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 c) Vi o conjunto de smbolos alcanveis. Exemplo: Simplificar a gramtica G do exemplo anterior, retirando os smbolos inalcanveis.

27

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 Aa|bB Bb} 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 + } b) 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 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. d) A nova gramtica ser definida por: G = (N, T, P, S) 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={ SaB BbB|} Soluo: Ne = {B} P = { S a B | a

28

BbB|b} b) G = ( {S}, {a}, P, S ) P={SaS|} Soluo: Ne = {S} P= { S S | SaS|a} G = ( {S, D, C}, {b,c,d,e}, P, S ) P={ SbDCe DdD|

CcC|} Soluo: Ne = {D, C} P= { S bDCe|bCe |bDe |be DdD|d CcC|c}

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: a) b) c) Transformar a GLC em uma GLC -livre, se necessrio Para todo no-terminal de N, construir um conjunto com os noterminais 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)

d)

Exemplo: Transformar as GLC abaixo em gramticas equivalentes que no apresentem produes simples. a) G = ( {S, A}, {a,b}, P, S ) P={ SbS|A AaA|a} Soluo: Ns = { A } NA = { } P= { S b S | a A | a AaA|a} P={SaSb|A AaA|B BbBc|bc} Soluo: Ns = { A, B} NA = {B} NB = { } P= { S aSb |aA |bBc |bc A a A | bBc | bc B bBc | bc }

b) G = ({S, A, B}, {a,b,c}, P, S ) 4.5.4 Fatorao de GLC

29

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: AaB|aC pois as duas iniciam com o mesmo terminal a. Outro exemplo de gramtica no-fatorada o seguinte: SA|B Aac Bab Para fatorar uma GLC devemos alterar as produes envolvidas no no-determinismo da seguinte maneira: 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 aA | aB A aA | a Bb} Soluo: P= { S a S S A | B A aA A A | Bb} b) G = ( {S, A}, {a,b}, P, S ) P = { S Ab | ab | baA A aab|b } Soluo: P= { S aabb|bb|ab|baA A aab|b } P= { S aS | bS S abb|b S b|aA A aab|b }

4.5.5

Eliminao de Recurso Esquerda

30

Uma gramtica G = (N, T, P, S) tem recurso esquerda 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 Para eliminar a recurso direta esquerda usa-se o seguinte algoritmo: Seja G = (N,T,P,S) uma GLC -livre e sem produes do tipo AA. 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. b) Cria-se um novo no-terminal B. c) Substitua as produes A da gramtica original de acordo com os seguintes passos: 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. Exemplo: Elimine as recurses esquerda da GLC abaixo G = (N, T, P, S) P={ SAa ASb|cA|a} Soluo: P = { S A a AAab|cA|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 ABC ou Aa onde A, B, C N e a T.

31

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 no-terminais 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

c)

d)

a gramtica gerada est na CNF e dada por G = ( N, T, P, S ) Exemplo: Dada a GLC abaixo, ache a gramtica equivalente na CNF G = ( {S, A, B}, {a, b}, P, S ) P={ SA|ABA AaA|a BbB|b } Soluo a) P = { S a A | a | A B A AaA|a BbB|b } P = { S Aa A | a | A B A A Aa A | a B Ab B | b Aa a Ab b } P = { S Aa A | a | A B B B A A Aa A | a B Ab B | b Aa a Ab b }

b)

c)

32

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: Aa onde A N, a T e N*. 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 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={ SAS|a ASA|b } Soluo a) G j est na CNF b) Renomear os no-terminais (ordem): Logo: S = A1 e A = A2 P: A 1 A2 A1 | a A2 A1 A2 | b c) 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 } d) 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 }

33

4.8 a)

Outros Tipos de GLC 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 Ax onde A, B N e x, w T*

34

5

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; -move - movimento vazio, no qual o cabeote no se move, 2) 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) resultam na pilha vazia ou b) levam o autmato a estado final. Estes dois tipos de reconhecimento, por pilha vazia ou por estado final, so equivalentes.

35

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 ) ) onde: e q, p1, p2, ..., pm K 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. ( 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.

2.

Costuma-se representar a pilha na horizontal, sendo o smbolo do topo da pilha aquele que est mais esquerda de i. 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

36

1. 2.

Um PDA determinstico se: 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 L = { 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, ZZ0) } ( q1, 0, Z0 ) = { (q1, ZZ) } ( q1, 0, Z ) = { (q1, ZU) } ( q1, 0, U ) = { (q2, Z0) } ( q1, C, Z0 ) = { (q2, Z) } ( q1, C, Z ) = { (q2, U) } ( q1, C, U ) = { (q2, ) } ( q2, 0, Z ) = { (q2, ) } ( q2, , Z0 ) = { (q1, UZ0) } ( q1, 1, Z0 ) = { (q1, UZ) } ( q1, 1, Z ) = { (q1, UU) } ( q1, 1, U ) = { (q2, ) } ( q2, 1, U )

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:

37

usando a descrio instantnea, o reconhecimento da sentena 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 * onde

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

Exemplo: L(M) = { an bn | n 0 }

38

As transies representadas no grafo deste exemplo so as seguintes: = { (q1, XZ0) } ( q0, a, Z0 ) = { (q1, XX) } ( q1, a, Z0 ) = { (q2, ) } ( q1, b, Z0 ) = { (q2, ) } ( q2, b, Z0 ) = { (q3, ) } ( q2, , Z0 ) 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 = ( {q0}, T, N, , q0, S, ) O mapeamento construdo a partir das regras de P, sendo que para regra A a P corresponde ( q0, a, A ) (q0, ) 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 = ( {q0}, {a,b}, {S,A}, , q0, S, ) ( q0, a, S ) = { (q0, AA) } ( q0, b, A ) = { (q0, S) } ( q0, a, A ) = { (q0, S), (q0, ) }

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.

39

6

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.

40

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 e R = para a direita = estado inicial, q0 K q0 F = conjunto finito de estados finais, F K

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 ...

| | | | | 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. 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

41

Seja ( q, A1 A2 ... An, i ) uma configurao da mquina de Turing T, onde 1