A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Teoria da Computação FIC– Ciência da Computação

Apresentações semelhantes


Apresentação em tema: "Teoria da Computação FIC– Ciência da Computação"— Transcrição da apresentação:

1 Teoria da Computação FIC– Ciência da Computação
Professor: Ciro Meneses Santos FIC– Ciência da Computação Bibliografia: GERSTING, Judith L. Fundamentos matemáticos para a ciência da computação.LTC – 2004. Tirajú Asmuz; MENEZES, Paulo Blauth. Teoria da computação: máquinas universais e computabilidade. Porto Alegre: Sagra Luzzatto, 2000. HOPCROFT, John E, etal - INTRODUÇÃO À TEORIA DE AUTÔMATOS, LINGUAGENS E COMPUTAÇÃO – Campus – 2002.

2 Gramática Uma gramática é uma quádrupla ordenada G={V,T,P,S} onde:
V : conjunto finito de símbolos não-terminais; T : conjunto finito de símbolos terminais P: conjunto finito de pares, denominados regras de produção tal que a primeira componente é palavra (V ,T)+ e a segunda componente é palavra de (V ,T)*; S : elemento de V denominado variável inicial. Uma regra de produção (,) é representada por   . As regras de produção definem as condições de geração das palavras da linguagem. Uma sequência de regras de produção da forma  1,  2, ..., n pode ser abreviada como uma única produção da forma :  1| 2|...| n

3 Continuação ... Uma gramática G é um mecanismo para gerar sua linguagem L(G). A aplicação de uma regra de produção é denominada derivação de uma palavra. A aplicação sucessiva de regras de produção permite derivar as palavras da linguagem representada pela gramática. Uma derivação é a substituição de uma subpalavra de acordo com uma regra de produção. Sucessivos passos de derivação são definidos: * : zeros ou mais passos de derivação; + : um ou mais passos de derivação sucessivas; i : exatos i passos, onde i é um número natural

4 Continuação ... O elemento fundamental das gramáticas são as regras. Uma regra é um par ordenado(u,v), tradicionalmente escrito na forma u  v, onde u e v são palavras que podem conter símbolos de dois alfabetos disjuntos, um com símbolos denominados não-terminais, e outro com símbolos denominados terminais. As variáveis não-terminais são símbolos auxiliares para a geração das palavras da linguagem, enquanto que o conjunto de terminas nada mais é do que o alfabeto da linguagem definida. Dada uma gramática G com o símbolo de partida S, usamos  para definir L(G), a linguagem gerada por G. w está em L(G) sse S  w + +

5 Continuação ... Seja G uma gramática G = (V, , R, P) seja w1 e w2 palavras sobre G. Então w1  w2. Se    é uma produção de G, w1 contém uma cópia de  e w2 é obtido de w1 através de substituição de  por . w1, w2, w3, .... wn são palavras sobre G w1  w2, w2  w3, ..., wn-1  wn Então w1  wn gera indiretamente através de n produções w1  wn L = { w  *  S  w }

6 Continuação ... Nos exemplos a seguir, serão usadas “letras maiúsculas ou strings” para representar variáveis não-terminais e “minúscula ou dígitos” para representar variáveis terminais. Exemplo de Regra: aAB  baA (R1)| A  a (R2) Tal regra específica que dada uma palavra que contenha a subpalavra aAB, tal subpalavra pode ser substituída por baA Dada a palavra aABB aplicando-se a regra de derivação acima sendo denotada por: aABB  baAB (R1)  bbaA (R1)  bbaa (R2)

7 mais à esquerda ou à direita
Derivação mais à esquerda ou à direita A cada passo da derivação: escolher o não terminal para substituir escolher a alternativa para o não terminal Derivação mais à esquerda: substitui-se o não terminal mais a esquerda em qualquer forma sentencial a cada passo. Derivação mais à direita: substitui-se o não terminal mais a direita em qualquer forma sentencial a cada passo.

8 Derivação Seja a gramática G constituída da variável de partida P e das regras abaixo sobre ={a,b} S  aS S  B B  b B   P  aS (1)  aaS (1)  aaaS (1)  aaaB (2)  aaab (3) Um exemplo de derivação: P  aS (1)  a (4) Isto mostra que ab é uma sentença da linguagem gerada por G; ab L (G) er =( a* (b, ) ) L(G)={anbm  n  0, 0  m  1}

9 Derivação Seja a gramática G constituída da variável de partida P e das regras abaixo sobre ={a,b} S  aSa S  B B  b P  aSa (1)  aaSaa (1)  aaaSaaa (1)  aaaBaaa (2)  aaabaaa (3) Um exemplo de derivação: P  aSa (1)  aBa (2)  aba (3) Isto mostra que ab é uma sentença da linguagem gerada por G; ab L (G) L(G)={anban  n  0 }

10 Derivação Seja a gramática G constituída da variável de partida P e das regras abaixo sobre ={a,b,c} P  aAbc A  aAbC A   Cb  bC Cc  cc P  aAbc (1)  aaAbCbc (2)  aaAbbCc (4)  aaAbbcc (5)  aabbcc (3) Um exemplo de derivação: P  aAbc (1)  abc (3) Isto mostra que abc é uma sentença da linguagem gerada por G; abc L (G) L(G)={anbncn  n  1}

11 Derivação Seja a gramática G constituída da variável de partida id e das regras: (1)id id letra (2)id id digito (3)id letra (4)letra  |a|b|...|z| (5)digito |0|1|...|9| id id letra id digito letra letra digito letra a c id  id letra id digito letra id digito digito letra letra digito digito letra b s

12 Derivação Seja a gramática G =(V,,P,E) onde V ={E,T,N,D}, ={+,-,(,),0,1,...9} constituída da variável de partida E, e das regras: E  E + T  E – T + T  N – N + (E)  DN – D + (T)  DD – D + (N)  DD – D + (DN)  DD – D + (DD)  20 – 4 + (61) (1) E  E + T |E - T | T (2) T  (E)|N (3) N  DN |D (4) D  0|1|...|9|

13 Hierarquia de Chomshy Gramática Regular: Uma gramática G e regular se ela obedece a convenção da produção vazia S  , e para qualquer produção    (exceto S  ) é uma variável não terminal única e  é da forma a ou aW, onde a é um símbolo terminal e W é uma variável não terminal. Este tipo de gramática e muito útil, porém não pode ser utilizado quando há necessidade controle de ocorrência de símbolos. Ex: a cada abrir chave ‘{‘ tem que haver um fechar chave ‘}’ S   S  a S  aW

14 Gramática regular: A linguagem a+ é gerada pela gramática regular:
S  aA A  aA |  A linguagem a* é gerada pela gramática regular: S  aA |  A linguagem (a, b)+ é gerada pela gramática regular: S  aA | bA A  aA | bA | 

15 Gramática regular: A linguagem a(ba)* é gerada pela gramática regular:
S  aA A  bB|  B  aA A linguagem (a ,b)*(aa, bb) é gerada pela gramática regular: S  aS|bS|aA|bB A  a B  b

16 Continuação ... S  aS|bS|aA A  bB B  b S  0A |  A  1S
A linguagem (a,b)*abb é gerada pela gramática regular: S  aS|bS|aA A  bB B  b A linguagem (01)+ é gerada pela gramática regular: S  0A |  A  1S

17 Continuação ... S  0A A  1S | 1B B  0 |  S  0A A  0B | 1B
A linguagem (01)+(0, ) é gerada pela gramática regular: S  0A A  1S | 1B B  0 |  A linguagem (0(0,1))+0 é gerada pela gramática regular: S  0A A  0B | 1B B  0A | 0

18 Continuação ... S  0B | 1D A  0B | 1D | 0 D  1B S  aA
A linguagem (0, 11)+0 é gerada pela gramática regular: S  0B | 1D A  0B | 1D | 0 D  1B A linguagem (a, ab)+ é gerada pela gramática regular: S  aA A  aA | bB |  B  aA

19 Gramática Livre de Contexto
Uma gramática G é GLC se obedece a conversão da produção vazia S  , e para qualquer produção    (exceto S  ),  é uma única variável não terminal, ficando  livre, podendo aparecer qualquer combinação de variáveis não terminais e terminais. Este tipo de gramática pode representar praticamente todas as necessidades para a construção de uma linguagem de programação, inclusive controle de pares ((( a ))). S   S  a S  ( S )

20 Continuação ... S  BB B  0B1| S  aSdd|A A  bAc|bc
A linguagem L={ 0n1n0m1m  n0,m  0} S  BB B  0B1| A linguagem L={ anbmcmd2n  n0,m >0} S  aSdd|A A  bAc|bc

21 Gramática Sensível ao Contexto
Uma gramática G é GSC se obedece a convenção da produção vazia S  , e para qualquer produção    (exceto S  ),  é pelo menos tão grande quanto a palavra . Em uma GSC um símbolo terminal pode ser substituído apenas se for parte de uma cadeia de símbolos em particular.  não pode ser maior que . P  a A b c A  a A b C |  Cb  bC Cc  cc

22 Forma normal de Chomsky (FNC)
Uma gramática LC é dita na forma Norma de Chomsky (FNC) se todas as suas produções são da forma A  BC ou A  a onde A, B, C são variáveis não terminais e a terminais . Uma forma normal descreve um conjunto de condições que todas as regras da gramática deve satisfazer.

23 Continuação ... Algoritmo para transformação de um GLC, em uma gramática na FNC: (1) Simplificação da Gramática: Exclui as produções vazia A, produções da forma A  (se o lado direito de alguma produção tiver somente um símbolo, este será terminal). (2) Transformação do lado direito das produções de comprimento maior ou igual a dois: Garante que o lado direito das produções de comprimento maior ou igual a 2 seja composto exclusivamente por variáveis não terminais. A exclusão de um terminal a pode ser realizado substituindo-o por uma variável intermediária X e incluindo a produção Xa.

24 Continuação ... (3) Transformação do lado direito das produções de comprimento maior que dois, em produções com exatamente duas variáveis: Garante que o lado direito da produções de comprimento maior do que um é composto exatamente por duas variáveis não terminal. O lado direito das produções da forma AB1 B2 ... Bn  n2. é composto exclusivamente por variáveis não terminais.

25 Continuação ... EE+E | E*E | [E] | a
A gramática já esta simplificada; Transformação das variáveis do lado direito. EET1E | ET2E | T3ET4 | a T1+ T2* T3[ T4] EED1 | ED2 | T3D3 | a D1 T1E D2 T1E D3 ET4 T1 + T2 * T3 [ T4 ]


Carregar ppt "Teoria da Computação FIC– Ciência da Computação"

Apresentações semelhantes


Anúncios Google