Problemas decidíveis para LICs

Documentos relacionados
Problemas decidíveis para LICs

As linguagens regulares são I.C Proposição Qualquer linguagem regular é independente de contexto.

Autómatos de pilha e Gramáticas independentes de contexto

Formas normais. Forma normal de Greibach (FNG) todas as produções são da forma

Autómatos de pilha e GIC

Árvores (ordenadas) Departamento de Ciência de Computadores da FCUP MC Aula 11 1

Gramáticas ( [HMU00], Cap. 5.1)

Autómatos de Pilha. Cada transição é caracterizada pelo estado, símbolo que está ser lido e o elemento no topo da pilha. dados de entrada.

Exercicios. 7.2 Quais das seguintes afirmações são verdadeiras? Justifica. (d) abcd L((a(cd) b) )

Revisões de Conjuntos

Linguagens recursivamente enumeráveis

Modelos de Computação

MT como calculadoras de funções parciais

Linguagens Formais e Autômatos P. Blauth Menezes

Noções de grafos (dirigidos)

Autómatos determísticos de k-pilhas

Linguaguens recursivamente enumeráveis e recursivas

Linguaguens recursivamente enumeráveis

Computação efectiva. Que linguagens podem ser reconhecidas por algum tipo de autómato?

Linguagem (formal) de alfabeto Σ

Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Teoria da Computação Gramáticas, Linguagens Algébricas e Autómatos de Pilha

Linguagens Formais. Aula 01 - Conceitos Básicos. Prof. Othon Batista Mestre em Informática

Máquinas Universais. Departamento de Ciência de Computadores da FCUP MC Aula 23 1

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

Autómatos finitos não determinísticos (AFND)

Alfabeto e palavras. Alfabeto conjunto finito de símbolos (Σ).

Compiladores - Análise Ascendente

A. (Autómatos finitos determinísticos e não determinísticos AFD e AFND)

Construção de Compiladores Aula 16 - Análise Sintática

Compiladores - Análise Ascendente

Marcos Castilho. DInf/UFPR. 21 de março de 2019

SCC Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha (versão 2)

formais e autómatos Linguagens g recursivas e recursivamente enumeráveis Gramáticas não-restringidas

Teoria da Computação

Teoria da Computação Aula 02 Introdução

Gramáticas e Linguagens independentes de contexto

Alfabeto, Cadeias, Operações e Linguagens

SCC Capítulo 1 Linguagens Regulares e Autômatos Finitos

Capítulo Métodos para transformar gramáticas ái Duas formas Normais (Chomsky e Greibach) ADC/TC/Cap.6/ /LEI/DEIFCTUC 268

Modelos de Computação Folha de trabalho n. 10

Segunda Lista de Exercícios 2004/2...

IV Gramáticas Livres de Contexto

Teoria da Computação Aula - Linguagens e Gramáticas Formais

Gramática regular. IBM1088 Linguagens Formais e Teoria da Computação. Evandro Eduardo Seron Ruiz Universidade de São Paulo

Capítulo 9: Linguagens sensíveis ao contexto e autômatos linearmente limitados.

Modelos de Computação Folha de trabalho n. 8

TEORIA DAS LINGUAGENS 3. GRAMÁTICAS INDEPENDENTES DE CONTEXTO

Compiladores Aula 4. Celso Olivete Júnior.

Aula de 28/10/2013. sticas; Implementação. em Ruby

Faculdade de Computação

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

UNIVERSIDADE DA BEIRA INTERIOR

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

Análise Sintáctica. Definições: Conjuntos First() e Follow() Compiladores, Aula Nº 19 João M. P. Cardoso. Conjunto First(β)

Construção de Compiladores Aula 17 - Análise Sintática Descendente

LFA Aula 07. Equivalência entre AFD e AFND. Equivalência entre ER s e AF s Equivalência entre GR s e AF s. Linguagens Formais e Autômatos

Universidade Federal do Rio de Janeiro Departamento de Ciência da Computação

Automata e Linguagens Formais

Teoria da Computação

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Fórmulas da lógica proposicional

Como construir um compilador utilizando ferramentas Java

Análise Sintática Bottom-up

LINGUAGENS FORMAIS E AUTÔMATOS. Prova 2-10/06/ Prof. Marcus Ramos

LINGUAGENS FORMAIS E AUTÔMATOS

Gramáticas e Linguagens Independentes de Contexto

Linguagens Formais e Autômatos P. Blauth Menezes

Compiladores. Top-Down x Bottom Up. Plano da aula. Redução exemplo 1. Redução exemplo 1. Lembrando: construir a tabela de análise LL(1) A Abc b B d

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO II Campus Rio Pomba

Exemplos de autómatos finitos

SCC Capítulo 2 Linguagens Livres de Contexto e Autômatos de Pilha

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Teoria de Linguagens 2 o semestre de 2015 Professor: Newton José Vieira Primeira Lista de Exercícios Entrega: até 16:40h de 15/9.

INE5317 Linguagens Formais e Compiladores. AULA 4: Gramáticas

INE5317 Linguagens Formais e Compiladores AULA 5: Autômatos Finitos

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Linguagens Formais e Autômatos. Simplificação de Gramáticas Livre do Contexto (GLC)

Gramática. Gramática. Gramática

SCC-5832: II. Ling. Livres de Contexto e Autômatos de Pilha

2. DISCIPLINA REQUISITO (RECOMENDAÇÃO) 3. INDICAÇÃO DE CONJUNTO (BCC) Obrigatória TEORIA: 60 LABORATÓRIO: 30

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto. Propriedades de Linguagens Livres de Contexto

Draft-v0.2. Gramáticas Independentes do Contexto O funcionamento de uma CFG Derivação de uma palavra

SCC Capítulo 3 Linguagens Sensíveis ao Contexto e Autômatos Limitados Linearmente

Análise sintática. Questão. E se a análise sintática pudesse ser modelada por autômatos?

Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Curso de Ciências de Computação

Linguagens e Programação Gramáticas. Paulo Proença

LLC's: Lema do Bombeamento e Propriedades de Fechamento

Linguagens Formais e Autômatos P. Blauth Menezes

Os movimentos do reconhecedor correspondem ao uso de derivações mais à esquerda; A árvore de sintaxe é montada de cima para baixo (da raiz em direção

Máquinas de Turing: uma introdução

A. (Autómatos finitos determinísticos e não determinísticos AFD e AFND)

Capítulo II Gramáticas

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

Transcrição:

Problemas decidíveis para LICs Dada uma gramática independente de contexto G, L(G) =? Dada uma gramática independente de contexto G, L(G) é finita? Dada uma gramática independente de contexto G, L(G) é infinita? Dada uma gramática independente de contexto G e x Σ, x L(G)? Departamento de Ciência de Computadores da FCUP MC Aula 20 1

Problemas não decidíveis para LICs Problemas para os quais é possível provar que não existe algoritmo que os responda. Dada uma linguagem independente de contexto L, L é LIC? Dada uma gramática independente de contexto G, G é ambígua? Dada uma linguagem independente de contexto L, L é inerentemente ambígua? Dadas duas gramáticas independentes de contexto G 1 e G 2, L(G 1 ) = L(G 2 )? Dada uma linguagem independente de contexto L, L é determinística? Dada uma gramática independente de contexto G, L(G) = Σ? As demonstrações ficam para ver mais tarde... Departamento de Ciência de Computadores da FCUP MC Aula 20 2

Determinar se uma LIC é vazia Se G = (V, Σ, P, S) gera uma linguagem não vazia então existe uma árvore de derivação para x Σ cuja altura (i.e o comprimento do maior caminho da raiz a uma folha) é no máximo V. Porque: Se uma árvore de derivação tem altura maior que V, tem um caminho em que dois vértices têm o mesmo não-terminal. Então o caminho pode ser encurtado, eliminando a árvore entre esses dois vértices iguais. Processo repete-se até nenhum caminho ter comprimento maior que V. Basta então analisar as árvores de derivação (para formas sentenciais) com altura até V e verificar se alguma é para x Σ, isto é, é uma palavra apenas de não terminais.se não for, então L(G) =. Departamento de Ciência de Computadores da FCUP MC Aula 20 3

Equivalentemente o que se pretende determinar é se S x, para algum x Σ.Isto é se S é gerador! Recorda o algoritmo já dado... Departamento de Ciência de Computadores da FCUP MC Aula 20 4

Determinar se uma LIC é finita ou infinita Seja G = (V, Σ, P, S) uma gramática em F NC que gera L \ {ɛ}. Considere-se, então, o grafo dirigido tal que: conjunto de vértices é V existe um arco de A para B, se A BC ou A CB em P, para algum C. Para a gramática: S AC AB, C SB, A a, B b o grafo é: A S B C Departamento de Ciência de Computadores da FCUP MC Aula 20 5

Lema 20.1. ciclos. L(G) é finita sse o grafo dirigido correspondente não tem Dem. : Por contradição, suponhamos L(G) é finita e que existe um ciclo A 0, A 1,..., A n, A 0. Temos então A 0 α 1 A 1 β 1 α 2 A 2 β 2... α n A n β n α n+1 A 0 β n+1 com α i β i = i e sendo α i e β i sequências de não-terminais.mas como não há não terminais não úteis: α n+1 w e β n+1 x, para alguns x, w Σ e x, w n + 1. Por outro lado, S ya 0 z e A 0 v para alguns y, z e v Σ. (porquê?) Então para todo i: Departamento de Ciência de Computadores da FCUP MC Aula 20 6

S ya 0 z ywa 0 xz yw 2 A 0 x 2 z... yw i A 0 x i z yw i vx i z Como wx > 0, yw i vx i z yw j vx j z para i j. Logo L(G) é infinita. Absurdo! : Suponhamos que o grafo não tem ciclos. Seja r(a) o comprimento do maior caminho que começa em A. Como não há ciclos, r(a) é finito. E se A BC então r(b) < r(a) e r(c) < r(a). Mostra-se por indução sobre r(a) que nenhuma palavra x Σ derivada de A tem comprimento maior que 2 r(a) : Base. Se r(a) = 0 então não há arcos que partam de A e as A- produções são da forma A a. E,portanto, A só deriva palavras de Departamento de Ciência de Computadores da FCUP MC Aula 20 7

comprimento 1 Indução. Suponhamos que para r(a) n 1 a condição se verifica.seja r(a) = n (n > 0). Com produções da forma A a só se derivam palavras de comprimento 1. Suponhamos que começamos com A BC. Como r(b) e r(c) são no máximo n 1,por H.I., derivam palavras com comprimento no máximo 2 n 1.Logo BC não pode derivar palavras de comprimento maior que 2 n. Como r(s) é finito, S não deriva palavras de comprimento maior que 2 r(s),logo L(G) é finita. Departamento de Ciência de Computadores da FCUP MC Aula 20 8

Determinar se x L, L LIC Seja G = (V, Σ, P, S) uma gramática em FNG que gera L \ ɛ. Então, se x ɛ, x L(G) se e só se existe uma derivação de x em G com exactamente x passos. Isto porque cada produção de G adiciona exactamente um terminal à palavra que é gerada. Se cada não terminal tiver no máximo k produções, então há no máximo k x derivações pela esquerda para palavras de comprimento x. Podemos sistematicamente testá-las todas e verificar se alguma deriva x. Mas: Este algoritmo é muito ineficiente: é exponencial em x. Contudo, existem vários algoritmos O(n 3 ) em que n = x. E para LICs determinísticas existem ainda algoritmos mais eficientes! Departamento de Ciência de Computadores da FCUP MC Aula 20 9

Análise sintáctica O problema de reconhecer se x L(G) é essencial para a construção de compiladores e corresponde à chamada análise sintáctica: a determinação se um programa está sintacticamente correcto ou uma frase pertence a uma dada linguagem natural. Normalmente um analisador sintáctico, para além de reconhecer também constrói uma árvore de derivação (ou sintáctica) associada à palavra processada. Departamento de Ciência de Computadores da FCUP MC Aula 20 10

Algoritmo de Cocke-Younger-Kasami Seja G = (V, T, P, S) em FNC e x com x 1. O algoritmo decide se x L(G) analisando todas as subsequências de x = x 1 x 2... x n : primeiro todas de comprimento 1: x 1 x 2 x 3... x n depois as de comprimento 2 : x 1 x 2 x 2 x 3... x n 1 x n...e sucessivamente até n = x : x 1 x 2... x n Para todos 1 i i + s n, representamos por N[i, i + s] o conjunto de não terminais em V que geram a subpalavra x i... x i+s, isto é N[i, i + s] = {A A x i... x i+s } Departamento de Ciência de Computadores da FCUP MC Aula 20 11

Algoritmo CYK: Para i=1 ate n: N[i,i]={A A x i } Para s=1 ate n-1: Para i=1 ate n-s: N[i,i+s]= Para k=i ate (i+s)-1: N[i,i+s] = N[i,i+s] {A A BC, B N[i,k] e C N[k+1,i+s]} A palavra x está em L(G) se e só se S N[1, n]. Este algoritmo é O(n 3 ) E pode ser generalizado a gramáticas não em forma normal de Chomsky... Departamento de Ciência de Computadores da FCUP MC Aula 20 12

Exemplo Seja uma gramática em FNC que gera a linguagem das palavras em {a, b} \ {ɛ} com o mesmo número de a s e b s. S AB BA SS AC BD A a B b C SB D SA e seja x = aabbab. Vamos calcular N[i, j] com 1 i j n aplicando o algoritmo. Departamento de Ciência de Computadores da FCUP MC Aula 20 13

Calculando N[i, i] para i = 1..6 vem i j 1 2 3 4 5 6 1 {A} 2 {A} 3 {B} 4 {B} 5 {A} 6 {B} Para N[i, i + 1] consideramos os Z tais que Z XY tal que X N[i, i] e Y N[i + 1, i + 1] i j 1 2 3 4 5 6 1 {A} 2 {A} {S} 3 {B} 4 {B} {S} 5 {A} {S} 6 {B} Departamento de Ciência de Computadores da FCUP MC Aula 20 14

Para N[i, i + 2] consideramos os Z tais que Z XY tal que X N[i, i] e Y N[i + 1, i + 2], ou X N[i, i + 1] e Y N[i + 2, i + 2]: i j 1 2 3 4 5 6 1 {A} 2 {A} {S} {C} 3 {B} 4 {B} {S} {C} 5 {A} {S} 6 {B} Para N[1, 3] temos de analisar N[1, 1] = {A} e N[2, 3] = {S}, mas não há nenhuma produção com AS; N[1, 2] = e N[3, 3] = {B}; logo N[1, 3] = ; Temos N[2, 4] = {C} porque S N[2, 3], B N[4, 4] e C SB.Para N[3, 5] temos de analisar N[3, 3] = {B} e N[4, 5] = {S}, mas não há nenhuma produção com BS; N[3, 4] = e N[5, 5] = {A}; logo N[3, 5] = Temos N[4, 6] = {C} porque S N[4, 5], B N[6, 6] e C SB. Departamento de Ciência de Computadores da FCUP MC Aula 20 15

Continuando para N[i, i + 3] e i = 1, 2, 3: i j 1 2 3 4 5 6 1 {A} {S} 2 {A} {S} {C} {S} 3 {B} 4 {B} {S} {C} 5 {A} {S} 6 {B} Para N[1, 4] temos que analisar N[1, 1] e N[2, 4], N[1, 2] e N[3, 4], N[1, 3] e N[4, 4]. S N[1, 4] porque A N[1, 1] e C N[2, 4] e S AC.Para N[2, 5] temos que analisar N[2, 2] e N[3, 5], N[2, 3] e N[4, 5], N[2, 4] e N[5, 5]. S N[2, 5] porque S N[2, 3] e S N[4, 5] e S SS. Departamento de Ciência de Computadores da FCUP MC Aula 20 16

E, finalmente, calculando N[i, i + 4], com i = 1, 2 e N[i, i + 5] com i = 1, i j 1 2 3 4 5 6 1 {A} {S} {D} {S} 2 {A} {S} {C} {S} {C} 3 {B} 4 {B} {S} {C} 5 {A} {S} 6 {B} Como S N[i, 6], x L(G). Departamento de Ciência de Computadores da FCUP MC Aula 20 17

Outros analisadores sintácticos Nota: os assuntos seguintes são de caracter informativo e não fazem parte do programa da disciplina. Tipos de algoritmos, quanto ao modo como constroem a árvore de derivação: descendentes (top-down) produzem formas sentenciais intermédias α (V Σ) tal que já se tem S α mas não ainda α x Exemplos: recursivo descendente de Earley ascendentes (bottom-down) produzem formas sentenciais intermédias α (V Σ) tal que é certo que α x mas não ainda S α Exemplos: CYK shift-reduce LR Departamento de Ciência de Computadores da FCUP MC Aula 20 18

Algoritmo de Earley ([Ear70]) Algoritmo descendente, muito eficiente, que se aplica a qualquer gramática independente de contexto G = (V, Σ, P, S). Constrói, a partir da palavra a reconhecer x = a 1 a 2... a n uma tabela triangular M, em que cada célula contém produções da gramática com indicação do progresso na análise (denominados items) que correspondem a candidatos a ser aplicados: A γ β M i,j se e só se existe α (V Σ) tal que S a 1... a i Aα A γβ P γ a i+1... a j. Então x L(G) sse S x. M 1,n Departamento de Ciência de Computadores da FCUP MC Aula 20 19

Gramáticas LR(k) e APD Família de gramáticas para as quais existem analisadores sintácticos ascendentes determinísticos, uma vez que com k símbolos de avanço (lookahead) é possível determinar exactamente quais as produções a aplicar para obter uma derivação pela direita (e assim é possível ao analisador sintáctico construir essa derivação por ordem inversa: da palavra a S). Vamos supor k = 0. Um item duma gramática LR(0) é uma produção com um ponto ( ) em qualquer parte do seu lado direito. Exemplo 20.1. Sendo G = ({S, S, A}, {a, b, c}, {S Sc, S SA A, A asb ab}, S ), os items para S são S Sc, S S c es Sc Determina os restantes items de G. Departamento de Ciência de Computadores da FCUP MC Aula 20 20

Um identificador (handle) de uma forma sentencial direita γ é uma subpalavra β que pode ser introduzida no último passo duma derivação pela direita de γ: S d δaw d δβw e γ = δβw Um prefixo viável de uma forma sentencial direita γ é qualquer prefixo de γ que não termina mais à direita do que o fim dum identificador de γ Exemplo 20.2. Considerando a gramática do exemplo 20.1 S Sc SAc SaSbc o identificador de SaSbc é asb e os prefixos viáveis são ɛ, S, Sa,SaS e SaSb. Um item A α β é válido para um prefixo viável γ se existe uma derivação pela direita tal que: S d δaw d δαβw e γ = δα Um item é completo se for da forma A α Departamento de Ciência de Computadores da FCUP MC Aula 20 21

Então, se A α for válido para γ então pode ser que A α tenha sido usado no último passo para derivar γw (de δaw). Mas, dum modo geral, pode não ser verdade... pois pode haver outro w Exemplo 20.3. Dada gramática do exemplo 20.1 e abc, temos que S d Ac d abc e A ab é válido para o prefixo viavél ab e podemos deduzir que Ac é a forma sentencial direita anterior a abc. Dada uma gramática G, o conjunto de items válidos para os prefixos viáveis é uma linguagem regular. Podemos construir um AFND, cujos estados são os items de G: M = (Q, V Σ, δ, s 0, Q) Q = {A α β A αβ P } {s 0 } δ(s 0, ɛ) = {S α S α P } δ(a α Bβ, ɛ) = {B γ P } δ(a α Xβ, X) = {A αx β} Tem-se que Departamento de Ciência de Computadores da FCUP MC Aula 20 22

A α β δ(s 0, γ) se e só se A α β é válido para γ. Uma gramática é LR(0) se: 1. O símbolo inicial não aparece no lado direito de nenhuma regra 2. Para todo o prefixo viável γ de G, sempre que A α é válido para γ, não existe outro item completo ou com um terminal à direita do ponto ( ) válido para γ. O autómato anterior, ou melhor, o AFD equivalente obtido pela construção de subconjuntos, permite determinar se uma gramática é LR(0):no AFD, o caminho do estado inicial etiquetado por γ leva ao estado que corresponde ao conjunto de items válidos para γ. Assim basta ver se algum estado do AFD viola a condição 2. Exercício 20.1. LR(0). Mostra que a gramática G definida no exemplo 20.1 é Departamento de Ciência de Computadores da FCUP MC Aula 20 23

Proposição 20.1. A cada gramática LR(0) corresponde um autómato de pilha determinístico (APD) e se L é aceite por um APD então L# = {w# w L}, em que # / Σ tem uma gramática LR(0). Podemos, assim, usar o APD como analisador sintáctico, que constrói precisamente uma derivação pela direita (em modo inverso...) e em que a pilha guarda os prefixos viáveis. Nota, que em particular, uma gramática LR(0) não é ambígua!. Estas gramáticas são usadas muito na construção de compiladores, pois a partir delas é possível construir automaticamente analisadores sintácticos eficientes. (ex: yacc, bison são aplicações no UNIX para esses fins...) Departamento de Ciência de Computadores da FCUP MC Aula 20 24

Leituras [HMU00] (Cap 7.4) [Tom99] (Pág 98-100,114-115) Referências [Ear70] Jay Earley. An efficient context-free parsing algorithm. Communications of the ACM, 14, 1970. [HMU00] John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman. Introduction to Automata Theory, Languages and Computation. Addison Wesley, 2nd edition, 2000. [Tom99] Ana Paula Tomás. Apontamentos de modelos de computação. Technical report, Departamento de Ciência de Computadores, FCUP, 1999. Departamento de Ciência de Computadores da FCUP MC Aula 20 25