TEORIA DA
COMPUTAÇÃO
Prof. Yandre Maldonado - 1
Parte II
Linguagens Livres de
Contexto
Prof. Yandre Maldonado e Gomes da Costa
TEORIA DA COMPUTAÇÃO
Linguagem Livre de Contexto - LLC
Compreende um universo mais amplo que
as LR, permitindo tratar questões como:
• Parênteses Balanceados;
• Construções Bloco-Estruturadas;
• Outras estruturas próprias de linguagens como C,
Pascal, etc.
Prof. Yandre Maldonado - 2
Os algoritmos que as implementam são
simples e possuem uma boa eficiência.
Aplicações: analisadores sintáticos,
tradutores de linguagens e processadores
de texto etc.
TEORIA DA COMPUTAÇÃO
As LLC´s podem ser especificadas
através de:
Gramática Livre de Contexto – GLC
Prof. Yandre Maldonado - 3
• Formalismo gerador de sentenças da
linguagem que define;
Autômato com Pilha – AP
• Formalismo reconhecedor de sentenças
da linguagem que define;
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 4
GLC é uma quádrupla (V, T, P, S), onde:
V é um conjunto finito de símbolos não-terminais
(ou variáveis);
T é um conjunto finito de símbolos terminais
disjunto de V;
P é um conjunto finito de pares, denominados
regras de produção tal que a primeira
componente é um símbolo de V e a segunda
componente é palavra de (VT)*;
S é um elemento de V, denominado símbolo
inicial (ou símbolo de partida).
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 5
Os símbolos de T são aqueles que
aparecem nos programas de uma
linguagem de programação. É o alfabeto
em cima do qual a linguagem é definida;
Os elementos de V são símbolos auxiliares
que são criados para permitir a definição
das regras da linguagem. Eles
correspondem à “categorias sintáticas” da
linguagem definida:
Português: sentença, predicado, verbo, ...;
Pascal: programa, bloco, procedure, ...;
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 6
Uma regra de produção (V, ) é
representada por V;
As regras de produção definem as
condições de geração das sentenças;
A aplicação de uma regra de produção é
denominada derivação;
Uma regra V indica que V pode ser
substituído por sempre que V aparecer;
Enquanto houver símbolo não-terminal na
cadeia em derivação, esta derivação não
terá terminado;
TEORIA DA COMPUTAÇÃO
O símbolo inicial é o símbolo através do qual
deve iniciar o processo de derivação de uma
sentença;
Observações:
Prof. Yandre Maldonado - 7
VT =
Os elementos de T são os terminais. Procuraremos
representá-los por letras minúsculas (a, b, c, d, ...)
Os elementos de V são os não-terminais.
Procuraremos representá-los por letras maiúsculas
(A, B, C, D, ...)
As cadeias mistas, isto é, aquelas que contém
símbolos de V e símbolos de T (cadeias pertencentes
à (VT)* ) serão representadas por letras gregas (,
, , , ...)
TEORIA DA COMPUTAÇÃO
Exemplo:
G1 = ({S, A, B}, {a, b}, P, S) onde:
Prof. Yandre Maldonado - 8
• P = { 1) S AB
2) A a
3) B b }
Quais as cadeias terminais geradas
por esta gramática?
TEORIA DA COMPUTAÇÃO
Descrição de linguagens:
G1 = ({A, B}, {a, b, c}, P, A) onde:
P = { 1) A aB
2)B bB
3)B c }
Prof. Yandre Maldonado - 9
G2 = ({S, A, B, C}, {a, b, c}, P, S) onde:
P = { 1) S A
2) A BaC
3) B bB
4) B b
5) C cC
6) C c }
A linguagem gerada pela gramática G1 descrita acima,
poderia ser expressa da seguinte forma: L(G1)={abnc,
n 0}
A linguagem gerada pela gramática G2 descrita acima,
poderia ser expressa da seguinte forma: L(G2)={biacj,
i1, j 1}
TEORIA DA COMPUTAÇÃO
G2 (subconjunto da língua portuguesa)
Prof. Yandre Maldonado - 10
• V = {Sentença, Sn, Sv, Artigo, Verbo, Substantivo,
Complemento}
• T = {peixe, isca, mordeu, o, a}
• P = { 1) Sentença Sn Sv
2) Sn Artigo Substantivo
3) Sv Verbo Complemento
4) Complemento Artigo Substantivo
5) Artigo o
6) Artigo a
7) Substantivo peixe
8) Substantivo isca
9) Verbo mordeu
}
• S = Sentença
TEORIA DA COMPUTAÇÃO
G3 - Eliminando os problemas de
concordância de gênero
Prof. Yandre Maldonado - 11
• V = {Sentença, Sn, Sv, ArtigoF, ArtigoM, Verbo,
SubstantivoF, SubstantivoM, Complemento}
• T = {peixe, isca, mordeu, o, a}
• P = { 1) Sentença Sn Sv
2) Sn ArtigoF SubstantivoF
3) Sn ArtigoM SubstantivoM
4) Sv Verbo Complemento
5) Complemento ArtigoF SubstantivoF
6) Complemento ArtigoM SubstantivoM
7) ArtigoF a
8) ArtigoM o
9) SubstantivoF isca
10) SubstantivoM peixe
11) Verbo mordeu
}
• S = Sentença
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 12
BNF - Forma Normal de Backus
Substitui o símbolo “” por “::=”;
Os não-terminais são ladeados por “<” e “>”;
É usada para regras que apresentam um único
símbolo não-terminal do lado esquerdo;
Quando houverem repetições do lado esquerdo, do
tipo:
• <A> ::= 1
* Os símbolos <, >, :, = e | não
• <A> ::= 2
fazem parte da linguagem,
apenas ajudam a descrevê-la.
...
• <A> ::= n
escreve-se: <A> ::= 1 | 2 | ... | n
TEORIA DA COMPUTAÇÃO
G3 - Descrição em BNF
Prof. Yandre Maldonado - 13
1) <Sentença> ::= <Sn> <Sv>
2) <Sn> ::= <ArtigoF> <SubstantivoF>
| <ArtigoM> <SubstantivoM>
4) <Sv> ::= <Verbo> <Complemento>
5) <Complemento> ::= <ArtigoF> <SubstantivoF>
|<ArtigoM> <SubstantivoM>
7) <ArtigoF> ::= o
8) <ArtigoM> ::= a
9) <SubstantivoF> ::= peixe
10) <SubstantivoM> ::= isca
11) <Verbo> ::= mordeu
TEORIA DA COMPUTAÇÃO
BNF é um padrão muito utilizado para
a descrição sintática de linguagens;
Principais aplicações de descrição
sintática de linguagens (BNF):
Prof. Yandre Maldonado - 14
Ajuda a entender como se escreve
programas sintaticamente corretos;
Pode ser usada para determinar se
um programa está sintaticamente
correto (papel do compilador).
TEORIA DA COMPUTAÇÃO
BNF para expressões aritméticas:
Prof. Yandre Maldonado - 15
<expressão> ::= <valor> |
<valor><operador><expressão>
<valor> ::= <número> | <sinal><número>
<número> ::= <semsinal> |
<semsinal>.<semsinal>
<semsinal> ::= <dígito> | <dígito><semsinal>
<dígito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<sinal> ::= + | <operador> ::= + | - | / | *
TEORIA DA COMPUTAÇÃO
Adaptação para o software PROSINTATIC:
Prof. Yandre Maldonado - 16
<expressão> ::= <valor> |
<valor><operador><expressão>
<valor> ::= <número> | <sinal><número>
<número> ::= cn | cn.cn
<sinal> ::= + | <operador> ::= + | - | / | *
TEORIA DA COMPUTAÇÃO
EBNF – Extended BNF
Notação que acrescenta metasímbolos adicionais à
notação BNF;
• [ ] opcionalidade;
• {} repetição;
Prof. Yandre Maldonado - 17
Seguindo esta notação, os Não-Terminais
<expressão>, <valor>, <semsinal> e <número> (do
slide 15) poderiam ter suas regras descritas da
seguinte forma:
• <expressão> ::= <valor> [<operador><expressão>]
• <valor> ::= [<sinal>] <semsinal> [.<semsinal>]
• <semsinal> ::= <dígito> {<dígito>}
Pascal simplificado em EBNF;
TEORIA DA COMPUTAÇÃO
PROSINTATIC
Ambiente computacional para auxílio
ao projeto sintático de linguagens
computacionais;
Baseado no algoritmo de CockeYounger-Kasami;
Introduz algumas facilidades para o
projeto de linguagens, tais como:
Prof. Yandre Maldonado - 18
• Analisador Léxico;
• Classificação de símbolos terminais
(símbolo/palavra reservada).
TEORIA DA COMPUTAÇÃO
Algoritmo de Cocke-Younger-Kasami
Reconhecedor de LLC´s;
Só funciona para GLC´s que estejam
na Forma Normal de Chomsky (FNC);
Uma GLC está na FNC quando todas
as suas regras são da forma:
Prof. Yandre Maldonado - 19
• ABC ou Aa, onde:
• A, B e C são Não-terminais e a é terminal.
TEORIA DA COMPUTAÇÃO
Exemplo de análise com o algoritmo
CYK:
Dada a Gramática:
Prof. Yandre Maldonado - 20
G({S,A,B},{a,b},P,S),
onde P:
S AA
S AS
S b
A SA
A AS
A a
S – Símbolo de partida no
topo: cadeia aceita
S, A
S, A
S, A
S, A
S
S, A
S, A
A
S
S, A
A
S
A
A
S
a
b
a
a
b
TEORIA DA COMPUTAÇÃO
Autômato com Pilha
Prof. Yandre Maldonado - 21
São formalismos (máquinas) capazes de
reconhecer as Linguagens Livres de
Contexto;
Maior poder que os Autômatos Finitos, pois
possuem um “espaço de armazenamento”
extra que é utilizado durante o
processamento de uma cadeia;
Possui uma pilha que caracteriza uma
memória auxiliar onde pode-se inserir e
remover informações;
Mesmo poder de reconhecimento das
GLC’s;
TEORIA DA COMPUTAÇÃO
Exemplo de LLC: {anbn | n0}
Um AF não é capaz de reconhecer
este tipo de linguagem devido à sua
incapacidade de “recordar”
(memorizar) informação sobre a
cadeia analisada;
Autômatos com Pilha (AP) possuem
uma pilha para armazenar
informação, adicionando poder aos
AF’s.
Prof. Yandre Maldonado - 22
TEORIA DA COMPUTAÇÃO
Definição:
AP é uma sextupla <,,S,S0,,B>, onde:
Prof. Yandre Maldonado - 23
• é o alfabeto de entrada do AP;
• é o alfabeto da pilha;
• S é o conjunto finito não vazio de estados do
AP;
• S0 é o estado inicial, S0 S;
• é a função de transição de estados,
: S ({}) conjunto de subconjuntos
finitos de S *
• B é o símbolo da base da pilha, B .
TEORIA DA COMPUTAÇÃO
Ao contrário da fita de entrada, a pilha pode ser lida e
alterada durante um processamento;
O autômato verifica o conteúdo do topo da pilha, retira-o e
substitui por uma cadeia *.
Prof. Yandre Maldonado - 24
Se = A, e A , então o símbolo do topo é substituído por
A e a cabeça de leitura escrita continua posicionada no
mesmo lugar;
Se = A1A2...An, n>1 então o símbolo do topo da pilha é
retirado, sendo An colocado em seu lugar, An-1 na posição
seguinte, e assim por diante. A cabeça é deslocada para a
posição ocupada por A1 que é então o novo topo da pilha;
Se = então o símbolo do topo da pilha é retirado,
fazendo a pilha decrescer.
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 25
A função de transição , é função do estado
corrente, da letra corrente na fita de entrada
e do símbolo no topo da pilha;
Além disso, esta função determina não só o
próximo estado que o AP assume, mas
também como o topo da pilha deve ser
substituído;
O AP inicia sua operação num estado inicial
especial denotado por S0 e com um único
símbolo na pilha, denotado por B.
TEORIA DA COMPUTAÇÃO
A configuração de um AP é dada por
uma tripla <s, x, > onde s é o estado
corrente, x é a cadeia da fita que falta
ser processada e é o conteúdo da
pilha, com o topo no início de ;
O AP anda ou move-se de uma
configuração para outra através da
aplicação de uma função de
transição.
Prof. Yandre Maldonado - 26
TEORIA DA COMPUTAÇÃO
Prof. Yandre Maldonado - 27
Se o AP está na configuração <s,ay,A> e
temos que (s,a,A)=<t,>, então o AP movese para a configuração <t,y, > e denotase <s,ay,A> |— <t,y, >.
Se o AP move-se de uma configuração
<s1,x1,1> para uma configuração
<s2,x2,2> por meio de um número finito de
movimentos, denotamos
<s1,x1,1>|—*<s2,x2,2>
Se o valor de para uma determinada
configuração for o AP pára.
TEORIA DA COMPUTAÇÃO
Note que AP’s não possuem estados
finais como os AF’s;
Assim, um string x é aceito se, ao
chegar ao final da cadeia de entrada,
a pilha estiver vazia,
independentemente do estado em
que o AP se encontra;
Prof. Yandre Maldonado - 28
TEORIA DA COMPUTAÇÃO
Formalmente temos:
Dado o AP P = <,,S,S0,,B> e o
string x sobre , diz-se que x é aceito
por P sse existe s S tal que
<S0,x,B>|—*<s,, >. Caso contrário,
x é rejeitado.
Dado o AP P = <,,S,S0,,B>, a
linguagem L(P) definida por P é
{x *| sS <S0,x,B> |—*<s,, >}
Prof. Yandre Maldonado - 29
TEORIA DA COMPUTAÇÃO
Exemplo de AP para a LLC {anbn |
n0}:
<b,A>/
Prof. Yandre Maldonado - 30
(S,a,B) = {<S,A>}
S
(S,a,A) = {<S,AA>}
(S,b,A) = {<R,>}
(R,b,A) = {<R, >}
<a,B>/A
(S,,B) = {<S, >} <a,A>/AA
<,B>/
R
<b,A>/
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 31
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
B
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 32
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
A
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 33
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
A
A
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 34
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
A
A
A
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 35
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
A
A
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 36
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
A
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaabbb
<b,A>/
S
Prof. Yandre Maldonado - 37
<a,B>/A
<a,A>/AA
<,B>/
R
<b,A>/
CADEIA
ACEITA
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo de AP para {x{a,b}*| |x|a=|x|b}:
Prof. Yandre Maldonado - 38
(S,a,C) = {<S,AC>}
(S,b,C) = {<S,BC>}
(S,,C) = {<S,>}
(S,a,A) = {<S,AA>}
(S,b,A) = {<S,>}
(S,a,B) = {<S,>}
(S,b,B) = {<S,BB>}
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 39
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
C
BASE DA PILHA: C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 40
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 41
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 42
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 43
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 44
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 45
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 46
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 47
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 48
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
A
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 49
S
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
C
PILHA
TEORIA DA COMPUTAÇÃO
Exemplo: processamento da cadeia aaaabbabbb
Prof. Yandre Maldonado - 50
S
CADEIA
ACEITA
<a,C>/AC
<b,C>/BC
<,C>/
<a,A>/AA
<b,A>/
<a,B>/
<b,B>/BB
PILHA
TEORIA DA COMPUTAÇÃO
Atividade Prática Nº 1
Prof. Yandre Maldonado - 51
Complemente a descrição em BNF da
linguagem LIAD, que será entregue
durante a aula.
Atividade Prática Nº 2
Resolva a lista de exercícios de
Autômato com Pilha.