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

Slides:



Advertisements
Apresentações semelhantes
Linguagens Livre-de-contexto
Advertisements

FAPE - Curso de Ciência da Computação
FAPE - Curso de Ciência da Computação
Tópicos em Compiladores
Compiladores Claudio Benossi
Linguagem Fabrício Dias
Teoria da Computação VERIFICAÇÃO DE EQUIVALÊNCIA FORTE DE PROGRAMAS
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Sistema para Criação e Testes de Modelos Formais
Prof. Yandre Maldonado e Gomes da Costa
LFA - Ambiguidade - Equivalência de gramáticas - Hierarquia de Chomsky
Linguagens Formais e Autômatos
TEORIA DA COMPUTAÇÃO Parte II  Linguagens Livres de Contexto
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
TEORIA DOS AUTÓMATOS FINITOS E DAS SUAS LINGUAGENS
Forma Normal de Chomsky
Lema do Bombeamento – Gramáticas Livres do Contexto
Análise Sintática - Continuação
Jorge Muniz Barreto UFSC-INE 2000
Linguagens Livres de Contexto
Q={s,q1,…,q10,t,r} ={a,b,c} ={├,■,} Função de transição:
Linguagens Livre de Contexto
esquerda p/ direita,read only
Linguagens e Máquinas WILSON ROSA DE OLIVEIRA DEPARTAMENTO DE INFORMÁTICA UFPE
autômatos finitos com transições e
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Linguagens Sensíveis ao Contexto
Identificando Linguagens Não Regulares
Máquina de Turing e Computabilidade
Análise Sintática Ascendente
Relações em uma Gramática
01(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Alfabetos, Palavras e Linguagens
Prof. Luiz A M Palazzo Pelotas, fevereiro de 2011
Exercícios Linguagens Formais.
Lema do Bombeamento Linguagens Livres de Contexto
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 5 João M. P. Cardoso
Compiladores, Aula Nº 9 João M. P. Cardoso
Lema do Bombeamento Linguagens Livres de Contexto
Gramáticas Livres de Contexto
Ling. Formais e Autômatos AFN-ε
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Expressões Regulares e Gramáticas
Algoritmo e Programação
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Linguagens Formais e Compiladores
Linguagens Formais e Autômatos
LFA: Unidade 03 – Parte B Engenharia/Ciência da Computação
Linguagens Livres de Contexto
Linguagens Formais - aula 02
Computabilidade e Linguagens Formais
Engenharia/Ciência da Computação
Sintaxe de uma Linguagem
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Compiladores Análise Léxica
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Reverso de uma Linguagem Regular
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
Informática Teórica Engenharia da Computação
CT–200: Fundamentos de Automata e Linguagens Formais
Transcrição da apresentação:

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.

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

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

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

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 }

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)

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.

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}

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 }

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}

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 5 c id  id letra id digito letra id digito digito letra letra digito digito letra b 5 2 s

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|

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

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

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

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

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

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

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 )

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

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

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.

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.

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.

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 ]