Gramáticas sem contexto

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

Transcript of Gramáticas sem contexto

Page 1: Gramáticas sem contexto

1

Computabilidade e Linguagens Formais

Gramáticas e linguagens sem contexto

Gabriel David / Cristina Ribeiro

Page 2: Gramáticas sem contexto

Gramáticas-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

LR(ER, DFA,

NFA, -NFA)

CFL(CFG, PDA)

Page 3: Gramáticas sem contexto

Gramáticas-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á

Page 4: Gramáticas sem contexto

Gramáticas-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)

Page 5: Gramáticas sem contexto

Gramáticas-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

Page 6: Gramáticas sem contexto

Gramáticas-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 larguraCadeia Linguagem Produção usada Cadeias usadas

i a I 5

ii b I 6

iii b0 I 9 ii

iv b00 I 9 iii

v a E 1 i

vi b00 E 1 ivvii a+b00 E 2 v, vi

viii (a+b00) E 4 viiix a×(a+b00) E 3 v, viii

Page 7: Gramáticas sem contexto

Gramáticas-7

Derivação Derivação

– 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)

Page 8: Gramáticas sem contexto

Gramáticas-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:

*

lm

*

rm

)00()00()00()00(

)00()00()0()(

)()(

baabaIbaEbIE

bEEIEEIEEIEE

EEEEEEEE

rmrmrm

rmrmrmrmrm

rmrmrmrm

)00(*

baaErm

Page 9: Gramáticas sem contexto

Gramáticas-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, P0, P1 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).

}|*{)(*

wSTwGLG

wP*

xP*

wxPP 0000*

Page 10: Gramáticas sem contexto

Gramáticas-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

wP*

xP*

wxPP 0000*

wxPP 1111*

Page 11: Gramáticas sem contexto

Gramáticas-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

*

GS

Page 12: Gramáticas sem contexto

Gramáticas-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

Page 13: Gramáticas sem contexto

Gramáticas-13

Exemplos de árvores de análise

Uma árvore de análise representa uma derivação Derivação 0110

*

P

P

P

P

0

11

0

A derivação pode ser parcial Derivação EIE

*

+ EE

I

E

Cada nó interior da árvore corresponde a uma produção

Page 14: Gramáticas sem contexto

Gramáticas-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

Page 15: Gramáticas sem contexto

Gramáticas-15

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

× EE

I

E

E )(

E + E

a

I

a

I

I 0

I 0

b

Page 16: Gramáticas sem contexto

Gramáticas-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)

wA*

wAlm

*

wArm

*

Page 17: Gramáticas sem contexto

Gramáticas-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)

Page 18: Gramáticas sem contexto

Gramáticas-18

Uso das CFG

CFGdeL

YACC

parser

programaem L

+ EE

I

E

Page 19: Gramáticas sem contexto

Gramáticas-19

As RE não chegam Exemplo dos parênteses:

– 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

Page 20: Gramáticas sem contexto

Gramáticas-20

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)

S

S

S

Si

S

Si e

S

i

S

S

Si e

S

S

i

S

Si e

(i)(ie) (i(ie)) (i(i)e)

else liga-se ao if mais próximo

Page 21: Gramáticas sem contexto

Gramáticas-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

Page 22: Gramáticas sem contexto

Gramáticas-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

Page 23: Gramáticas sem contexto

Gramáticas-23

Navegador HTML

ParserHTML

documentoHTML

OLP

Texto

Doc

B

navegador

Page 24: Gramáticas sem contexto

Gramáticas-24

Navegador XML

DTDCurso

Gera parse

r

Parser

Curso

documentotipo Curso

CadeiraCadeira

Cnome

Curso

navegador

Page 25: Gramáticas sem contexto

Gramáticas-25

Sintaxe dos DTDs

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

Page 26: Gramáticas sem contexto

Gramáticas-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)>]>

Page 27: Gramáticas sem contexto

Gramáticas-27

Documentos XML

<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> <CADEIRA> <CNOME>Redes</CNOME> <PROF>Antonio</PROF></CADEIRA></CURSO>

Page 28: Gramáticas sem contexto

Gramáticas-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

Page 29: Gramáticas sem contexto

Gramáticas-29

XML e CFG

– A (E1)* A BA (B é nova) A B E1

– A (E1)+

A BA A B B E1

– A (E1)? A A E1

Page 30: Gramáticas sem contexto

Gramáticas-30

Converter o DTD Curso

CURSO GRAU, CADCAD CADEIRACAD CADEIRA CADCADEIRA CNOME PROF AL ASSAL B AL | ou AL ALUNO AL | B ALUNO XASS ASSISTENTE | GRAU L | M | DCNOME #PCDATAPROF #PCDATAALUNO #PCDATAASSISTENTE #PCDATA

Page 31: Gramáticas sem contexto

Gramáticas-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

aI I

b

Page 32: Gramáticas sem contexto

Gramáticas-32

Precedência dos operadores

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

EE

I

E

E × E

aIa I

+

a

E

E

I

E

E

× E

aI

a

I+a

a + (a × a) (a + a) × a

Page 33: Gramáticas sem contexto

Gramáticas-33

Associatividade

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

EE

I

E

E + E

aIa I

+

a

E

E

I

E

E

E

aI

a

I+a

a + (a + a) (a + a) + a

+

Page 34: Gramáticas sem contexto

Gramáticas-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

Page 35: Gramáticas sem contexto

Gramáticas-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

Page 36: Gramáticas sem contexto

Gramáticas-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

Page 37: Gramáticas sem contexto

Gramáticas-37

Ambiguidade na linguagem

Uma linguagem sem contexto L é ambígua se todas as suas gramáticas forem ambíguas

Exemplo: L= {anbncmdm | n1, m1} {anbmcmdn | n1, m1}

Definir CFG Construir 2 árvores de análise para w=aabbccdd