Você está na página 1de 44

Introdução à Teoria da Computação

SIN131
Linguagens e Gramáticas

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Linguagens e Gramáticas
• Alfabeto
• Palavra
• Linguagem Formal
• Gramática

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Linguagens
• Linguagem (Dicionário Aurélio)
“O uso da palavra articulada ou escrita como meio de
expressão e comunicação entre pessoas.”

– Não é sufcientemente precisa para o desenvolvimento


matemático de uma teoria baseada em linguagens.

• Linguagem:
– Conceito fundamental em Computação e Informática

• Para defnir linguagem:


– Alfabeto
– Palavra ou cadeia de caracteres

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Alfabeto
• Alfabeto:
– Conjunto finito de símbolos ou caracteres.

• Símbolo ou Caractere:
– Entidade abstrata básica, não definida formalmente.
– Base para defnições
– Exemplos: letras e dígitos.

• Portanto:
– Conjunto infnito não é alfabeto
– ∅ é um alfabeto

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Símbolo
• Embora os símbolos também possam ser
chamados de caracteres ou letras:

– Eles não precisam ter necessariamente um único


caractere.

– Além disso, os símbolos de um alfabeto não


precisam todos ter o mesmo número de caracteres.

– A única restrição é que o tamanho do símbolo seja


fnito.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exemplo de alfabetos
• São alfabetos
– { a, b, c }
– ∅ (conjunto vazio)

• Não são alfabetos


– N (conjunto dos números naturais)
– { a, b, aa, ab, ba, bb, aaa,… }

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exemplo de alfabetos
• Linguagem Natural:
– Uma palavra em português equivale à um símbolo;
– Uma sentença da língua portuguesa é uma cadeia composta por vários
símbolos;

• Alfabeto de uma linguagem de programação como Pascal, C ou Java.


– O conjunto de todos os símbolos válidos no programa.
– Cada programa escrito numa linguagem computacional corresponde a uma
cadeia de símbolos que podem ser:
• Identifcadores: nomes de variáveis, funções, ...
• Palavras reservadas;

• Alfabeto binário { a, b } ou { 0, 1 }
– Domínio de valores de um bit
– Analogia com a representação interna dos computadores reais
– Poucos símbolos: simplifca as diversas abordagens desenvolvidas.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Palavra
• Palavra, Cadeia de Caracteres ou Sentença sobre
um alfabeto:
– Sequência finita de símbolos justapostos.

• Cadeia sem símbolos:


– ε - cadeia vazia ou palavra vazia

• Prefixo, Sufixo e Subpalavra


– Prefixo:
• qualquer sequência inicial de símbolos da palavra
– Sufixo:
• qualquer sequência fnal de símbolos da palavra
– Subpalavra:
• qualquer sequência de símbolos contíguos da palavra
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Palavra
• abcb palavra sobre o alfabeto
{a, b, c}
– ε, a, ab, abc, abcb são todos os
prefxos
– ε, b, cb, bcb, abcb são todos os sufxos
– Qualquer prefixo ou sufixo é uma
subpalavra

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Ex.: Linguagem de Programação
• Em uma linguagem de programação como Pascal, C ou Java.
– Uma palavra (cadeia) é um programa.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Concatenação de Palavras
• Concatenação de Palavras (Concatenação)
– Operação binária sobre um conjunto de palavras
– Associa a cada par de palavras
• Palavra formada pela justaposição da primeira com a segunda

• Notação
– justaposição dos símbolos que representam as palavras
componentes

• Propriedades
– Elemento Neutro: ε w = w = w ε
– Associativa: v(w t) = (v w)t
• Parênteses podem ser omitidos: v w t

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Concatenação de Palavras
• Σ = { a, b } um alfabeto.
• Para v = baaaa e w = bb

– v w = baaaabb
– v ε = v = baaaa

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Concatenação de Palavras
• Concatenação Sucessiva de uma
Palavra
– Ou simplesmente Concatenação Sucessiva
– Concatenação Sucessiva de uma Palavra com ela
mesma.
– wn - n é o número de concatenações sucessivas

• Indutivamente a partir da operação de


concatenação
– w0 = ε
– wn = w wn-1, para n > 0
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Concatenação de Palavras
• w palavra e a símbolo
– w3 = www
– w1 = w
– a5 = aaaaa
– an = aaa…a
• O símbolo a repetido n vezes.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exponenciação de Alfabetos
• Exponenciação de Alfabetos: Σk
– Conjunto de todas as cadeias com
tamanho k, formadas sobre o alfabeto Σ.

• EXEMPLO: considere Σ = {0, 1}


– Σ0 = {ε}
– Σ1 = {0, 1} = Σ
– Σ2 = {00, 01, 10, 11}

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Definições de alfabetos
• Se Σ é um alfabeto
– Σ* conjunto de todas as palavras possíveis sobre Σ
• Ou Fechamento de um Alfabeto
• Fecho transitivo e refexivo
Σ* = Σ0 ∪ Σ1 ∪ Σ2 ∪ ... ∪ Σn ∪...
– Σ+ = Σ* - { ε }
• Ou Fechamento positivo de um Alfabeto
• Fecho transitivo

• Σ* é indutivamente defnido
– Base de Indução
• ε ∈ Σ*
• Para qualquer x ∈ Σ, vale x ∈ Σ*
– Passo de Indução
• Se u e v são palavras de Σ*,
• então a concatenação u v é uma palavra de Σ*

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Palavras sobre alfabetos
• Uma palavra sobre o alfabeto Σ é:
– Qualquer elemento w de Σ*
• w ∈ Σ*

• 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,… }
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Comprimento de uma palavra
• O comprimento de uma palavra w:
– representado por |w|
– número de símbolos que compõem a palavra
– função com domínio em Σ* e codomínio em N

• EXEMPLO: Comprimento de uma palavra


– |abcb| = 4
– |ε| = 0

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Linguagem Formal
• Linguagem Formal
– Dado o alfabeto Σ, o conjunto de palavras L
é uma linguagem sobre Σ, se e somente se
L ⊆ Σ*
• L é um subconjunto do conjunto de todas as
palavras sobre Σ (Σ*).

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Operações sobre linguagens
• Considere L1 e L2 linguagens defnidas sobre
Σ:
– União:
• L1 ∪ L2 = {x | x ∈ L1 OU x ∈ L2}
– Intersecção:
• L1 ∩ L2 = {x | x ∈ L1 E x ∈ L2}
– Diferença:
• L1 - L2 = {x | x ∈ L1 E x ∉ L2}
– Concatenação:
• L1 L2 = {x | x = yz, y ∈ L1 E z ∈ L2}
– Complemento:
• L1’={x | x ∈ Σ* E x ∉ L1}

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Operações sobre linguagens
• Sejam L1 e L2 defnidas sobre {0,1}:
– L1 = {0,11}
– L2 = {0, 1, 00}

• L1 ∪ L2 = {0, 1, 00, 11}

• L1 ∩ L2 = {0}

• L1 - L2 = {11}

• L1 L2 = {00, 01, 000, 110, 111, 1100}


SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Linguagem Formal
• ∅ e { ε } são linguagens sobre qualquer
alfabeto
– ∅≠{ε}

• Σ* e Σ+ são linguagens sobre um Σ


qualquer
– Σ* ≠ Σ+

• Conjunto de palíndromos sobre Σ = { a, b }


– ε, a, b, aa, bb, aaa, aba, bab, bbb, aaaa,…

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Conjuntos de todas as linguagens
• É o conjunto das partes de Σ*
2Σ*
– Ou seja, é o conjunto de todos os
subconjuntos de Σ*

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Símbolos, alfabeto, palavras, linguagem

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Símbolos, alfabeto, palavras, linguagem

• A linguagem apresentada é, naturalmente, apenas


uma das inúmeras que podem ser criadas a partir
desse alfabeto.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática
• Linguagem de programação
– Defnida pelo conjunto de todos os programas
(palavras).

• Linguagem de propósitos gerais como Pascal


– Conjunto de todos os programas é infinito!
– Uma defnição inadequada para implementação em
computador.

• Formalismo Gramática
– Uma maneira de especificar de forma finita
linguagens (eventualmente) infnitas

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática
• Gramática é, basicamente
– Conjunto fnito de regras
– Quando aplicadas sucessivamente, geram
palavras.
– Conjunto de todas as palavras geradas por
uma gramática define a linguagem.

• Gramáticas para linguagens naturais como


Português
– as mesmas que as usadas para linguagens
artifciais como Pascal, C ou Java.
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Convenções
– A, B, C,…, S, T para símbolos variáveis
– a, b, c,…, s, t para símbolos terminais
– u, v, w, x, y, z para palavras de
símbolos terminais
– α, β,… para palavras de símbolos
variáveis ou terminais

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática
• Gramática, Gramática Irrestrita ou Gramática de Chomsky
G = (V, T, P, S)

• V: conjunto fnito de símbolos variáveis ou não terminais


• T: conjunto fnito de símbolos terminais disjunto de V
• P: Produções. Relação fnita: (V ∪ T)+ → (V ∪ T)*
– Par da relação: regra de produção ou produção
• S: elemento distinguido de V: símbolo inicial ou variável
inicial

• Representação de uma regra de produção (α, β)


–α→β
• Representação abreviada para α → β1, α → β2, ..., α → βn
– α → β1 | β2 | … | βn

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática
• Derivação:
– É a aplicação de uma regra de
produção.
– Aplicação sucessiva de regras de
produção
• Permite derivar palavras da linguagem.
• Fecho transitivo da relação de derivação

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Derivação
Considere a gramática G = (V, T, P, S)
• Derivação é um par da Relação de Derivação
denotada por ⇒
– Domínio em (V ∪ T)+ e codomínio em (V ∪ T)*
– <α, β> é representado de forma infxada
α⇒β
• ⇒ É indutivamente defnida como segue:
– Para toda produção da forma S → β (S é o símbolo inicial de G)
S⇒β
• Para todo par η ⇒ ρ α σ da relação de derivação
– se α → β é regra de P, então
η⇒ρβσ

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Derivação
• Derivação
– Substituição de uma subpalavra de acordo com
uma regra de produção

• Sucessivos passos de derivação


– ⇒* Fecho transitivo e refexivo da relação ⇒
• Zero ou mais passos de derivações sucessivos
– ⇒+ Fecho transitivo da relação ⇒
• Um ou mais passos de derivações sucessivos
– ⇒i
• Exatos i passos de derivações sucessivos (i natural)

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Linguagem gerada
G = (V, T, P, S) gramática
• Linguagem Gerada por G:
L(G) ou GERA(G)

• Palavras de símbolos terminais deriváveis a


partir de S
L(G) = { w ∈ T* | S ⇒+ w }
A linguagem gerada pela gramática G é formada por toda palavra
(w) pertencente ao conjunto de todas as palavras possíveis sobre o
alfabeto T (ou fechamento do alfabeto) tal que w tenha sido gerada
por pelo menos 1 passo de sucessivas derivações da variável inicial
S.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Exemplo
• Gramática G = (V, T, P, N)
– V = { N, D }
– T = { 0, 1, 2,…, 9 }
– P = { N → D, N → DN, D → 0 | 1 | … | 9 }

• Gera, sintaticamente, o conjunto dos


números naturais
– Se distinguem os zeros à esquerda.
– Exemplo: 123 diferente de 0123.
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Gramática: Exemplo
• G = (V, T, P, N)
– V = { N, D }
– T = { 0, 1, 2,…, 9 }
– P = { N → D, N → DN, D → 0 | 1 | … | 9 }

• Uma derivação do número 243


–N⇒ N → DN
– DN ⇒ D→2
– 2N ⇒ N → DN
– 2DN ⇒ D→4
– 24N ⇒ N→D
– 24D ⇒ D→3
– 243

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Exemplo
• Interpretação indutiva da gramática
– Base de Indução:
• Todo dígito é natural
– Passo de Indução:
• Se n é natural, então a concatenação com
qualquer dígito também é natural

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramática: Exemplo 2
• G = ({ S, X, Y, A, B, F }, { a, b }, P, S)

• Na qual:
– P = { S → XY,
– X → XaA | XbB | F
– Aa → aA, Ab → bA, AY → Ya,
– Ba → aB, Bb → bB, BY → Yb,
– Fa → aF, Fb → bF, FY → ε }

• Gera a linguagem
– { ww | w é palavra de { a, b }* }
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Gramática: Exemplo 2
• Derivação de baba: G = ({ S, X, Y, A, B, F }, { a, b }, P,
S)

– S ⇒ S → XY P = { S → XY,
– XY ⇒ X → XaA X → XaA | XbB | F,
– XaAY ⇒ AY → Ya Aa → aA,
– XaYa ⇒ X → XbB Ab → bA,
AY → Ya,
– XbBaYa ⇒ Ba → aB
Ba → aB,
– XbaBYa ⇒ BY → Yb Bb → bB,
– XbaYba ⇒ X→F BY → Yb,
– FbaYba ⇒ Fb → bF Fa → aF,
– bFaYba ⇒ Fa → aF Fb → bF,
FY → ε }
– baFYba ⇒ FY → ε
– baba

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Gramáticas Equivalentes
• G1 e G2 são Gramáticas
Equivalentes se e somente se
GERA(G1) = GERA(G2)

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exercícios
• 1) O que é um símbolo? • 6) Defna os conceitos de
prefxo, sufxo e subpalavra. Qual
a relação entre eles?
• 2) O que é alfabeto?
• 7) Dados L1={a, ab} e L2={ε,
• 3) Defna o conceito de a, ba}, linguagens sobre {a, b},
cadeia ou palavra. determine:
– a. L1 ∪ L2
– b. L1 ∩ L2
• 4) Defna o conceito de – c. L1 – L2
linguagem. Mostre um – d. L2 – L1
exemplo. – e. L1.L2
– f. L2.L1
– g. L1^2
• 5) O que é fechamento de – h. L2^2
um alfabeto? – i. L1’

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exercícios
• 8) Sejam X={a, b} e Y={0, 1} alfabetos. Represente as 5 palavras mais
curtas das seguintes linguagens:
– (a) X*,
– (b) Y+,
– (c) (X∪Y)*

• 9) Dada a palavra abaab, represente:


– (a) seus prefxos,
– (b) seus sufxos,
– (c) suas subpalavras.

• 10) Represente por extensão a linguagem L={w | w ∈ {a, b}* e |w| ≤ 2} .

• 11) Sejam v=aa, w=b e t=ab palavras sobre o alfabeto Σ={a, b}.
Representar os resultados das seguintes expressões:
– (a) v(wt),
– (b) (vw)t,
– (c) vw3t2
– (d) (vw)2ε6t0
• Qual o tamanho da palavra resultante em cada caso?
SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad
Exercícios
• 12) Dada a gramática G. Defna qual linguagem L(G) ela gera. Derive 3
palavras pertencentes a linguagem.

– G = (V, T, P, S)
• V = {S, A}
• T = {0, 1}
• P = { S ⟶ 0A
• A ⟶ 1S | 1 }

• 13) A gramática G gera a linguagem L(G). Mostre a derivação, quando


possível, das palavras:

– L(G) = {anbnci | n >= 1 e i >= 0} A) aabbc


– G = (V, T, P,S) B) aabb
• V = {S,T} C) aaabbbc
• T = {a,b,c} D) aaabbc
• P = {S ⟶ Sc | T
E) bbaac
• T ⟶ aTb | ab}

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Exercícios
• 14) Dada a linguagem L(G), defna uma gramática G que gere
essa linguagem.
– L(G) = {ab, ba}

• 15) Dada a linguagem L(G), defna uma gramática G que gere


essa linguagem.
– L(G) = Expressões envolvendo elementos 0..9, somas,
subtrações, produtos, divisões e subexpressões entre
parênteses.

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad


Introdução à Teoria da Computação

SIN131
Linguagens e Gramáticas

SIN 131 – Introdução à Teoria da Computação Prof. Matheus Haddad

Você também pode gostar