1. Curso: Ciência da Computação
Turma: 4º/5º Série
Aspectos Teóricos da Computação
Aula 3
Linguagens e Gramáticas
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. da Computação
Aspectos Teóricos 2
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 3
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 4
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 5
6. Prefixo, Sufixo e Subpalavra
Um 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 6
7. Palavra: Linguagem de Programação
Em uma linguagem de programação como
Pascal, uma palavra é um programa.
Aspectos Teóricos da Computação 7
8. Concatenação
A 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 8
9. Concatenação Sucessiva
A 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 9
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 10
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 11
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 12
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 13
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 14
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 15
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 16
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 17
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 18
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 19
20. Exemplo de Derivação de String
Seja 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 20
21. Gramática
Uma 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 21
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 22
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 23
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 = u 0 ⇒ u1 ⇒ . . . ⇒ 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 24
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 25
27. Tipos de Gramática – Hierarquia de
Chomsky
Aspectos Teóricos da Computação 27
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 28
29. Gramática Livre de Contexto G2
A 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 29
30. Gramática Livre de Contexto G2
Note 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 30
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 31
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 32
33. Exemplo de Gramática Linear à Direita
G = ({A, B}, {0, 1}, {A → 0A | B, B → 1B | ε }, A)
Aspectos Teóricos da Computação 33
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 34
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 35
36. Para a Próxima Aula
Ler capítulo 2 do livro texto.
Aspectos Teóricos da Computação 36