Linguagens Formais
Jorge Muniz Barreto
UFSC-INE
2000
Por que estudar
Linguagens Formais?
• A resposta mais usual a esta pergunta é que o
estudo das linguagens formais, sob a forma de
gramáticas gerativas é a base da teoria da
interpretação e compilação. Juntamente com a
Teoria de Automata, como reconhecedores
das palavras válidas definidas nestas
linguagens tem-se um arcabouço teórico
perfeito para a compreensão e estudo de
compiladores.
Aplicações de Linguagens
Formais
• E será que estas gramáticas só serviriam
para isto? Claro que não, e serão
apresentados exemplos distintos do uso de
linguagens formais.
• Exemplos: Estudo de linguagens naturais,
modelos de crescimento em biologia,
modelos de evolução biológica, etc.
Linguística
• Um sistema formal de grande interesse em
teoria da Computação é o das Gramáticas
Gerativas. Estas Gramáticas apareceram
inicialmente no estudo de Linguística para
ajudar a melhor compreender as linguagens
naturais.
• Chama-se Linguagem Natural aquela que é
usada para comunicação entre seres vivos,
em particular, seres humanos.
Uso em Linguagem Natural
• Os linguistas se preocupam não somente
em definir precisamente o que é uma
sentença correta mas também dar uma
descrição da estrutura desta sentença.
Inicialmente, os estudos se concentraram na
Língua Inglesa a qual é atualmente talvez a
mais bem estudada e conhecida.
IA e Linguagem formal
• Para o pesquisador de Ciência da
Computação, essas gramáticas gerativas
tendo forma semelhante a um sistema
formal, fazem crer que, quando se conseguir
ter conhecimento completo da gramática
formal de uma língua falada, tal como o
português, um grande passo teria sido dado
para o computador “entender” português.
Modelos Formais (1/2)
• As gramáticas gerativas foram criadas por
Noam Chomsky. Existem ainda, para o estudo
das linguagens naturais outras abordagens:
• Teoria da estratificação de Sydney
• Lamb que considera a linguagem constituida
de mais de dois níveis (categorias gramaticais
e vocabulário), (palavras não-terminais e
terminais) e sim uma série de níveis ou
estratos.
Modelos Formais (2/2)
• A Teoria Tagmênica de Kenneth Pike para quem a
linguagem é uma variedade de comportamento
humano, como comer, jogar tenis ou nadar. A
principal colaboração desta teoria é a distinção entre
diferenças êmicas e éticas. As éticas podem ser
ignoradas pelo indivíduo que ouve ou produz o som
como o “l'' final de “Brasil'’ freqüentemente
pronunciado “u'', ou o ``th'' de ``tia'' do carioca. As
êmicas tem valor semântico como “carro'' e “caro''
que para um francofone são sons idênticos.
• As gramáticas sistêmicas de Halliday.
Alfabetos
• Um alfabeto é um conjunto finito de
símbolos.
• Algumas vêzes se fala de vocabulário, em
lugar de alfabeto. Neste caso os símbolos são
palavras. Par o objetivo seguido aqui, esta
diferença é irrelevante pois uma palavra pode
ser considerada representada por um símbolo,
como na escrita hieroglífica.
Exemplos de Alfabetos
• {a,e,i,o,u} é o alfabeto constituido pelas
vogais de nosso alfabeto.
• {I,V,X, L,C, M} é o alfabeto formado pelos
símbolos usados na numeração romana.
• {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} é o alfabeto
formado pelos símbolos usados na
numeração arábica.
Definição de Linguagem
• Ao conjunto de todos as seqüências de
elementos do alfabeto que se podem formar
denota-se por A*.
Uma linguagem L sobre um alfabeto
A, também escrita LA é todo
subconjunto de A*.
Exemplo de Linguagem dos
Números Romanos
• Seja o alfabeto R = {I,V,X,L,C,M} do exemplo 2. R* é um
conjunto de cardinalidade 0. Abaixo mostram-se alguns
elementos:
R* = {I,II,III,IIII,V,VV,VVV,VVVV,VXL,XL,...}
que em termos dos símbolos usados no alfabeto 3
significam: 1,2,3,?,5,?,?,?,?,40,...
• As sequencias às quais não corresponde valor, expresso pelo
correspondente número arábico, não são números romanos,
isto é, não pertencem à linguagem dos números romanos.
Modos de Definir uma
Linguagem (1/3)
• Essencialmente existem três modos de
definir uma linguagem:
• Por enumeração de seus elementos,
• Por um modo construtivo chamado
gramática gerativa, ou
• Por propriedades.
Modos de definir uma
Linguagem (2/3)
• Definir uma linguagem por enumeração de
seus elementos só é possível no caso de
linguagem com número finito de palavras.
• A definição por propriedades é uma
definição declarativa, em que certas formas
especiais são ditas pertencer à linguagem.
Modos de definir uma
Linguagem (2/3)
• As gramáticas gerativas consistem em um
algoritmo para gerar as palavras da
linguagem.
• Neste caso faz-se uma partição no alfabeto,
terminais e não terminais, da-se regras de
reescrita, e um elemento não terminal para
início da geração das palavras da
linguagem.
Gramática gerativa
• Uma gramática é a quadrupla:
<N,T,P,n0>
onde:
N: conjunto de símbolos ditos não terminais;
T: conjunto de símbolos terminais;
P: conjunto de regras de reescrita ou de
produção;
n0: raiz ou fonte da linguagem n0  N.
Representacões de regras
• Representação
funcional:
• A  ABa
• Representação como
em um sistema formal
A
ABa
Relação com Sistemas Formais
• A definição de uma linguagem por
gramáticas gerativas tem grande relação
com o estudo dos Sistemas Formais,
podendo mesmo ser considerado como
exemplo destes sistemas.
• Na realidade, a um dado sistema formal
correspondem tantas linguagens geradas por
gramáticas gerativas quantos são os
elementos do vocabulário.
Como ter várias Gramáticas
Gerativas de um Sistema Formal?
• Note que no sistema formal temse um
vocabulário. Não foi ainda especificado o
que é o elemento inicial gerador (algumas
vêzes se faz isto nas regras), nem os
terminais nem os não terminais. Escolhas
diferentes produzem linguagens distintas.
Exemplo de Gramática Gerativa
•
•
•
•
•
•
•
•
N={F,S,C,V,O}
T={Jó,Sô,casa,…}
P={
F  SC
F  SV
C  VO ...
}
N0 = F
• Se supõe o alfabeto não
terminal significando
categorias gramaticais,
tem-se:
• F: Frase
• S: Sujeito
• C: complemento, etc…
• E tem-se uma
representção do português.
Hierarquia de Chomsky
• A Hierarquia de Chomsky classifica as
linguagens segundo o grau de complexidade
das suas regras de reescrita.
• Assim as linguagens são classificadas como
de tipo 0, 1, 2 e 3. As tipo 0 não tem
restrições, as outras que são cada uma mais
restrita que a outra são: sensíveis ao
contexto, livres de contexto e regulares.
Linguagem Tipo 0
• Em uma linguagem tipo zero não há
restrições quanto às regras de reescrita, ou
de produção.
• São as mais difíceis de se tratar.
• Observação: serão usadas letras maiúsculas
para não terminais e minúsculas para
terminais.
Linguagem Tipo 1
• As Linguagens Tipo 1 são também chamadas
sensíveis ao contexto. Nelas se exige apenas que
em cada regra de produção, o comprimento da
palavra original seja igual ou menor que o da
palavra derivada.
• Assim: Aab  Ac não é válida;
• Mas: Ac  Aab o é.
Linguagem Tipo 1:Exemplo
• Seja a linguagem:
(N,T,P,S)
N={S,B,C},
T={a,b,c},
P{S  aSBC,
S  aBC,
CB  BC,
aB  ab, bB  bb
bC  bc, cC  cc}
Usando P1 n-1 vezes:
S  an-1 S(BC) n-1
Usando P2: a n (BC) n
P3 permite : an Bn Cn
P4: an b Bn-1 Cn
P5: an bn Cn
P6 1 vêz e P7 n-1 vêzes:
an bn cn
Prova-se que esta é forma geral
de palavras da linguagem.
Linguagem Tipo 2
• Linguagem Tipo 2 ou Livre de contexto são
as mais usadas. Nelas todos os antecedentes
de regras tem apenas 1 elemento, por
exemplo:
A  Ba
• Neste caso o resultado da transformação de
A independe do que tem antes ou depois ,
isto é, do contexto.
Linguagem Tipo 2: Árvores
• As linguagens de tipo
2 podem ser
representadas com
facilidade por árvores
de derivação:
• Existe 1 e apenas 1 nó
sem ramo chegando,
chamado raiz da
árvore.
• Para cada nó existe
uma seqüência de nós
ligando este nó à raiz
da árvore. O grafo é
conexo.
• Somente um arco
entra em cada nó.
Exemplo de árvore
Seja a gramática:
G=({S,A],{a,b}P,S)onde:
P={S  aAS
Sa
A  SbA
A  SS
A  ba}
Linguagem Tipo 3
• Linguagem Tipo 3 ou Linguagem Regular
ee aquela em que as Regras de produção, ou
tem apenas como consequencia um terminal
ou um terminal seguido de um não terminal.
Ex:
A  aB ou A  a
Nota: Estas linguagens são reconhecidas por
máquina de estados finita.
Árvores para Linguagem T3
• As árvores das linguagens tipo 3 são todas
mais simples que as do tipo 2.
• Árvores, servem para, partindo de suas
folhas reconstruir a árvore. A esta ação
chama-se parser, ou análise sintática,
E até curso mais aprofundado...
Será que sou
como o animal ao
lado?
Download

FormLing