• Nenhum resultado encontrado

Linguagens Formais e Autômatos

N/A
N/A
Protected

Academic year: 2019

Share "Linguagens Formais e Autômatos"

Copied!
58
0
0

Texto

(1)

DCC063

Linguagens Formais

e Autômatos

(2)

 Uma palavra pertence ou não a uma linguagem?

 É uma das principais questões relacionadas com o

estudo de Linguagens Formais

 “Dispositivo” de reconhecimento

 pode ser especificado como um

◼ modelo de autômato ou

◼ algoritmo implementável em computador (CYK)

 em qualquer caso, é importante determinar

◼ "quantidade de recursos" necessários

◼ por exemplo: tempo e espaço

Algoritmos de reconhecimento (LLC)

Análise sintática

(3)

Algoritmos de reconhecimento

 construídos a partir de uma GLC

 Algoritmos de reconhecimento CYK

 reconhecedores que usam Autômato com Pilha

 muito simples

 em geral, ineficientes

 tempo de processamento é proporcional a k|w| (w

-entrada; k depende do autômato)

 não são recomendáveis para entradas de tamanhos

consideráveis

Algoritmos de reconhecimento (LLC)

Análise sintática

(4)

Algoritmos de reconhecimento CYK

 Algoritmo de Cocke-Younger-Kasamai (CYK)

 É construído sobre um GLC na FNC.

 Gera bottom-up todas as árvores de derivação da

entrada em tempo proporcional a |w|3, onde w é

a cadeia a ser analisada (reconhecida).

 Baseado na técnica de programação dinâmica.

 Constrói uma tabela de derivação, onde cada

célula representa uma raiz que pode gerar a correspondente subárvore.

Algoritmos de reconhecimento (LLC)

Análise sintática

(5)

Algoritmos de reconhecimento CYK

 Suponha:

 G = (N, T, P, S) uma GLC na FNC onde

T = {a1, a2, ..., an}

 W = a1a2...an a entrada a ser analisada

Algoritmos de reconhecimento (LLC)

Análise sintática

(6)

Algoritmos de reconhecimento CYK

 O algoritmo CYK é composto pelas seguintes

etapas, onde Vrs representa as células de uma

tabela de derivação:

Algoritmos de reconhecimento (LLC)

Análise sintática

6

a1 a2 ... an

s

r

Conjunto de raízes para as árvores de derivação da

(7)

Algoritmos de reconhecimento CYK

a) Var. que geram diretamente terminais, A→ a : para r de 1 até n faça

Vr1 = {A | A → ar  P}

b) Produções que geram 2 variáveis (A → BC)

para s de 2 até n faça

para r de 1 até n + 1 s faça Vrs = ;

para k de 1 até s – 1 faça

Vrs = Vrs  {A | A → BCP, BVrk, CV(r+k)(s-k)}

Algoritmos de reconhecimento (LLC)

Análise sintática

(8)

Algoritmos de reconhecimento CYK

 Exemplo1. Dada a gramática livre de contexto G: S → AA | AS | b

A → SA | AS | a

e a cadeia

w = abaab

Utilizar o algoritmo CYK para verificar se a cadeia w  L(G).

Algoritmos de reconhecimento (LLC)

Análise sintática

(9)

Algoritmos de reconhecimento CYK

 Exemplo1. Construir a tabela:

Algoritmos de reconhecimento (LLC)

Análise sintática

9

S → AA | AS | b A → SA | AS | a

w = abaab

a b a a b

s

(10)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (a):

Algoritmos de reconhecimento (LLC)

Análise sintática

10

S → AA | AS | b A → SA | AS | a

w = abaab

A S A A S

(11)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

11

S → AA | AS | b A → SA | AS | a

w = abaab

A S A A S

(12)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

12

S → AA | AS | b A → SA | AS | a

w = abaab

S,A

A S A A S

(13)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

13

S → AA | AS | b A → SA | AS | a

w = abaab

S,A A

A S A A S

(14)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

14

S → AA | AS | b A → SA | AS | a

w = abaab

S,A A S

A S A A S

(15)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

15

S → AA | AS | b A → SA | AS | a

w = abaab

S,A A S S,A

A S A A S

(16)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

16

S → AA | AS | b A → SA | AS | a

w = abaab

S,A A S S,A

A S A A S

(17)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

17

S → AA | AS | b A → SA | AS | a

w = abaab S

S,A A S S,A

A S A A S

(18)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

18

S → AA | AS | b A → SA | AS | a

w = abaab S,A

S,A A S S,A

A S A A S

(19)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

19

S → AA | AS | b A → SA | AS | a

w = abaab S,A

S,A A S S,A

A S A A S

(20)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

20

S → AA | AS | b A → SA | AS | a

w = abaab

S,A S

S,A A S S,A

A S A A S

(21)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

21

S → AA | AS | b A → SA | AS | a

w = abaab

S,A S S,A

S,A A S S,A

A S A A S

(22)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

22

S → AA | AS | b A → SA | AS | a

w = abaab

S,A S S,A

S,A A S S,A

A S A A S

(23)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

23

S → AA | AS | b A → SA | AS | a

w = abaab

S,A S S,A

S,A A S S,A

A S A A S

(24)

Algoritmos de reconhecimento CYK

 Exemplo1. Etapa (b):

Algoritmos de reconhecimento (LLC)

Análise sintática

24

S → AA | AS | b A → SA | AS | a

w = abaab S,A

S,A S S,A

S,A A S S,A

A S A A S

(25)

Algoritmos de reconhecimento CYK

 Exemplo1. Finalmente obtemos:

 Como S está no topo da tabela, então wL(G)!

Algoritmos de reconhecimento (LLC)

Análise sintática

25

S,A

S,A S,A

S,A S S,A

S,A A S S,A

A S A A S

(26)

Algoritmos de reconhecimento CYK

 Exemplo 2. Seja L(G) a linguagem gerada pela

gramática livre de contexto G:

S → AB | XB T → AB | XB X →AT

A → a B →b

Utilizar o algoritmo CYK para verificar se a cadeia w  L(G), onde:

 w = aaabb wL(G)  w = aaabbb wL(G)

Algoritmos de reconhecimento (LLC)

Análise sintática

(27)

Algoritmos de reconhecimento CYK

 Exercícios. Utilizar o algoritmo CYK para verificar

se a cadeia w  L(G), onde: :

a) S → AB | b w = aabaa A → a

B →SA

b) S → SF | a w = aaabbabaaaabba A → CG | SS | CS

C → b F →AS G →CA

Algoritmos de reconhecimento (LLC)

Análise sintática

(28)

Algoritmos de reconhecimento CYK

c) S → AB | BC w = bbab A → BA | a

B →CC | b C → AB | a

d) L(G) = {w | w  (a,b)+ e |w|

a = |w|b }

S → aB | bA w = abaabb A → a | aS | bAA

B →b | bS | aBB

Algoritmos de reconhecimento (LLC)

Análise sintática

(29)

DeterminismoNão-determinismo

 LLC Determinística (LLCD)

 Um AP é determinístico quando cada uma de suas

configurações apresenta, no máximo, uma configuração que pode sucedê-la.

 LLCD são aquelas LLC aceitas por autômatos de

pilha determinísticos (APD).

 Exemplos (LLCD e LLC):

Ld = {wcwR | w(a | b)*}LLCD

Ln = {wwR | w(a | b)*}LLCN

Algoritmos de reconhecimento (LLC)

Análise sintática

(30)

DeterminismoNão-determinismo

 É possível criar um APD para a linguagem

L = a*  {anbn | n1} ?

 Não. Não há como manter a quantidade de a´s

até achar um b e ao mesmo tempo reconhecer apenas a´s. (L não tem a propriedade do prefixo)

 Mas L é LLCD.

 Devemos, para mostrar este fato, alterar

ligeiramente o critério de aceitação do AP.

Algoritmos de reconhecimento (LLC)

Análise sintática

(31)

DeterminismoNão-determinismo

 Diz-se que um LLC L tem a propriedade do

prefixo se não existem duas cadeias diferentes x

e y em L tais que x é um prefixo de y.

 Dizemos que uma LLC é determinística se ela for

reconhecida por um APD que tem a capacidade extra de localizar o final da cadeia de entrada.

 Formalmente, diz-se que um LLC L* é

determinística se L$ = L(M) para algum APD M.

 Onde $ é um novo símbolo e $.

Algoritmos de reconhecimento (LLC)

Análise sintática

(32)

DeterminismoNão-determinismo

 Toda LLCD definida desta forma também é uma

LLC.

 Através desta definição é possível criar um APD

M para a linguagem L$ = (a*  {anbn | n1})$

Algoritmos de reconhecimento (LLC)

Análise sintática

32

Estado Entrada Topo da pilha transições

q1 a  (q1, a)

q1 b a (q2, ) q1 $  (q3, )

q2 b a (q2, )

q2 $  (q2, )

(33)

DeterminismoNão-determinismo

 Questão: toda LLC não seria determinística?

Teorema: A classe das LLCD é fechada em

relação à operação de complementação

 Por exemplo, considere a linguagem (LLC):

 E seu complemento (é uma LLC?)

 Observe que anbncnL

Algoritmos de reconhecimento (LLC)

Análise sintática

(34)

Algoritmos de reconhecimento (LLC)

Análise sintática

(35)

DeterminismoNão-determinismo

Corolário. A classe de LLCD está propriamente

contida na classe de LLC.

 Assim, o não determinismo é mais poderoso do

que o determinismo no âmbito dos AP´s.

Algoritmos de reconhecimento (LLC)

Análise sintática

35

Ling. Regular

(36)

Análise Sintática Descendente Baseada em AP

 Como vimos, nem todas as LLC podem ser aceita

por um APD

 Vamos considerar algumas linguagens que não

estão sujeitas a esta restrição.

 Isto é, iremos estudar LLC´s que podem ser

convertidas em um APD.

Algoritmos de reconhecimento (LLC)

Análise sintática

(37)

Análise Sintática Descendente Baseada em AP

 Considere a linguagem L = {anbn | n0} gerada

pela GLC G:

S → aSb | 

 Seja M1 um AP tal que L(M1) = L(G) :

Algoritmos de reconhecimento (LLC)

Análise sintática

37

Estado Entrada Topo da pilha transições

p   q, S

qS q, aSb

q,

q a a q, 

(38)

Análise Sintática Descendente Baseada em AP

 O AP M1 é não determinístico

 Contudo, a linguagem L é determinística.

Portanto, é possível modificar M1 para torná-lo um APD M2 que aceita L$.

 Qual das duas transições aplicar

depende do próximo símbolo de entrada (lookahead)

Algoritmos de reconhecimento (LLC)

Análise sintática

38

Estado Entrada Topo da pilha transições

qS q, aSb

(39)

Análise Sintática Descendente Baseada em AP

 Estratégia:

 Se esse símbolo for um a, então deve-se substituir S

por aSb na pilha

 Se esse símbolo for um b, então deves substituir S

por  na pilha (remover S)

 M2 consome antecipadamente um símbolo da

entrada (lookahead) e incorpora essa

informação em seu estado.

Algoritmos de reconhecimento (LLC)

Análise sintática

(40)

Análise Sintática Descendente Baseada em AP

 M2 = ({p, q, qa, qb, q$}, {a,b}, {a, b, S}, 2, p, {q$})

Algoritmos de reconhecimento (LLC)

Análise sintática

40

# Estado Entrada Topo da pilha

transições

1 p   q , S

2 q aqa ,

3 qa  a q , 

4 q bqb ,

5 qb  b q , 

6 q $q$ ,

7 qa  S qa , aSb

(41)

Análise Sintática Descendente Baseada em AP

 M1 e M2 na forma de diagrama

Algoritmos de reconhecimento (LLC)

Análise sintática

41

p q q$

qa

qb

(, , S)

(, a, ) (a, , ) (, S, aSb)

(b, , ) (, b, )

(, S, ) ($,  , )

q p (, , S)

(, S, aSb)

(, S, )

(a, a, )

(b, b, )

(42)

Análise Sintática Descendente Baseada em AP

 A partir do estado q, M2 lê um símbolo de

entrada e, sem alterar a pilha, transita para: qa, qb ou q$. M2 é determinístico e aceita ab$ como segue:

Algoritmos de reconhecimento (LLC)

Análise sintática

(43)

Análise Sintática Descendente Baseada em AP

Algoritmos de reconhecimento (LLC)

Análise sintática

43

Estado Entrada ainda

não lida Pilha

Transição utilizada

Passo Regra de G

p ab$ 

-0

q ab$ S 1

1

qa b$ aSb 7

3 S → aSb

q b$ Sb 3

4

qb $ Sb 4

5

qb $ b 8

6 S →

q $  5

7

q$   6

8

qa b$ S 2

(44)

Análise Sintática Descendente Baseada em AP

 Dispositivo como M2 são conhecidos como

analisadores sintáticos. (produz a arvóre

sintática).

 Em particular, M2 é um analisador sintático

descendente. Raiz → folha, esquerda → direta:

Algoritmos de reconhecimento (LLC)

Análise sintática

44

S

a S b

passo 3

passo 6

Parte já constuída da árvore de análise

sintática

Parte da árvore ainda a ser constuída S

(45)

Análise Sintática Descendente Baseada em AP

 Nem todas as LLC têm um APD que podem ser

derivados a partir da técnica do lookahead.

 Algumas LLC sequer são determinística

 Algumas LLC não se mostram diretamente

compatíveis com a análise sintática por

lookahead.

 Fazendo algumas modificações na gramática,

pode-se torná-las compatíveis.

 A classe de LLC compatível com esta técnica são

conhecidas como LL(1).

Algoritmos de reconhecimento (LLC)

Análise sintática

(46)

Análise Sintática Descendente Baseada em AP

 Considere a gramática (expressões aritméticas) E → E + T | T

T → T * F | F

F → (E) | id | id(E)

 O AP (não determinístico) para esta gramática é:

Algoritmos de reconhecimento (LLC)

Análise sintática

46

(0) (p, , ) → (q, E)

(1) (q, , E) → (q, E + T)

(2) (q, , E) → (q, T)

(3) (q, , T) → (q, T * F)

(4) (q, , T) → (q, F)

(5) (q, , F) → (q, (E)) (6) (q, , F) → (q, id) (7) (q, , F) → (q, id(E))

(47)

Análise Sintática Descendente Baseada em AP

 O não determinismo está nas transições: 1-2, 3-4

e 5-6-7

 Agravante: a escolha da transição correta não é

possível consultando o símbolo seguinte da entrada (lookahead).

 Transições 5, 6 e 7:

 A transição 5 pode ser descartada (começa com ‘(‘)  Transições 6 e 7, ambas começam com id.

Algoritmos de reconhecimento (LLC)

Análise sintática

(48)

Análise Sintática Descendente Baseada em AP

 Transições 5, 6 e 7.

 Basta fatorar estas duas transições, obtem-se:

F → (E) | idA A → (E) | 

 Assim, substitui-se as transições 6 e 7 por

(5’) (q, , F) → (q, idA) (6’) (q, , A) → (q, ) (8’) (q, , A) → (q, (E))

Algoritmos de reconhecimento (LLC)

Análise sintática

(49)

Análise Sintática Descendente Baseada em AP

 Transições 1 e 2: Se o entrada for id e o topo da

pilha for E, o AP pode executar:

 a transição 2, substituindo E por T (entrada id); ou

 a transição 1, substituindo E por E+T e depois E por

T (entrada id + id); ou

 a transição 1 duas vezes, e depois a transição 2 uma

vez. (entrada id + id + id);

 e assim por diante.

 O problema é que a gramática é recursiva à

esquerda.

Algoritmos de reconhecimento (LLC)

Análise sintática

(50)

Análise Sintática Descendente Baseada em AP

 Retirando a recursão à esquerda obtemos G’: E → TE’

E’ → +TE’ |  T → FT’

T’ → *FT’ |  F → (E) | idA A → (E) | 

 Podemos obter um APD consultando

antecipadamente o próximo símbolo da entrada.

Algoritmos de reconhecimento (LLC)

Análise sintática

(51)

Análise Sintática Descendente Baseada em AP

 Podemos então construir o seguinte APD M4 que

aceita L(G)$:

Algoritmos de reconhecimento (LLC)

Análise sintática

51

(p, , ) → (q, E)

(q, a, ) → (qa, ) para cada a{$} (qa, , a) → (q, ) para cada a

(qa, , E) → (qa, TE’) para cada a{$} (q+, , E’) → (q+, +TE’)

(qa, , E’) → (qa, ) para cada a{ ), $} (qa, , T) → (qa, FT’) para cada a{$}

(q*, , T’) → (q*, *FT’)

(qa, , T’) → (qa, ) para cada a{+,),$} (q(, , F) → (q(, (E))

(qid, , F) → (qid, idA) (q(, , A) → (q(, (E))

(52)

Análise Sintática Descendente Baseada em AP

 Pode-se seguir as seguintes regras para

construir um analisador descendente (APD):

 eliminar a recursão à esquerda;

fatorar a gramática (nem sempre é possível);

 examinar a gramática resultante quanto a aplicação

da antecipação do símbolo da entrada para todas as produções que têm o mesmo lado esquerdo.

 As gramáticas que exibem esta propriedade são

ditas LL(1).

Algoritmos de reconhecimento (LLC)

Análise sintática

(53)

Análise Sintática Descendente Baseada em AP

APGLC na FNG: seja G = (N, T, P, S) uma GLC

na FNG, L(G). Então é possível definir um

APND M = ({p, q}, , , , p, {q}) tal que L(G)=

L(M) onde:

  = T;

  = N

  =

(54)

Análise Sintática Descendente Baseada em AP

APGLC na FNG: Exemplo. Considere a

gramática das expressões aritméticas na FNG:

E → (EX | id | (EXY | idY | (EXZ | idZ | (EXYZ | idYZ

F → (EX | id

T → (EX | id | (EXY | idY

Y → *F | *FY

Z → +T | +TZ

X → )

Algoritmos de reconhecimento (LLC)

Análise sintática

(55)

Análise Sintática Descendente Baseada em AP

 Aplicando as regras de construção, obtemos a

seguinte função de transição :

(p, , ) → (q, E) (q, (, F) → (q, EX) (q, id, F) → (q, )

(q, (, T) → (q, EX), (q, EXY) (q, id, T) → (q, ), (q, Y)

(q, (, E) → (q, EX), (q, EXY), (q, EXZ), (q, EXYZ) (q, id, E) → (q, ), (q, Y), (q, Z), (q, YZ) (q, *, Y) → (q, F), (q, FY)

(q, +, Z) → (q, T), (q, TZ) (q, ), X) → (q, )

Algoritmos de reconhecimento (LLC)

Análise sintática

(56)

Análise Sintática Descendente Baseada em AP

 Esta gramática não tem recursão à esquerda.

 Para construir um APD para esta linguagem,

basta:

 fatorá-la (possivelmente não ficará mais na FNG);

 aplicar a técnica do lookahead (se possível).

 Não usar a forma de conversão de GLC na FNG

para AP não determinístico (como visto acima).

Algoritmos de reconhecimento (LLC)

Análise sintática

(57)

Análise Sintática Descendente Baseada em AP

 Nem toda LLC determinística é LL(k)

 A classe de LLC determinística é conhecida por

LR(k).

 A classe de LLC determinísticas é não-ambígua.

Algoritmos de reconhecimento (LLC)

Análise sintática

57

Ling. Regular Não-ambígua

LR

LL LLC

(58)

Análise Sintática Descendente Baseada em AP

 Exemplos

Algoritmos de reconhecimento (LLC)

Análise sintática

58

Determinísticas:

Não determinísticas:

LL: {anbn | n 0}

LR: {a2nb2nc | n 0}  {a2n+1b2n+1d | n 0}

Não ambígua: {wwR | w {a, b}* } Inerentemente ambígua

Referências

Documentos relacionados

classificatório, com pontuação máxima de 100 (cem pontos) será ministrada na presença de uma banca examinadora e será constituída de uma aula, com duração de até 30

 Desmembrar as formas sentenciais de comprimento 3 ou mais em uma cascata de produções, cada uma com uma forma sentencial consistindo em 2

A aplicação da Análise Preliminar de Riscos foi importante para conhecer os riscos em potencial das atividades realizadas pela empresa nos setores de descarga,

Essa geometria é frequentemente utilizada para a inspeção de diferença de cores entre dois produtos que não são feitos durante o mesmo processo ou com os mesmos materiais..

Pudemos perceber que a melhora de hábitos alimentares e de atividade física de crianças em idade escolar através da instrução de seus docentes, com palestra visando a

O Piccolo  AmLyte 13, utilizado com o Analisador Químico Piccolo Xpress  , destina-se a ser utilizado para a determinação quantitativa in vitro de alanina aminotransferase

Os profissionais do NDRO acreditam que o Laboratório desenvolve atividades para o aperfeiçoamento pessoal e profissional de seus colaboradores, capacitando-os não só

VIII- o extraditando houver de responder, no Estado requerente, perante Tribunal ou Juízo de exceção". Deste modo, pela leitura deste dispositivo depreende-se que a