Escolar Documentos
Profissional Documentos
Cultura Documentos
Centro Tecnolgico
Departamento de Informtica e de Estatstica
Captulo I Introduo
Esta lista poderia ser expandida e detalhada, contudo, seu objetivo enfatizar a
abrangncia da teoria da computao. Dos tpicos aqui listados, complexidade (5), semntica
(6) e correo/construo (7), costumam ser tratados como disciplinas especficas e
independentes, enquanto que os demais se classificam como problemas bsicos da teoria da
computao. Todos os problemas computacionais podem ser tratados (estudados) sob a tica
da Teoria das Linguagens Formais e Autmatos.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 1
Segundo esta tica, a teoria da computao pode ser vista como um conjunto de
modelos formais (juntamente com suas propriedades) que fundamentam a cincia da
computao. Tais modelos incluem Autmatos (Finitos, de Pilha e Mquinas de Turing) e
Gramticas, enquanto que as propriedades de interesse envolvem questes de decidibilidade,
Inter-relacionamento entre modelos (abrangncia, equivalncia, etc...) e complexidade
computacional.
Nesta apostila, abordaremos a Teoria da Computao segundo a tica da Teoria das
Linguagens Formais e Autmatos.
Procedures e Algortmos
Algoritmo: uma procedure que sempre pra; ou seja, uma procedure cuja execuo chegar
ao final, independentemente de quais sejam suas entradas. Adicionalmente, dizemos que uma
procedure termina para uma determinada entrada, se existe um nmero finito t, tal que aps a
execuo de t instrues (no necessariamente distintas), ou no existem mais instrues a
serem executadas, ou a ltima instruo executada foi uma instruo halt.
Exemplos:
1 Dado um nmero inteiro positivo I, determinar se I ou no um nmero primo.
2 Dado um inteiro I, determinar se existe um nmero perfeito maior que I (obs: um nmero
perfeito se a soma de seus divisores (exceto ele mesmo) igual ao prprio nmero).
3 Dado um programa escrito em uma determinada linguagem de programao, determinar
se esse programa est sintaticamente correto. Este problema uma instncia do seguinte
problema genrico: dada uma cadeia de caracteres x determinar se essa cadeia gerada por
uma Gramtica Livre de Contexto (ou reconhecida por um Autmato de Pilha).
4 Dado um programa qualquer, determinar se existe alguma entrada para a qual o programa
entrar em loop.
Os problemas enunciados nos exemplos 1 e 3 possuem representao algortmica
enquanto que os problemas dos exemplos 2 e 4 s so representveis via procedures.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 2
Conjuntos Recursivos e Conjuntos Recursivamente Enumerveis
Um conjunto dito Recursivamente Enumervel se ele pode ser representado
(solucionado) por uma procedure, e Recursivo se ele pode ser representado (solucionado) por
um algoritmo. Como procedures e algoritmos podem ser definidos formalmente atravs de
vrios modelos (gramticas e autmatos, por exemplo), podemos tambm definir conjuntos
recursivos e recursivamente enumerveis em funo de tais modelos.
Problemas Decidveis e Indecidveis X Algoritmos e Procedures
Um problema decidvel (tratvel ou no) se e somente se ele resolvvel por um
algoritmo, para qualquer entrada pertencente ao seu domnio; caso contrrio ele um
problema indecidvel.
A partir das definies acima, podemos notar claramente a relao entre problemas
decidveis e indecidveis com conjuntos recursivos e recursivamente enumerveis; ou seja, um
problema decidvel se o conjunto de solues das diversas instncias deste problema um
conjunto recursivo, e indecidvel caso tal conjunto seja recursivamente enumervel. Assim
sendo, torna-se evidente que a questo da decidibilidade pode ser tratada formalmente atravs
dos modelos que compem a Teoria das Linguagens e Autmatos.
A classe dos problemas indecidveis significativamente representada pelo HALTING
PROBLEM (problema da parada) que consiste em: Dado uma procedure Z e uma entrada
X, decidir (determinar) se Z termina quando aplicado a X. A indecidibilidade deste problema
extremamente til para demonstrar a indecidibilidade de outros problemas atravs da
reduo destes para o halting problem .
Um ponto importante a ressaltar aqui, que toda procedure (ou algoritmo) descrita por
algum destes formalismos, pode tambm ser descrita atravs de qualquer um dos demais; fato
este que sugere a equivalncia entre os formalismos.
A aceitao destes formalismos dentro da teoria da computao , em grande parte,
decorrente da hiptese (conhecida como Tese de Church) de que todo processo computvel
passvel de ser descrito por uma procedure pode ser realizado por uma Mquina de Turing.
Esta tese, apesar de no ter sido provada formalmente, tambm no foi contradita e continua
sendo universalmente aceita. Conseqentemente podemos afirmar que Mquinas de Turing
constituem o formalismo mais genrico para a representao de procedure e que qualquer
outro formalismo ser significativo se for considerado equivalente s mquinas de Turing. A
demonstrao formal da equivalncia entre os diversos formalismos citados e mquinas de
Turing, refora a tese de Church.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 3
I.3 Introduo a Teoria das Linguagens Formais
Sentenas: Uma sentena sobre um alfabeto V, uma seqncia (ou cadeia) finita de
smbolos do alfabeto.
Exemplo de sentenas sobre V = { a , b }: a, b, aa, ab, bb, aaa, aab, aba, baa, ...
Exemplos: Seja V = { a , b , c }
se x = aba, ento |x| = 3
se x = c, ento |x| = 1
Sentena vazia: uma sentena constituda de nenhum smbolo; isto , uma sentena
de tamanho 0 (zero).
Observaes: - Representaremos a sentena vazia por (psolon).
- Por definio, || = 0
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 4
Fechamento de um Alfabeto
Seja V um alfabeto .
- O fechamento reflexivo (ou simplesmente fechamento) de V, representado por V*,
dado pelo conjunto de todas as possveis seqncias que podem ser formadas a partir
de V, inclusive a sentena vazia.
- O fechamento transitivo (ou fechamento positivo) de V, representado por V+, dado
por V* - { }.
Exemplos: Seja V = { 0, 1 }, temos que:
V* = {, 0, 1, 00, 01, 11, 000,...}
V+ = {0, 1, 00 ,01, 11, 000,...}
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 5
Teoria das Linguagens Formais e dos Autmatos
Entende-se por Teoria das Linguagens Formais e dos Autmatos o estudo de modelos
matemticos que possibilitam a especificao e o reconhecimento de linguagens (no sentido
amplo da palavra), suas classificaes, estruturas, propriedades, caractersticas e inter-
relacionamentos.
A importncia desta Teoria na Cincia da Computao dupla: Ela tanto apia outros
aspectos tericos da Cincia da Computao (decidibilidade, computabilidade, complexidade
computacional, por exemplo), como fundamenta diversas aplicaes computacionais tais
como processamento de linguagens, reconhecimento de padres, modelagem de sistemas.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 6
CAPTULO II GRAMTICAS
II.1 Motivao
II.2 Definio Formal
II.3 Derivao e Reduo
II.4 Sentenas, Forma Sentencial e Linguagem
II.5 Tipos de Gramticas (Hierarquia de Chomsky)
II.6 Sentena Vazia
II.7 Recursividade das G.S.C.
II.1 Motivao
Sabemos que uma linguagem qualquer conjunto ou subconjunto de sentenas sobre
um alfabeto, ou seja: dado um alfabeto V, uma linguagem L sobre esse alfabeto, um
subconjunto de V* L V*.
Assim sendo, devemos nos preocupar em definir que subconjunto esse.
A finalidade de uma gramtica definir o subconjunto de V* que forma (define) uma
determinada linguagem. Uma gramtica define uma estrutura sobre um alfabeto de forma a
permitir que apenas determinadas combinaes sejam vlidas, isto , sejam consideradas
sentenas (definindo assim a linguagem que ela representa).
O que Gramtica?
Uma gramtica, de maneira informal, pode ser definida como sendo:
a) Um sistema gerador de linguagens;
b) Um sistema de reescrita;
c) Uma maneira finita de descrever (representar) uma linguagem;
d) Um dispositivo formal usado para especificar de maneira finita e precisa uma
linguagem potencialmente infinita.
Exemplo intuitivo de uma Gramtica:
(um subconjunto da gramtica da lngua portuguesa)
<sentena> :: = <sujeito> <predicado>
<sujeito> :: = <substantivo>
| <artigo> <substantivo>
| <artigo> <adjetivo> <substantivo>
<predicado> :: = <verbo> <objeto>
<substantivo> :: = joo | Maria | cachorro | livro | po
<artigo> :: = o | a
<adjetivo> :: = pequeno | bom | bela
<verbo> :: = morde | le | olha
<objeto> :: = <substantivo>
| <artigo> <substantivo>
| <artigo> <adjetivo> <substantivo>
Notao utilizada:
< ......... > : categoria sinttica ou gramatical;
::= : definido por
| : ou (alternativa)
::= : regra de sintaxe (ou regra gramatical ou regra de produo)
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 7
II.2 Definio Formal de Gramtica
Formalmente definimos uma gramtica G como sendo um qudrupla (sistema formal
constitudo de quatro elementos) G = (Vn, Vt, P, S) onde:
Vn um conjunto finito de smbolos denominados no-terminais. Estes smbolos
tambm so denominados meta variveis, ou seja, so os smbolos utilizados na descrio da
linguagem.
Vt um conjunto finito de smbolos denominados terminais. So os smbolos da
linguagem propriamente ditos, ou seja os smbolos que podem ser usados na formao das
sentenas da linguagem.
Convenes: Vn Vt = e Vn Vt = V
P um conjunto finito de pares ( , ) denominado produes (ou regras gramaticais
ou regras de sintaxe). Uma produo representada por :: = , onde V*VnV*
V*, e significa que definido por , ou ainda que produz ou equivalentemente que
produzido (gerado) a partir de .
S o smbolo inicial da gramtica; deve pertencer a Vn. O smbolo inicial de uma
gramtica o no-terminal a partir do qual as sentenas de uma linguagem sero geradas.
Exemplos:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 9
II.5 Tipos de Gramticas
(Classificao ou hierarquia de CHOMSKY)
Gramtica Tipo 0:
(ou gramtica sem restries)
G = (Vn, Vt, P, S), onde:
P = { | V*VnV* V*}
Gramtica Tipo 1:
(ou Gramtica Sensvel ao Contexto G.S.C.)
G = (Vn, Vt, P, S), onde:
P = { || ||, V*VnV* V+}
Gramtica Tipo 2:
(ou Gramtica Livre de Contexto G.L.C.)
G = (Vn, Vt, P, S), onde:
P = {A A Vn V+
Gramtica Tipo 3:
(ou Gramtica Regular G.R.)
G = (Vn, Vt, P, S), onde:
P = {A a X | A Vn, a Vt X {Vn {}}}
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 10
Observao: Note que segundo esta redefinio, a produo S s poder ser usada uma
vez: exatamente na derivao de (a sentena vazia).
Lema II.1: Se G = (Vn, Vt, P, S) uma G.S.C., ento G1 S.C. | L(G1) = L(G) o
smbolo inicial de G1 no aparea no lado direito de nenhuma produo de G1.
1 Seja w L(G) S + w
+
se S w
ento S * w
se S
ento S P e, por definio, S1 P1
+ w L(G) L(G1)
Logo, S1 w S1
2 Seja w L(G1) S1 + w
se S1 + w
ento S1 * w
se S1
ento S1 P1 e, para que esta produo exista, necessrio que P
contenha a produo S , portanto:
S * w S + w L(G ) L(G)
1
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 11
Prova: (* atravs de algoritmo *)
Seja G = (Vn, Vt, P, S) uma G.S.C. | S P;
Seja w uma seqncia |w| = n;
Seja TM o conjunto de formas sentenciais | || N S
* em M passos.
Algoritmo II.1:
1 To = { S }
2M1
3 TM TM-1 { | , onde TM-1 || n}
4 Se TM = TM-1
ento fim
seno M M+1;
calcule novo TM (volte ao passo 3).
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 12
Captulo III Autmatos Finitos e Conjuntos Regulares
III.1 A.F.D
III.2 A.F.N.D.
III.3 Transformao de A.F.N.D. para A.F.D.
III.4 Relao Entre G.R. e A.F.
III.5 Minimizao de Autmatos Finitos
III.6 Conjuntos Regulares e Expresses Regulares
III.7 Implementao de Autmatos Finitos
III.8 Propriedades e Problemas de Deciso sobre Conjuntos Regulares
III.9 Aplicaes de A.F. e E.R.
Geradores X Reconhecedores
Gramticas Tipo 0 Mquinas de Turing
Gramticas S.C. Autmatos Limitados Lineares
Gramticas L.C. Autmatos de Pilha
Gramticas Regulares Autmatos Finitos
III.1 A.F.D.
Formalmente definimos um A.F.D. como sendo um sistema formal M = (K, , , qo, F),
onde:
K um conjunto finito no vazio de Estados;
um Alfabeto, finito, de entrada;
Funo de Mapeamento (ou funo de transio)
definida em: K x K
qo K, o Estado Inicial
F K, o conjunto de Estados Finais
Interpretao de
A interpretao de uma transio (q, a) = p, onde q p K a , a seguinte: se o
Controle de M esta no estado q e o prximo smbolo de entrada a, ento a deve ser
reconhecido e o controle passar para o estado p.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 13
Significado Lgico de um Estado
Logicamente um estado uma situao particular no processo de reconhecimento de
uma sentena.
(qo, x) = p | p F.
T(M) = {x | (qo, x) = p p F}
Diagrama de Transio
Um diagrama de transio para um A.F. M um grafo direcionado e rotulado, onde os
vrtices representam os estados e fisicamente so representados por crculos (sendo que o
estado inicial possui uma seta com rtulo Inicio e os estados finais so representados por
crculos duplos), e as arestas representam as transies (sendo que, entre dois estados p e
q, existir uma aresta direcionada de p para q, com rtulo a (a ) (p, a) = q
em M.
Tabela de Transies
uma representao tabular de um A.F..
Nesta tabela as linhas representam os estados (o inicial indicado por uma seta e os
finais por asteriscos), as colunas representam os smbolos de entrada e o contedo da posio
(q, a) ser igual a p se existir (q, a) = p, seno ser indefinido.
III.2 A.F.N.D.
Um A.F.N.D. um sistema formal M = (K, , , qo, F), onde:
K, qo, F possuem a mesma definio dos A.F.D.
uma funo de mapeamento, definido em K x = (K); sendo que (K) um
subconjunto de K; isto eqivale a dizer que (q, a) = p1, p2, ...,pn. A interpretao de
que M no estado q, com o smbolo a na entrada pode ir tanto para o estado p1 como
para o estado p2, ..., como para o estado pn.
Vantagem Desvantagem
A.F.D. Implementao Trivial No natural na representao de
algumas L.R.
A.F.N.D. Representao mais natural de Implementao complexa
algumas LR
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 14
III.3 Transformao de A.F.N.D. para A.F.D.
Teorema 3.1: Se L um conjunto aceito por um A.F.N.D., ento um A.F.D. que aceita L
Exemplo:
Seja M um A.F.N.D. definido por:
a b
qo qo,q1 qo
q1 --- q2
q2 --- q3
*q3 --- ---
onde T(M) = { }
K = { a b
= {a, b) [qo]
qo =
F =
T(M) = { }
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 15
III.4 Relao entre G.R. e A.F.
1 L(G) T(M)
Mostrar que L(G) est contido em T(M), significa mostrar que se x L(G) ento T(M)
contm x, ou seja, M aceita x.
Seja x = a1a2...an L(G).
Se x L(G), ento S + x
Como G uma G.R., a derivao S + x da forma
S a1A1 a1a2A2 ... a1a2...na-1An-1 a1a2...an
Logo,
S a1A1, A1 a2A2, ... An-1 an so produes de G.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 16
2 T(M) L(G)
Mostrar que T(M) est contido em L(G), significa mostrar que, se T(M) contm x, ento
x L(G).
Seja x = a1a2...an uma seqncia aceita por M.
por definio, para que essas transies existam, G dever possuir as seguintes
produes:
S a1A1, A1 a2A2, ... An-1 an
Teorema 3.3: Se M = (K, , , qo, F) um A F., ento uma G.R. G = (Vn, Vt, P, S)
| L(G) = T(M).
Prova: a Mostrar que G existe
b Mostrar que L(G) = T(M)
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 17
contudo, usando o teorema 2.1 podemos encontrar uma G.R. G1 | L(G1)
= L(G) U {} e portanto, L(G1) ser igual a T(M)
Seno, T(M) e L(G) = T(M).
Estados Inacessveis:
Um estado q K inacessvel (ou inalcanvel) quando no existe w1 tal que a partir
de qo, q seja alcanado; ou seja, no existe w1 | (qo, w1) = q, onde w1 uma sentena ou
parte dela.
Estados mortos:
Um estado q K morto se ele F w1 | (q, w1) = p, onde p F w1 uma
sentena ou parte dela, ou seja, q morto se ele no final e a partir dele nenhum estado final
pode ser alcanado.
Estados Equivalentes:
Um conjunto de estados q1, q2, ..., qj so equivalentes entre s, se eles pertencem a uma
mesma classe de equivalncia.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 18
Algoritmo para construo do A.F. Mnimo
a b
*A G B
B F E
C C G
* D A H
E E A
F B C
*G G F
H H D
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 19
2 C.R. so as linguagens geradas por Gramticas Regulares.
As E.R. sobre um alfabeto e os C.R. que elas denotam, so definidos como segue:
1 uma E.R. e denota o C.R. ;
2 uma E.R. e denota o C.R. {};
3 a para todo a , uma E.R. e denota o C.R. {a};
4 Se p e q so E.R. denotando os C.R. P e Q respectivamente, ento:
a (p | q) uma E.R. denotando o C.R. P Q;
b (p.q) ou (pq) uma E.R. denotando o C.R. PQ;
c (p)* uma E.R. denotando o C.R. P*;
5 Nada mais E.R..
Observaes:
1 Os parnteses podem ser eliminados; neste caso, para evitar ambigidades, considera-se a
seguinte ordem de precedncia: 1) * 2) . 3) |
2 Para simplificar E.R., podemos utilizar as seguintes abreviaturas:
p+ = pp*
p? = p |
pq = p(qp)*
- Implementao Especfica
Implementao Especfica
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 20
Exemplo:
TAB a b c
q1 1 2 4
q2 4 2 3
q3 1 4 3
q4 4 4 4
Implementao GERAL
TAB a b c <> a, b, c VE F
(q0) 1 1 2 4 4 1 0
(q1) 2 4 2 3 4 2 0
(q2) 3 1 4 3 4 3 1
(qerro) 4 4 4 4 4 4 0
Procedimento
Inicio
(* inicializao de TAB e VEF *)
leia EST, CAR (* estado inicial, prximo caracter *)
enquanto CAR $ faa
EST:= TAB[EST, CAR]
leia CAR
fim enquanto
se VEF [EST] = 1
ento escreva sequncia reconhecida
seno escreva sequncia no reconhecida
fim se
fim
Observaes:
- A escolha entre uma e outra forma de implementao depende da aplicao;
- Os exemplos de implementao apresentados so ilustrativos, na prtica qualquer
implementao deve ser adaptada segundo seus objetivos. Vale, portanto a filosofia de
implementao.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 22
III.8 Principais Propriedades e Problemas de Deciso sobre Conjuntos
(Linguagens) Regulares
1 UNIO:
Se L1 e L2 so C.R., ento
L1 L2 = {x | x L1 x L2} tambm um C.R.
2 CONCATENAO:
Se L1 e L2 so C.R., ento
L1L2 = {xy | x L1 y L2} tambm um C.R.
3 COMPLEMENTO:
Se L1 * um C.R., ento
* - L1 tambm um C.R.
4 INTERSECO:
Se L1 e L2 so C.R., ento
L1 L2 = {x | x L1 x L2} tambm um C.R.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 23
III.9 Aplicaes de A.F. e E.R.
c) Alm das aplicaes acima (tidas como as principais) podemos tambm destacar o
uso destas ferramentas nas seguintes reas:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 24
Captulo IV Gramticas Livres de Contexto e Autmatos de Pilha
Inicialmente definimos uma G.L.C. como sendo G = (Vn, Vt, P, S), onde P = {A |
A Vn (Vn Vt)+}.
Posteriormente estendemos esta definio permitindo a existncia da produo S ,
desde que S fosse o smbolo inicial de G e no aparecesse no lado direito de nenhuma das
produes de P. As gramticas assim definidas denominam-se G.L.C. - LIVRES.
Agora, redefiniremos (em definitivo) as G.L.C. permitindo a existncia de produes da
forma A para A Vn.
Formalmente, passamos a definir uma G.L.C. G como sendo G = (Vn, Vt, P, S), onde
Exemplos:
O limite de uma A.D. o string obtido pela concatenao (da esquerda para a direita)
das folhas da rvore; ou seja, a forma sentencial cuja derivao esta sendo representada pela
A.D.
Lema 4.1: Se D uma A.D. com limite em G ento S .
Lema 4.2: Para toda derivao de em G, uma A.D. com limite .
Seja a derivao S .
Considerando que obtido de pela substituio de um No-Terminal de , temos
que:
a) Se o smbolo substitudo foi o mais da esquerda, ento esta uma derivao mais
esquerda;
b) Se o smbolo substitudo foi o mais da direita, ento esta uma derivao mais direita;
Observao: Se obtido por uma derivao mais a esquerda ou mais a direita dizemos que
uma forma sentencial Esquerda ou Direita, respectivamente.
Definio: Uma G.L.C. G = (Vn, Vt, P, S) ambgua se para algum x L(G) existe
mais de uma A.D..
De outra forma, G ambgua se existir algum x L(G), tal que x possua mais de uma
Derivao mais a Esquerda ou mais de uma Derivao mais a Direita.
Exemplos:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 26
IV.5 Transformaes (Simplificaes) em G.L.C.
gera string s de terminais) ou inalcanvel (no aparece em nenhuma forma sentencial de G).
Algoritmo IV.1
Algoritmo IV.2:
Exemplo:
Algoritmo IV.3
Exemplo:
Toda G.L.C. pode ser transformada em uma G.L.C. - Livre, atravs do seguinte
algoritmo:
Algoritmo IV.4:
A B | B Ne , V*
inclua em P a produo A
S S e S incluindo S em N (N = N {S})
Exemplos:
1) S a S b | c |
2) S AB
A aA |
B bB |
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 29
2) S a B c D e
BbB|E|F
DdD|F|d
EeE|e
FfF|f
Uma G.L.C. est fatorada se ela determinstica; isto , no possui A produes cujo
lado direito inicie com o mesmo conjunto de smbolos ou com smbolos que geram (derivam)
seqncias que iniciem com o mesmo conjunto de smbolos.
Exemplos:
Processo de Fatorao
Definies:
a) Um No-Terminal A em uma G.L.C. G = (Vn, Vt, P, S) recursivo
+ A , para V*.
se A
b) Uma Gramtica com pelo menos um NT recursivo a Esquerda ou a Direita,
uma Gramtica Recursiva a Esquerda ou a Direita, respectivamente.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 30
Recurso a Esquerda
Exemplos:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 31
IV.6 TIPOS ESPECIAIS DE G.L.C
Gramtica Prpria:
Uma G.L.C. Prpria, se:
No possui Ciclos;
- Livre;
No possui Smbolos Inteis.
Gramtica Reduzida:
Uma G.L.C. G = (Vn, Vt, P, S) uma G.L.C. Reduzida se:
L(G) no vazia;
Se A P, A ;
G no possui Smbolos Inteis.
Gramtica de Operadores:
Uma G.L.C. G = (Vn, Vt, P, S) de Operadores, se ela no possui produes cujo lado direito
contenha NT consecutivos.
Gramtica Linear:
Uma G.L.C. G = (Vn, Vt, P, S) Linear se todas as suas produes forem da forma
A x B w | x, onde A, B Vn x, w Vt*.
RRP : uma notao de G.L.C. onde os lados direito das produes so especificados atravs
de E.R. envolvendo Vt e Vn de uma gramtica.
Exemplos:
1) <S> :: = a*
2) <E> :: = id +
2) <E> : id
+
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 33
IV.7 Autmatos de Pilha (PDA)
a1 a2 ... an Entrada
Z1
Z2
...
Controle Finito
Zn Pilha
(K x ( {}) x ) {K x *}
q0 K, o Estado Inicial de P
Z0 , o Smbolo Inicial da Pilha
F K, o conjunto de Estados Finais.
Movimentos de um PDA
Os movimento de um PDA so determinados com base nas seguintes informaes:
prximo smbolo da entrada,
smbolo do topo da pilha
estado corrente
A Linguagem aceita por um PDA pode ser definida de duas maneiras, conforme o
modo como efetuado o reconhecimento das sentenas:
Observao: Linguagens aceitas por estados finais e por pilha vazia constituem a mesma
classe de linguagens, pois para toda linguagem aceita por um PDA P1 por pilha vazia, existe
um PDA P2 que reconhece essa linguagem por estado final e vice-versa.
Exemplos:
Um PDA tambm pode ser representado por um grafo de transies, similar aquele
utilizado na representao de A.F.. A diferena bsica est no rtulo das arestas, os quais
devero indicar alm do smbolo de entrada, o smbolo do topo da pilha e a seqncia de
smbolos que dever substituir o smbolo do topo da pilha, isto , o rtulo deve ser da forma:
(a, Z) , onde a
Z
*.
Exemplo:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 36
Autmato de Pilha Determinstico
1 sempre possvel construir a partir de uma G.L.C. G um PDA P que aceite L(G) por
pilha vazia (e portanto, em funo da equivalncia, aceita tambm por estado final);
Exemplo:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 37
IV.9 Propriedades e Problemas de Deciso das LLC
Nesta seo apresentaremos as principais propriedades e os problemas de deciso
bsicos relativos a LLC, com o objetivo de despertar o interesse por tais aspectos e ilustrar
algumas questes prticas. O assunto pode ser encontrado de forma mais ampla e profunda na
bibliografia indicada.
Propriedades
A classe das LLC fechada sobre as seguintes operaes:
a) Unio
Se L1 e L2 so LLC, ento
L1 L2 tambm uma LLC.
b) Concatenao
Se L1 e L2 so LLC, ento
L1L2 tambm uma LLC.
c) Fechamento
Se L uma LLC, ento L* e L+ tambm so LLC.
Problemas de Deciso
1 Membership
Observao: Isto pode ser demonstrado pelo algoritmo do Teorema II.2 (CAP.II) atravs de
uma derivao de no mximo 2*|x|-1 passos.
2 Emptiness
Observao: Este problema pode ser resolvido pelo algoritmo que determina o conjunto de
NT frteis de G, bastando testar se o smbolo inicial de G frtil.
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 38
3 Finiteness
Observao: Este problema pode ser resolvido com auxlio dos conceitos de Smbolos Inteis
e No-Terminais Recursivos.
4 Containment
5 Equivalence
6 Intersseco
Dadas duas G.L.C. G1 e G2, L(G1) L(G2) = ?
7 Ambigidade
Dada uma G.L.C. G = (Vn, Vt, P, S), G ambgua?
IV.10 Aplicaes
As LLC so de grande importncia prtica, notadamente nas seguintes aplicaes:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 39
Captulo V Anlise Sinttica
Exemplos:
Conjunto First
Definio: Seja uma seqncia qualquer gerada por G. Definimos como sendo
first() o conjunto de smbolos terminais que iniciam ou seqncias derivadas (direta ou
indiretamente) de .
Observaes: Se = ou
* , ento first().
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 40
Algoritmo V.1:
Em outras palavras:
1 Coloque first(Y1), exceto , em first(X);
2 Se first(Y1) ento coloque first(Y2), exceto em first(X);
3 Se first(Y2) ento ....
.....
at Yk.
4 Finalmente, se para todo i (de 1 a k) first(Yi) contm ,
ento adicione em first(X).
Conjunto Follow
Para todo A Vn, aplique as regras abaixo, at que Follow(A) esteja completo (isto ,
no sofra nenhuma alterao):
2 Se a B P ,
ento adicione First(), exceto , em Follow(B);
Exemplos e Exerccios:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 41
V.2 Classes de Analisadores
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 42
Analisadores Descendentes sem Back-Track
Para que um G.L.C. possa ser analisada deterministicamente por estes analisadores, ela
deve satisfazer as seguintes condies:
c) Para todo A Vn | A
* , First(A) Follow(A) = .
Tcnicas de Implementao
Exemplo:
procedure T (simb);
begin
...
end;
a b c ... $
Entrada
X Algoritmo
W
Y
Z Tabela de Parsing
Pilha $
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 44
O algoritmo do parser preditivo tem como funo determinar a partir de X (o elemento
do topo da pilha) e de a (o prximo smbolo da entrada) a ao a ser executada, a qual poder
ser:
a) Se X = a = $ o analisador anuncia o final da anlise.
Observaes: O termo Preditivo deve-se ao fato de que a pilha sempre contm a descrio do
restante da sentena (se ela estiver correta); isto , prev a parte da sentena que deve estar na
entrada para que a sentena esteja correta.
repita
(* X topo da pilha *)
(* a prximo smbolo da entrada *)
se x terminal ou $
ento se X = a
ento retira X do topo da pilha
retira a da entrada
seno erro( )
seno (* X no terminal *)
se M(X, a) = X Y1 Y2 ... Yk
ento retira X da pilha
coloca Yk Yk-1 ... Y2 Y1 na pilha
(* deixando Y1 sempre no topo *)
seno erro( )
at X = $ (* pilha vazia, anlise concluda *)
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 45
Algoritmo para Construo da Tabela de Parsing
Consideraes Gerais
A tabela de parsing dos parsers preditivos deve possuir a propriedade de que, em cada
entrada da tabela M exista no mximo uma produo (seu nmero); isto viabiliza a anlise
determinstica da sentena de entrada.
Para que esta propriedade se verifique, a gramtica considerada dever satisfazer as
seguintes condies:
1 No possuir recurso esquerda;
2 Estar fatorada;
3 Para todo A Vn | A * , First(A) Follow(A) =
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 46
deve ser substitudo pelo (reduzido ao) lado esquerdo da produo em questo. Este processo
deve ser repetido ate que toda a sentena de entrada tenha sido analisada.
Embora esta tcnica de anlise sinttica possa ser aplicada a qualquer GLC (esta sua
grande vantagem), ela apresenta vrias deficincias que inviabilizam seu uso na prtica. So
elas:
1 Requer muito tempo para analise;
2 S detecta erro sinttico aps consumir toda a sentena a ser analisada e, alm disso,
no identifica o ponto onde ocorreu o erro.
3 Pode rejeitar sentenas corretas pelo fato de que nem sempre que o lado direito de
uma produo aparece na pilha a ao correta uma reduo, fato este que caracteriza o No-
Determinismo do mtodo.
a1 a2 .....................an $
Entrada
Sm
. Algoritmo
. de Tabela
. Anlise de
S1 Sinttica Parsing
S0
Pilha
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 48
Algoritmo da Anlise Sinttica LR
Tabela de Parsing LR
Configurao de um Analisador LR
Gramticas LR: Uma G.L.C. LR se cada sentena que ela gera pode ser analisada
deterministicamente da esquerda para a direita por um analisador LR.
Pertencem a classe das gramticas LR, todas as G.L.C. para as quais possvel construir
a tabela de parsing LR sem que hajam conflitos (isto , em cada posio da tabela haver no
mximo uma ao registrada).
Definices Gerais:
a) Item LR(0): Um item LR(0) (ou simplesmente item) em uma Gramtica G uma
produo de G com uma marca (fisicamente representada por um ponto) em uma posio de
seu lado direito. Denota-se um item por um par de inteiros [i, j], onde i o no da produo e j
a posio em que se encontra o ponto.
Exemplo:
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 50
Observao: Um item [i, j] tem o seguinte significado: As informaes disponveis indicam
que a produo i est sendo utilizada e que os primeiros j smbolos de seu lado direito j
foram analisados.
b) Item Completo: Item em que a marca est aps o ltimo smbolo do lado direito da
produo.
Observaes: A coleo de estados criada para uma G.L.C. (denominada Coleo LR(0)) a
base para a construo da tabela de parsing SLR(1).
a) Crie uma linha para cada estado e uma coluna para cada smbolo {Vn Vt {$}}.
b) Coloque SHIFT (ou GOTO) nos estados que deram origem a estados sucessores (nas
colunas referentes aos smbolos sobre os quais houve a movimentao da marca).
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 51
c) Para cada estado i com itens completos, faa:
Para cada item completo, faa:
Coloque REDUCE N na interseco da linha correspondente ao estado i com as
colunas correspondentes a smbolos follow(A); onde N o nmero da produo
envolvida no item completo em questo e A o smbolo do lado esquerdo desta
produo.
d) Coloque HALT na interseco da linha referente ao estado que contenha o item [0, 1],
na coluna do smbolo $.
Condio SLR(1): A condio para que a tabela construda pelo algoritmo acima seja
SLR(1), que no existam estados Inadequados (estados com conflitos Shift-Reduce e/ou
Reduce-Reduce); isto equivale a dizer que cada posio da tabela dever conter no mximo
uma ao.
Para que um analisador LR aceite qualquer sentena correta e detecte pelo menos um
erro em cada sentena incorreta, a tabela de parsing deve possuir as seguintes propriedades:
a) Condio De Erro: Nunca ser encontrada para sentenas sintaticamente corretas.
b) Cada Shift dever especificar um nico estado, o qual depender do smbolo da
entrada.
c) Cada Reduce s realizado quando os estados do topo da pilha (os smbolos que
eles representam) forem exatamente os smbolos do lado direito de alguma produo
de G, isto , um handle da gramtica.
d) Halt s ser encontrado quando a anlise estiver completa.
2 C if E then C else C
| if E then C
| com
E exp
3 B AB
B or AB |
A CA
A and CA |
C exp | (B) | not C
___________________________________________________________________________
UFSC-CTC-INE - Linguagens Formais e Compiladores - pg. 52