1 / 37

Computabilidade e Linguagens Formais

Computabilidade e Linguagens Formais. Gramáticas e linguagens sem contexto. Gabriel David / Cristina Ribeiro. Gramáticas sem contexto. Notação que define linguagens mais gerais que linguagens regulares Compiladores (desde 1960’s) DTDs em XML Exemplo: palindroma w=w R adamada (“capicua”)

armen
Download Presentation

Computabilidade e Linguagens Formais

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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=wRadamada (“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

  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)

  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 0 0 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) E E × E ( E ) I + E E a I I a 0 I 0 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 parser YACC E E + E I

  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

  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) 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 Parser Curso Gera parser DTD Curso Curso Cadeira Cadeira … Cnome

  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

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

  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  BA (B é nova) • A   • B  E1 • A  (E1)+ • A  BA • A  B • B  E1 • A  (E1)? • A   • A  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 • 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 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

  33. Associatividade E E • 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 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

  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

More Related