36
Curso: Ciência da Computação Turma: 4º/5º Série Aspectos Teóricos da Computação Aula 3 Linguagens e Gramáticas

Aula 3 linguagens e gramaticas

  • Upload
    wab030

  • View
    2.413

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Aula 3   linguagens e gramaticas

Curso: Ciência da Computação Turma: 4º/5º Série

Aspectos Teóricos da Computação

Aula 3

Linguagens e Gramáticas

Page 2: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 2

Linguagem

O Dicionário Aurélio define linguagem como:

o uso da palavra articulada ou escrita como meio de expressão e comunicação entre as pessoas.

Entretanto, esta definição não é suficientemente precisa para permitir o desenvolvimento matemático de uma teoria baseada em linguagens.

Precisamos de uma definição mais objetiva e ampla.

Uma linguagem é composta de de palavras que formam um alfabeto.

Page 3: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 3

Albabeto

Um alfabeto é um conjunto finito de símbolos ou caracteres.

Portanto:● Um conjunto infinito não é um alfabeto;● o conjunto vazio é um alfabeto.

Exemplo:

{a,b,c} ou {} são alfabetos

N não é um alfabeto

{a,b,aa,ab,bb,ba,bb....} não é um alfabeto

Page 4: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 4

Alfabeto de uma Linguagem de Programação

O alfabeto de uma linguagem de programação como Pascal é o conjunto de todos os símbolos usados na construção de programas, incluindo letras, dígitos, caracteres especiais, espaço.

Page 5: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 5

Palavra

Uma Palavra, Cadeia de Caracteres ou Sentença sobre um alfabeto é uma sequência finita de símbolos do alfabeto justapostos.

O símbolo ε denota a palavra ou cadeia vazia.

Page 6: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 6

Prefixo, Sufixo e SubpalavraUm Prefixo ou Sufixo de uma palavra é qualquer sequência inicial respectivamente final

de símbolos da palavra.

Uma Subpalavra é qualquer sequência de símbolos contíguos da palavra.

Exemplos:

abcb é uma palavra do alfabeto {a,b,c}

Relativamente à palavra abcb, vale que:

ε , a, ab, abc, abcb são todos os prefixos;

ε, b, cb, bcb, abcb são todos os sufixo;

Qualquer prefixo ou sufixo é uma subpalavra;

Page 7: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 7

Palavra: Linguagem de Programação

Em uma linguagem de programação como Pascal, uma palavra é um programa.

Page 8: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 8

ConcatenaçãoA Concatenação de Palavras ou simplesmente Concatenação é uma operação

binária definida sobre um conjunto de palavras, a qual associa a cada par de palavras uma palavra formada pela justaposição de primeira com a segunda.

Propriedades

suponha v,w,t palavras quaisquer

a) Associativa. v(wt) = (vw)t

b) Elemento neutro. εw = wε

Exemplo: Suponha o alfabeto Σ = {a,b}. Então, para as palavras v = baaaa e w = bb vale que:

vw = baaaabb

vε = baaaa

Concatenação sucessiva de uma palavra..

Se w = a o que seria w5?

Page 9: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 9

Concatenação SucessivaA Concatenação Sucessiva é representada na forma de um expoente,

wn onde n representa o número de concatenações sucessivas é definida indutivamente a partir da operação de concatenção binária, como segue:

w0 = ε

wn = wwn-1 n>0

Exemplo

Seja w uma palavra e a um símbolo, Então:

w3 = www

w1 = w

a5 = aaaaa

an = aaaa..a (o símbolo repetido n vezes)

Page 10: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 10

Alfabeto

Se Σ representa o alfabeto, então:

Σ* denota o conjunto de todas as palavras possíveis sobre Σ.

Σ+ denota Σ* - {ε }

Conjunto de todas as palavras.

Seja Σ um alfabeto. Então o conjunto de toda as palavras Σ* é indutivamente definido como segue:

a. Base da indução: ε є Σ* para qualquer x є ∑, vale x є ∑*

b. Passo da indução: Se u e v são palavras de ∑* então a concatenação uv é uma palavra de ∑*

Page 11: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 11

Exemplo: Conjunto de todas as palavras

● Se ∑ = {a,b}, então:● ∑+ = {a,b,aa,ab,ba,bb,aaa,...}● ∑* = {ε, a,b,aa,ab,ba,bb,aaa,...}

Page 12: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 12

Comprimento, tamanho de uma palavra

● O comprimento ou Tamanho de uma palavra w, representado por |w|, é o número de símbolos que compõem a palavra. Portanto, para um dado alfabeto ∑ , comprimento é uma função com domínio em ∑* e codomínio em N.

a. |abc| = 3

b. | ε | = 0

Page 13: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 13

Linguagem Formal

Uma linguagem formal ou simplesmente Linguagem L sobre um alfaberto ∑ é um conjunto de palavras sobre ∑, ou seja:

L ⊆ ∑*

Page 14: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 14

Exemplo de Linguagem Formal● O conjunto Ø e o conjunto formado pela palavra vazia { ε }

são linguagens sobre qualquer alfabeto. Obviamente, vale que:

Ø ≠ { ε }

● Os conjuntos ∑* e ∑+ são linguagens sobre um alfabeto ∑ qualquer. Obviamente, vale que:

∑* ≠ ∑+

Page 15: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 15

Exercício● Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de

palíndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre ∑ é um exemplo de linguagem infinita. Quais são os elementos dessa linguagem?

Page 16: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 16

Exemplo de Linguagem Formal● Suponha o alfabeto ∑ = {a,b}. Então, o conjunto de

palíndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre ∑ é um exemplo de linguagem infinita. Assim, são palavras dessa linguagem:

, a, b, aa, bb, aaa, aba, bab, bbb, aaa, ...

Page 17: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 17

Exemplo: Linguagem Formal: Linguagem de Programação

● Um linguagem de programação como C é formalmente definida pelo conjunto de todos os programas (palavras) da linguagem.

Page 18: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 18

Gramática

Como definir todos os programas de uma determinada linguagem se torna inviável pois é infinito criou-se uma nova maneira de especificar linguagem de maneira finita, a gramática.

Uma gramática é, basicamente, um conjunto finito de regras as quais, quando aplicadas

sucessivamente, geram palavras. O conjunto de todas a palavras geradas por uma

gramática define as linguagens.

Page 19: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 19

Gramática

Exemplo de Gramática:

S→A

A→0A1

A→ε

Uma gramática consiste de uma coleção de regras que especificam como derivar strings de uma linguagem.

As regras de produção envolvem símbolos da linguagem (ou terminais) e variáveis (ou símbolos não-terminais), que representam conjuntos de strings.

Uma das variáveis é distinguida como símbolo inicial.

Page 20: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 20

Exemplo de Derivação de StringSeja G1 a seguinte gramática:

S → A

A → 0A1

A →ε

Exemplo de derivação de string usando G1 :

S A 0A1 00A11 000A111 000111⇒ ⇒ ⇒ ⇒ ⇒

A sequência de substituições é chamada de derivação.

O conjunto de todos os strings de terminais gerados desta forma constitui a linguagem especificada pela gramática.

Escrevemos L(G) para denotar a linguagem gerada pela gramática G. Portanto, L(G1 ) = {0n1n | n ≥ 0 }

000111 é chamada de string terminal pois não tem como substituir mais nenhuma variável nela.

Page 21: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 21

GramáticaUma gramática de Chomsky, Gramática Irrestrita ou simplesmente Gramática é uma quadrupla ordenada:

G = {V, ∑,P,S} na qual:

a. V, um conjunto finito de símbolos variáveis ou não terminais;

b. ∑, um conjunto finito de símbolos terminais ou constantes disjunto de V;

c. P: (V U ∑ )+ → (V U ∑ )* é uma relação finita (ou seja, P é um conjunto finito de pares), denominada de Relação de Produções ou simplesmente produções. Cada par da relação é denominado de regra de produção ou simplesmente produção; P pode ser considerada a função que leva um elemento x a um elemento y.

d. S, um elemento distinguido de V denominado símbolo inicial ou variável inicial.

Page 22: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 22

Exemplo de Gramática

G = ({S, A}, {0, 1}, R, S) onde R:

S → A

A → 0A1

A → ε

Page 23: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 23

Exercício de Gramática

Formule uma outra gramática baseada na gramática do exemplo

G = ({S, A}, {0, 1}, R, S) onde R:

S → A

A → 0A1

A → ε

15 minutos em grupo

Page 24: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 24

Derivação● Se u, v , w (V ∑ )∈ ∪ ∗ (i.e., são strings de variáveis e

terminais) e α → β R (i.e., é uma regra da gramática) então ∈dizemos que uαv deriva uβv, escrito como uαv uβv .⇒

● Podemos também dizer que uβv é derivado diretamente de uαv usando a regra α → β

● u ⇒k v se existe uma sequência finita

u0 , u1 , . . . , uk (V ∑ )∈ ∪ ∗ , para k > 0, tal que

u = u0 u⇒ 1 . . . u⇒ ⇒ k = v

● Também dizemos que u0 , u1 , . . . , uk é uma derivação de v a partir de u

● Escrevemos u ⇒∗ v se u = v ou u ⇒k v para algum k > 0

Page 25: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 25

Linguagem Especificada por uma Gramática

Seja G = (V , Σ, R, S) uma gramática.

A linguagem especificada por G é

L(G) = {w Σ∈ ∗ | S ⇒∗ w }

Page 26: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 26

Tipos de Regras

Page 27: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 27

Tipos de Gramática – Hierarquia de Chomsky

Page 28: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 28

Notação

Para distinguir não-terminais de terminais, frequentemente usamos não-terminais entre < > e terminais entre aspas ” ”.

Se duas ou mais regras têm o mesmo lado esquerdo, por exemplo:

A → 0A1 e A →ε

podemos escrever, de forma mais compacta

A → 0A1 | ε.

Obs. Só use essa regra quando tudo estiver muito claro na sua cabeça.

Page 29: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 29

Gramática Livre de Contexto G2A gramática G2 a seguir especifica um fragmento da língua inglesa:

<SENTENCE> → <NOUN_PHRASE><VERB_PHRASE>

<NOUN_PHRASE> → <CP_NOUN> | <CP_NOUN><PREP_PHRASE>

<VERB_PHRASE> → <CP_VERB> | <CP_VERB><PREP_PHRASE>

<PREP_PHRASE> → <PREP><CP_NOUN>

<CP_NOUN> → <ARTICLE><NOUN>

<CP_VERB> → <VERB> | <VERB><NOUN_PHRASE>

<ARTICLE> → a | the

<NOUN> → boy | girl | flower

<VERB> → touches | likes | sees

<PREP> → with

Page 30: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 30

Gramática Livre de Contexto G2Note que:

A CFG(Gramática livre de contexto) G2 tem 10 variáveis (escritas em letras maiúsculas e entra < >) e 9 não-terminais (escritos no alfabeto padrão), mais um caractere de espaço.

A CFG G2 tem 18 regras.

Exemplos de strings que pertencem a L(G2):

a boy sees

the boy sees a flower

a girl with a flower likes the boy

Page 31: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 31

Exemplo de Derivação em G2<SENTENCE> <NOUN_PHRASE><VERB_PHRASE> ⇒

⇒ <CP_NOUN><VERB_PHRASE>

⇒ <ARTICLE><NOUN><VERB_PHRASE>

⇒ a <NOUN><VERB_PHRASE>

⇒ a boy <VERB_PHRASE>

⇒ a boy <CP_VERB>

⇒ a boy <VERB>

⇒ a boy sees

Page 32: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 32

Regras Lineares

Seja G = (V , Σ, R, S) uma CFG e A → w R, ∈onde A V .∈

● r é linear se w Σ∈ ∗VΣ∗

● r é linear à direita se w Σ∈ ∗V● r é linear à esquerda se w VΣ∈ ∗

● r é terminal se w Σ∈ ∗

Page 33: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 33

Exemplo de Gramática Linear à Direita

G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε }, A)

Page 34: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 34

Exemplo de Gramática Linear à Direita

G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A)

Exemplo de derivação em G:

A 0A 00A 00B 001B 0011B ⇒ ⇒ ⇒ ⇒ ⇒ ⇒00111B 00111⇒

● Qual é a linguagem especificada por G?

Page 35: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 35

Exemplo de Gramática Linear à Direita

G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε}, A)

Exemplo de derivação em G:

A 0A 00A 00B 001B 0011B ⇒ ⇒ ⇒ ⇒ ⇒ ⇒00111B 00111⇒

● Qual é a linguagem especificada por G?L(G) = 0*1*

Page 36: Aula 3   linguagens e gramaticas

Aspectos Teóricos da Computação 36

Para a Próxima Aula

Ler capítulo 2 do livro texto.