aula 3 linguagens e gramaticas
TRANSCRIPT
Curso: Ciência da Computação Turma: 4º/5º Série
Aspectos Teóricos da Computação
Aula 3
Linguagens e Gramáticas
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.
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
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.
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.
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;
Aspectos Teóricos da Computação 7
Palavra: Linguagem de Programação
Em uma linguagem de programação como Pascal, uma palavra é um programa.
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?
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)
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 ∑*
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,...}
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
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 ⊆ ∑*
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:
∑* ≠ ∑+
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?
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, ...
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.
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.
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.
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.
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.
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 → ε
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
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
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 }
Aspectos Teóricos da Computação 26
Tipos de Regras
Aspectos Teóricos da Computação 27
Tipos de Gramática – Hierarquia de Chomsky
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.
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
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
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
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 Σ∈ ∗
Aspectos Teóricos da Computação 33
Exemplo de Gramática Linear à Direita
G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε }, A)
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?
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*
Aspectos Teóricos da Computação 36
Para a Próxima Aula
Ler capítulo 2 do livro texto.