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

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

Computabilidade e Linguagens Formais

Apresentações semelhantes


Apresentação em tema: "Computabilidade e Linguagens Formais"— Transcrição da apresentação:

1 Computabilidade e Linguagens Formais
Gramáticas e linguagens sem contexto Gabriel David / Cristina Ribeiro

2 Gramáticas sem contexto
Notação que define linguagens mais gerais que linguagens regulares Compiladores (desde 1960’s) DTDs em XML Exemplo: palindroma w=wR adamada (“capicua”) 0110, 11011,  Não é regular Lema da bombagem Para ser regular existe autómato com n estados Escolhido n, seja w=0n10n=xyz Fazendo y igual a um ou mais zeros da 1ª parte de w, xz também é reconhecida pelo autómato mas, como x tem menos 0’s que z, não é um palindroma e contradiz a hipótese de ser o autómato da linguagem CFL (CFG, PDA) LR (ER, DFA, NFA, -NFA)

3 Exemplo do palindroma Definição recursiva
Base: 0, 1 e  são palindromas Indução: se w é um palindroma, 0w0 e 1w1 também o são; nada mais é um palindroma Notação alternativa: produções (para P, variável que representa a linguagem dos palindromas) 1. P   2. P  0 3. P  1 4. P  0P0 5. P  1P1 1,2,3 constituem a base; 4,5 são recursivas Interpretação da regra 4: Se w está em P então 0w0 também está

4 Definição de CFG CFG G=(V, T, P, S)
T são os terminais, símbolos usados nas cadeias da linguagem V são as variáveis (de linguagem), os não terminais ou categorias sintáticas S é o símbolo de arranque, a variável da linguagem definida (as outras são linguagens auxiliares) P é um conjunto finito de produções ou regras da forma H  B1B2…Bn definição parcial de H, a cabeça, sendo B1B2…Bn, o corpo, uma sequência de terminais e não terminais As cadeias da linguagem são as que se obtém substituindo os não terminais Bi por cadeias que se saiba pertencerem à linguagem Bi Exemplo: G = ({P}, {0,1}, A, P)

5 Exemplo das expressões
Representar as expressões aritméticas com +, ×, parênteses e identificadores Alfabeto identificadores: ‘a’, ‘b’, ‘0’, ‘1’ Outros terminais: ‘(‘, ‘)’, ‘+’, ‘×’ Identificadores: começa com letra seguida por um número qualquer de letras e dígitos ER: (a+b)(a+b+0+1)* Usa-se uma variável E para as expressões e outra I para os identificadores 1. E  I 5. I  a 2. E  E+E 6. I  b 3. E  E×E 7. I  Ia 4. E  (E) 8. I  Ib 9. I  I0 10. I  I1 Produções mais compactas E  I | E+E | E×E | (E) I  a | b | Ia | Ib | I0 | I1

6 Inferência Inferência recursiva
Da base para cima; dos corpos para as cabeças das regras Começa-se com as conhecidas e aplicam-se as regras para descobrir novas; acaba-se por chegar a todas, numa pesquisa em largura Cadeia Linguagem Produção usada Cadeias usadas i a I 5 ii b 6 iii b0 9 iv b00 v E 1 vi vii a+b00 2 v, vi viii (a+b00) 4 ix a×(a+b00) 3 v, viii

7 Derivação Derivação Passo de derivação:  E  E×E  I×E  a×E 
Do topo para baixo; das cabeças para os corpos das regras Começa-se com o objectivo, a linguagem alvo e aplicam-se as regras, substituindo variáveis pelos respectivos corpos, até só haver uma cadeia de terminais; chega a todas, pesquisa em profundidade Passo de derivação:  CFG G=(V,T,P,S) α, β  (V  T)* A  V Aγ  P αAβ G αγβ * significa derivação em 0 ou mais passos E  E×E  I×E  a×E  a×(E)  a×(E+E)  a×(I+E)  a×(a+E)  a×(a+I)  a×(a+I0)  a×(a+I00)  a×(a+b00)

8 Derivação No exemplo anterior, escolheu-se em cada passo a variável mais à esquerda Derivação mais à esquerda Derivação mais à direita Exemplo:

9 Linguagem de uma gramática
A linguagem da CFG G=(V,T,P,S) é o conjunto de cadeias terminais que têm derivações a partir do símbolo inicial S Teorema: L(Gpal) é o conjunto dos palindromas sobre {0,1} Prova: w  {0,1}* está em L(Gpal) se e só se w é palindroma w=wR [se] hipótese: w é palindroma; indução em |w| Base: |w|=0 ou |w|=1, isto é, w=, w=0, w=1 como existem as produções P, P0, P1 então Indução: supondo |w|2, como w=wR, w tem que começar e acabar com o mesmo símbolo, w=0x0 ou w=1x1.Além disso, x=xR. Por hipótese, Então e para 1x1 é semelhante. w está em L(Gpal).

10 Continuação da prova [só se] hipótese: w está em Gpal, indução no número de passos de uma derivação de w a partir de P Base: derivação só com 1 passo: usar regras não recursivas. Obtém-se , 0, 1 que são todos palindromas Indução: supõe-se que a derivação tem n+1 passos e que a afirmação é verdadeira para todas as derivações com n passos, em n passos então x é um palindroma x=xR Uma derivação com n+1 passos só pode ser ou Como wR=(0x0)R=0xR0=0x0=w então w é um palindroma Se as produções envolverem vários símbolos de linguagem, temos indução mútua, com várias afirmações em simultâneo

11 Formas frásicas Formas frásicas são derivações a partir do símbolo inicial CFG G=(V,T,P,S)   (V  T)* é forma frásica se Forma frásica esquerda (direita) Derivação mais à esquerda (direita) L(G) é constituída pelas formas frásicas que pertencem a T*, só têm terminais

12 Árvores de análise Estrutura de dados mais usada para representar um programa fonte num compilador Facilita a escrita de funções recursivas para a geração de código Seja G=(V,T,P,S); uma árvore de análise para G é uma árvore que A etiqueta de cada nó interior é uma variável A etiqueta de cada folha é uma variável, um terminal ou  (neste caso, filho único) Se um nó interior tiver etiqueta A e os seus filhos etiquetas X1… Xk então A  X1…Xk é uma produção em P

13 Exemplos de árvores de análise
Uma árvore de análise representa uma derivação Derivação A derivação pode ser parcial Derivação P E P E + E 1 P 1 I Cada nó interior da árvore corresponde a uma produção

14 Colheita de uma árvore de análise
Colheita de uma árvore de análise é a cadeia obtida pela concatenação de todas as folhas, lidas da esquerda para a direita Todas as colheitas das árvores cuja raiz é o símbolo inicial de G são formas frásicas de G As colheitas destas árvores que são terminais (folhas só com terminais e ) são cadeias da linguagem

15 Uma árvore de análise de a×(a+b00)
I b

16 Equivalências Dada uma gramática G=(V,T,P,S) são equivalentes:
O processo de inferência recursiva determina que a cadeia terminal w está na linguagem da variável A Existe uma árvore de análise com raiz A e colheita w As equivalências são verdadeiras mesmo que w contenha variáveis (não está definido para a inferência recursiva)

17 Analisadores (parsers)
Gramáticas formais propostas por Noam Chomsky Descrever linguagens naturais – resultados limitados Muito úteis para descrever linguagens “artificiais” Linguagem de programação Alguns aspectos podem ser definidos por expressões regulares Mas o emparelhamento de parêntesis e de estruturas if-else não são regulares – exigem CFG Existem programas (YACC, Bison, …) que, a partir de uma CFG de uma dada linguagem L, geram automaticamente um programa capaz de construir uma árvore de análise para programas escritos em L Dispensa o programador de fazer esse programa, habitualmente incluído nos tradutores (compiladores, interpretadores)

18 Uso das CFG programa em L CFG de L YACC parser E E + E I

19 As RE não chegam Exemplo dos parênteses: Resposta:
Se, dado um programa, se abstrair de tudo o que não são parênteses, fica-se com cadeias do tipo (()())(). Nunca se obtém, por exemplo, (() ou ())(, porque os parênteses devem estar emparelhados. a) Mostrar que a linguagem destas cadeias não é regular b) Definir uma CFG para a linguagem Resposta: a) a linguagem implícita na cadeia w= (((…()…))) de comprimento 2n é homomórfica da definida por 0n1n que já vimos ser não regular b) B  BB | (B) |  BB: a concatenação de duas cadeias emparelhadas é emparelhada (B): parênteses em volta de uma cadeia emparelhada mantém o carácter  é o caso base

20 else liga-se ao if mais próximo
Escolha Exemplo do if-else: Numa linguagem de programação, a construção if pode aparecer isolada ou então emparelhada com else, à semelhança dos parênteses; é recursiva. Exemplos: i, ie, ieie, iiee. Não: ei, iee a) defina uma CFG para essa linguagem b) apresente todas as árvores de análise de iie; qual a correcta, em C? Resposta: a) S   | SS | iS | iSeS b) else liga-se ao if mais próximo (i)(ie) (i(ie)) (i(i)e) S S S i S e S S S i S i S i S i S e S i S e S

21 Linguagens de anotação: HTML
As cadeias nestas linguagens são documentos com marcas para estruturar o texto e controlar a sua apresentação <P>A avaliação de <B>CLF</B> inclui: <OL><LI>Miniteste <LI>Exame <LI>Exercícios </OL> Char  a | A | … Elemento  Texto | Texto   | Char Texto <P> Doc | Doc   | Elemento Doc <B> Doc </B> | <OL> Lista </OL> Lista   | ItemLista Lista ItemLista  <LI> Doc

22 XML Alguns aspectos do HTML não exigem o poder das CFG
A 1ª e 2ª linhas dizem que Texto se exprime pela RL (a+A+…)* Os elementos <B> e <OL>, são como parênteses, exigem CFG Em HTML, a gramática está predefinida Os navegadores incluem um parser de HTML para analisar os documentos de entrada, produzir uma árvore e mostrar o resultado Em XML, dá-se aos utilizadores a capacidade de definirem a própria gramática, num DTD (Document Type Definition) Os documentos explicitam o DTD que especifica a sua estrutura Os navegadores têm que incluir a capacidade de processar a gramática para poderem validar os respectivos documentos

23 Navegador HTML documento HTML navegador Parser HTML Doc P OL B Texto

24 Navegador XML documento tipo Curso navegador DTD Curso Curso Cadeira
Gera parser Parser Curso DTD Curso Curso Cadeira Cadeira Cnome

25 Sintaxe dos DTDs Descrição é uma expressão regular
<!DOCTYPE nome-do-DTD [ lista de definições de elementos ]> <!ELEMENT nome-do-elemento (descrição)> Descrição é uma expressão regular Base: outros elementos ou #PCDATA (texto sem marcas) Operadores: “|” reunião “,” concatenação “*” fecho, zero ou mais “+” fecho, um ou mais “?” fecho, zero ou um Podem usar-se parênteses

26 DTD Curso <!DOCTYPE CURSO [ <!ELEMENT CURSO (GRAU, CADEIRA+)>
<!ELEMENT CADEIRA (CNOME, PROF, ALUNO*, ASSISTENTE?)> <!ELEMENT GRAU (L | M | D)> <!ELEMENT CNOME (#PCDATA)> <!ELEMENT PROF (#PCDATA)> <!ELEMENT ALUNO (#PCDATA)> <!ELEMENT ASSISTENTE (#PCDATA)> ]>

27 Documentos XML <GRAU>M</GRAU> <CURSO> <CURSO>
<GRAU>L</GRAU> <CADEIRA> <CNOME>Lógica</CNOME> <PROF>Francisco</PROF> </CADEIRA> </CURSO> <CURSO> <GRAU>M</GRAU> <CADEIRA> <CNOME>Matemática</CNOME> <PROF>Francisco</PROF> <ALUNO>Zé</ALUNO> <ALUNO>Rui</ALUNO> <ASSISTENTE>Luis </ASSISTENTE> </CADEIRA> <CNOME>Redes</CNOME> <PROF>Antonio</PROF> </CURSO>

28 XML e CFG Reescrever DTD na notação das CFG
Converter CFG com expressões regulares no corpo das regras para CFG normais Base: se o corpo for uma concatenação, já está na forma CFG normal Indução: cinco casos A  E1, E2 (concatenação, E1 e E2 permitidas nos DTD) A  BC (inventar variáveis B e C novas, permitida em CFG) B  E1 (E1 pode ainda não estar na CFG, mas é menor) C  E2 A  E1 | E2 A  E1 A  E2

29 XML e CFG A  (E1)* A  (E1)+ A  (E1)? A  BA (B é nova) A   B  E1

30 Converter o DTD Curso CURSO  GRAU, CAD CAD  CADEIRA
CAD  CADEIRA CAD CADEIRA  CNOME PROF AL ASS AL  B AL |  ou AL  ALUNO AL |  B  ALUNO X ASS  ASSISTENTE |  GRAU  L | M | D CNOME  #PCDATA PROF  #PCDATA ALUNO  #PCDATA ASSISTENTE  #PCDATA

31 Ambiguidade de uma CFG Exemplo da instrução de selecção: análise da cadeia iie 3 árvores de análise, com significados diferentes Exemplo das expressões aritméticas: análise de a+b Derivação 1: E  E+E  I+E  a+E  a+I  a+b Derivação 2: E  E+E  E+I  I+I  I+b  a+b As derivações são diferentes Mas árvore de análise é a mesma, mesmo significado Uma CFG G=(V,T,P,S) é ambígua se Existir uma cadeia w em T* para a qual existam duas árvores de análise diferentes com raiz S e colheita w Se não existir nenhuma dessas cadeias é não ambígua E E + E I I a b

32 Precedência dos operadores
+ E E × E I E × E I E + E a a I I I I a + (a × a) a a (a + a) × a a a Cadeia a + a × a tem 2 árvores de análise – gramática ambígua Para desambiguar pode-se usar regras de precedência × tem precedência relativamente a +, tem prioridade superior, aplica-se antes do + tanto à esquerda como à direita (1ª árvore respeita esta regra, a 2ª não) a + a × a = a + (a × a)  (a + a) × a

33 Associatividade E E E + E E + E I E + E I E + E a a I I I I a + (a + a) a a (a + a) + a a a Cadeia a + a + a tem 2 árvores de análise – gramática ambígua Para desambiguar usa-se regra de associatividade Sequências de operadores com a mesma precedência são associativos à esquerda (2ª árvore respeita esta regra, a 1ª não) a + a + a = (a + a) × a Como a adição é associativa, o resultado é o mesmo nas duas análises

34 Remoção da ambiguidade de CFG
Na gramática, a ambiguidade remove-se introduzindo mais variáveis, para distinguir níveis de precedência e regras de associatividade Conceitos Factor: expressão que não pode ser fraccionada por operadores (+ ou ×) adjacentes – identificadores e expressões entre parênteses Termo: expressão que não pode ser fraccionada por + Expressão: outras expressões – uma expressão é assim uma soma de um ou mais termos

35 Gramática não ambígua I  a | b | Ia | Ib | I0 | I1 F  I | (E)
T  F | T × F E  T | E + T Construir árvore de a+a×a

36 Ambiguidade e derivações
Teorema: para cada gramática e cada cadeia w de terminais, w tem duas árvores de análise diferentes se e só se w tem duas derivações mais à esquerda de S diferentes Exemplo: derivações mais à esquerda das árvores de a+a×a

37 Ambiguidade na linguagem
Uma linguagem sem contexto L é ambígua se todas as suas gramáticas forem ambíguas Exemplo: L= {anbncmdm | n1, m1}  {anbmcmdn | n1, m1} Definir CFG Construir 2 árvores de análise para w=aabbccdd


Carregar ppt "Computabilidade e Linguagens Formais"

Apresentações semelhantes


Anúncios Google