Escolar Documentos
Profissional Documentos
Cultura Documentos
e definições
Fundamentos Teóricos da Computação
Roberto Gomes Ribeiro
1/50
O problema fundamental relativo ao uso dos computadores e a
necessidade de representar coisas.
2/50
A representação de uma entidade nas formas de um programa, de
entrada para um programa ou de saída de um programa é, muitas
vezes, constituída por uma:
sequências de símbolos
3/50
A matemática entre a entidade e a
representação
4/50
A matemática entre a entidade e a
representação
Entidade Modelo Matemático Representação
Número inteiro no Um dos carácteres
Mês
intervalo [1, 12] [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, A, B]
Número real Número com duas casas
Remuneração
positivo decimais
Tabela em que cada linha
FP Relação
tem o nome, cargo, salário
Cálculo de FP Algoritmo Programa
Rep. por sequência de símbolos =⇒ Linguagens formais
5/50
Linguagem formal vs Linguagem natural
Por outro lado, a estrutura de uma linguagem formal é mais simples. A sua
gramática possui normas reduzidas, o significado dos seus termos é fixo e a
ambiguidade é nula. Contudo, o poder expressivo é menor.
Exemplo:
6/50
Exemplo de linguagem formal: linguagem de
programação
7/50
Linguagens Formais
8/50
DEFINIÇÕES
9/50
Toda linguagem tem um alfabeto associado
• {0, 1}
• {R, P, S} (Pedra, Papel e Tesoura)
• {1}
• {C, D, E, F, G, A, B}
• {0, 1, 2, · · · , 9,+, −}
10/50
Palavra
11/50
Comprimento de uma Palavra
12/50
Notação
Abreviação: seja a um símbolo qualquer de um alfabeto e n ∈ Z, an
representa uma sequência de n símbolos a s.
• 10 = λ
• 04 = 0000
• 13 012 = 111011
13/50
O conjunto de todas as palavras
Exemplos:
Σ = {0, 1}
14/50
Linguagem
Uma linguagem do alfabeto Σ é um subconjunto de Σ∗ .
16/50
Concatenação de palavras
A concatenação de x = a1 a2 · · · am e y = b1 b2 n é
xy = x = a1 a2 · · · am y = b1 b2 n
Exemplos:
• se x = 001 e y = 10, então xy = 00110
• λw = wλ = w
• x(yz) = (xy)z. Assim, pode-se escrever sem parênteses: xyz
• wwwww = w5
• w0 = λ
17/50
Definição de prefixos, sufixos e subpalavras de
uma palavra
18/50
Outras definições
O reverso de w = a1 a2 · · · an é w R = an an−1 · · · a1 .
19/50
Concatenação de linguagens
A concatenação de L1 e L2 é L1 L2 = {xy | x ∈ L1 e y ∈ L2 }. Em
particular, ∅L = L∅ = ∅ e {λL} = L{λ} = L, para qualquer linguagem
L.
Exemplos:
Sejam L1 = {w ∈ {0, 1}∗ | |w|=5} e L2 = {0y | y ∈ {0, 1}∗
• L1 L1 = { ∈ {0, 1}∗ | |w|=10};
• L1 L2 = { ∈ {0, 1}∗ | o sexto símbolo de w é 0};
• L2 L1 = { ∈ {0, 1}∗ | w começa com 0 e |w| ≥ 6};
• L2 L2 = {0y | y ∈ {0, 1}∗ e y contém no mínimo um 0.
20/50
Fecho de Kleene
L∗ = Ln = L0 ∪ L1 ∪ L2 ∪ · · · = {λ} ∪ L ∪ LL ∪ · · ·
S
n ∈N
21/50
Fecho positivo de Kleene
O O Fecho positivo de Kleene sobre uma linguagem L, denotado
como L+ é definido como:
• L+ = LL∗
L+ = Ln = L1 ∪ L2 ∪ · · · = {λ} ∪ L ∪ LL ∪ · · · .
S
n ≥1
Sendo, então:
L ∗ = L+ ∪ λ
22/50
Fecho de Kleene: Exemplos
• ∅∗ = {λ}
• ∅+ = ∅
• {λ}∗ = {λ}+ = {λ}
• {0}∗ = {0n | n ∈ N}
• {0}+ = {0n | n ≥ 1}
• {00}∗ = {02n | n ∈ N}
• {00}+ = {02n | n ≥ 1}
• {λ, 00, 11}∗ = {λ, 00, 11}+ = {λ} ∪ {00, 11}+
23/50
Conjunto de linguagens de um alfabeto
24/50
Conjunto de linguagens de um alfabeto
25/50
GRAMÁTICA
26/50
Gramáticas: Formalismo recursivo para
definição de Linguagens
Gramática: formalismo que permite o uso de recursão,
especialmente projetado para a definição de linguagens.
0ABB0AB ⇒ 10AB0AB
⇒ 110A0AB
⇒ 110A10A
28/50
Definição informal de gramática
29/50
Um exemplo de gramática
G é uma gramática constituída de:
• variáveis: P (variável de partida) e X
• terminais: 0 e 1
• regras:
1. 1. P → 0P
2. 2. P → 1X
3. 3. X → 1X
4. 4. X → λ
Exemplo de derivação:
• P ⇒ 0P (regra 1)
• ⇒ 01X (regra 2)
• ⇒ 01 (regra 4)
30/50
A linguagem gerada por G
A linguagem gerada por G com as seguintes regras:
1. P → 0P
2. P → 1X
3. X → 1X
4. X → λ
Uma derivação de sentença em G envolve:
• Aplicar n ≥ 0 vezes a regra 1, gerando 0n P
• Aplicar uma vez a regra 2, gerando 0n 1X
• Aplicar k ≥ 0 vezes a regra 3, gerando 0n 1k X
• Aplicar uma vez a regra 4, gerando 0n 1k
31/50
A linguagem gerada por G
A linguagem gerada por G com as seguintes regras:
1. P → 0P
2. P → 1X
3. X → 1X
4. X → λ
Uma derivação de sentença em G envolve:
• Aplicar n ≥ 0 vezes a regra 1, gerando 0n P
• Aplicar uma vez a regra 2, gerando 0n 1X
• Aplicar k ≥ 0 vezes a regra 3, gerando 0n 1k X
• Aplicar uma vez a regra 4, gerando 0n 1k
L(G) = {0}∗ {1}+
32/50
Definição formal de gramática
33/50
Um outro exemplo de gramática
34/50
Múltiplas regras com o mesmo lado esquerdo
O conjunto
1. P → 0P
2. P → 1X
3. X → 1X
4. X → λ
pode ser reescrito como
1. 1, 2.P → 0P|1X
2. 3, 4.X → 1X|λ
35/50
Derivação em n passos
36/50
Derivação em vários passos
37/50
A linguagem gerada por uma gramática
Definição
• Seja G = (V, Σ, R, P). L(G) = {w ∈ Σ∗ |P∗ ⇒ w}
38/50
Exemplo de esquema de derivação
39/50
Exemplo de esquema de derivação (cont.)
40/50
Exemplo de esquema de derivação (cont.)
41/50
Outro exemplo de esquema de derivação
H:
• 1, 2. P → aPBc|abc
• 3. cB → Bc
• 4. bB → bb
42/50
Outro exemplo de esquema de derivação
Esquema de derivação para an bn cn , n ≥ 1:
Pk ⇒ ak P(Bc)k (regra 1 k vezes, k ≥ 0)
⇒ ak+1 bc(Bc)k (regra 2)
⇒ ak+1 bBcc(Bc)k−1 (regra 3 uma vez)
⇒ ak+1 bBBccc(Bc)k−2 (regra 3 duas vezes)
..
.
⇒ ak+1 bBk cck (regra 3 k vezes)
⇒ ak+1 bk+1 ck+1 (regra 4 k vezes)
43/50
Outro exemplo de esquema de derivação
Esquema de derivação para an bn cn , n ≥ 1:
Pk ⇒ ak P(Bc)k (regra 1 k vezes, k ≥ 0)
⇒ ak+1 bc(Bc)k (regra 2)
⇒ ak+1 bBcc(Bc)k−1 (regra 3 uma vez)
⇒ ak+1 bBBccc(Bc)k−2 (regra 3 duas vezes)
..
.
⇒ ak+1 bBk cck (regra 3 k vezes)
⇒ ak+1 bk+1 ck+1 (regra 4 k vezes)
44/50 Logo, {an bn cn |n ≥ 1} ⊆ L(H).
Equivalência de gramáticas
45/50
Um exemplo de gramática mais “prático”
G = (V, Σ, R, E), em que:
• V = {E, T, N, D}
• Σ = {+, −, (, ), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
R contém as regras:
• E → E + T|E − T|T
• T → (E)|N
• N → DN|D
• D → 0|1|2|3|4|5|6|7|8|9
46/50
Recursão à esquerda: um ou mais Ts
E⇒E+T (regra E → E + T)
⇒E−T+T (regra E → E − T)
⇒E−T−T+T (regra E → E − T)
⇒T−T−T+T (regra E → T)
⇒ recursão à esquerda
47/50
Recursão à direita: um ou mais Ds
N ⇒ DN (regra N → DN)
⇒ DDN (regra N → DN)
⇒ DDDN (regra N → DN)
⇒ DDDD (regra N → D)
⇒ recursão à direita
48/50
Recursão indireta
A quarta regra diz que uma expressão entre “(” e “)” é um termo de
uma expressão:
E⇒E+T (regra E → E + T)
⇒T+T (regra E → T)
⇒ (E) + T (regra T → (E))
⇒ E aparece, recursivamente, entre “(” e “)”
49/50
Exercícios
50/50