2
tópicos
itens
01. Terminologia
02. Operações básicas
03. Representação de
linguagens
04. Formalização de
gramáticas
05. Processo de
derivação
06. Construção de
gramáticas
formais
07. Hierarquia de
Chomsky
08. Notações
gramaticais
09. Transformação
entre notações
10. Ambigüidade
11. Gramática de
Transdução
06
Especificação de linguagens
construir gramáticas
Linguagem x gramática
 Uma gramática formal completa e bem formada
define uma linguagem
 Uma linguagem pode ser definida por mais de uma
gramática formal
 Uma gramática define apenas uma linguagem
Quando uma gramática define uma linguagem
 Uma linguagem é um conjunto de sentenças
 Para uma gramática definir uma linguagem as duas
afirmações abaixo devem ser verdadeiras:
 Toda sentença gerada pelas regras da gramática faz
parte do conjunto de sentenças da linguagem
 Toda sentença do conjunto da linguagem deve
poder ser gerada pelas regras da gramática
06
especificação de linguagens
construir gramáticas
Como definir uma linguagem
 Usaremos a notação de expressões regulares




Define a forma geral de todas as sentenças de uma
linguagem
Quando um símbolo x deve aparecer pelo menos
uma vez usamos a representação x+
Quando um símbolo x deve aparecer zero ou mais
vezes usamos a representação x*
Usamos a representação x | y para indicar uma
alternativa entre o símbolo x ou y
06
Gramática bem formada
construir gramáticas
Geral
 Uma gramática bem formada segue todas as regras
abaixo
 Os quatro elementos formalizadores de uma
gramática devem estar definidos
 Deve gerar pelo menos uma sentença da linguagem
Vocabulário
 Deve ter pelo menos dois símbolos (o símbolo
inicial da linguagem e pelo menos um símbolo do
alfabeto)
 Deve conter todos os elementos do alfabeto
 Deve conter o símbolo inicial da linguagem
Alfabeto
 Deve ter pelo menos um átomo definido
06
Gramática bem formada
construir gramáticas
Conjunto das Produções Gramaticais
 Todos os símbolos usados na construção das regras
deve fazer parte do vocabulário
 Em todas as cadeias geradoras deve haver pelo
menos um símbolo não terminal
 Deve ter pelo menos uma regra onde a cadeia
geradora seja o símbolo inicial da linguagem
Símbolo Inicial
 Deve ser um símbolo do vocabulário
 Não deve ser um símbolo do alfabeto
07
Chomsky
Classificação de Chomsky
Avram Noam Chomsky nascido na
Filadélfia em 7 de dezembro de 1928
é um professor de Linguística
no Instituto de Tecnologia de
Massachusetts (MIT).
07
Hierarquia de Chomsky


As gramáticas gerais tem limitações em relação a
sua aplicabilidade no estudo de compiladores
A classificação de Chomsky



Chomsky
impõe restrições sobre o formato das produções que
denotam as leis de formação da gramática
determina cinco classes de linguagens diferentes em
quatro tipos (níveis) diferentes
Restrições


Devem ser aplicadas a todas as leis de formação da
gramática a ser classificada
Conforme as restrições feitas ao formato das produções, a
classe de gramáticas varia de forma correspondente
07
Chomsky
Classes de gramáticas

As classes são:
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao Contexto
1
Livres de contexto
2
Lineares à direita
3
Lineares à esquerda
3
Relacionamento entre as classes de gramática


As gramáticas lineares são do mesmo tipo (nível) e podem
ser da classe lineares à direita ou lineares à esquerda.
As gramática de qualquer tipo são também classificadas
como gramática do tipo menor.
07
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao Contexto
1
Livres de contexto
2
Lineares à direita
3
Lineares à esquerda
3





Chomsky
Limitação


Nenhuma limitação adicional é
imposta ao formato das produções
Apenas a restrição normal ao
formato das produções gramaticais
     V* . N . V*
  V*
Chamadas de gramáticas irrestritas ou gramáticas do tipo 0
É o tipo de gramática mais abrangente que existe
Gera linguagens chamadas de linguagens do tipo 0 ou
conjuntos recursivamente enumeráveis
Compreende todo o universo de gramáticas possíveis de
serem geradas (que definem todas as linguagens que podem
ser geradas por alguma gramática formal)
Exemplo:
G = ({A,b,c},{b,c},{AAA, AAb, Acc, A},A)
07
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao
Contexto
1
Livres de contexto
2
Lineares à direita
3
Lineares à esquerda
3
Chomsky
Limitação

Além da limitação anterior,
nenhuma produção gramatical pode reduzir o comprimento das formas sentenciais

||||

Chamadas de gramáticas sensíveis ao contexto ou do tipo 1
Gera linguagens chamadas de linguagens sensíveis ao
contexto ou linguagens do tipo 1
É um subconjunto do conjunto de gramáticas irrestritas
Toda gramática sensível ao contexto deve ser irrestrita
Nem toda gramática irrestrita é sensível ao contexto

Exemplo:




G = ({A,B,b,c},{b,c},{AAB, ABAb, BAcc, Ab},A)
07
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao Contexto
1
Livres de
contexto
2
Lineares à direita
3
Lineares à esquerda
3






Chomsky
Limitação

Além da limitação anterior, apenas
um símbolo não terminal pode
compor a cadeia geradora da
produção gramatical

  N
Chamadas de gramáticas livres de contexto ou do tipo 2
Gera linguagens chamadas de linguagens livres de contexto
ou linguagens do tipo 2
É um subconjunto do conjunto de gramáticas sensíveis ao
contexto.
Toda gramática livre de contexto deve sensível ao contexto.
Nem toda gramática sensível ao contexto é livre de contexto.
Exemplo:
G = ({A,B,b,c},{b,c},{AAB, AAb, BAcc, Ab},A)
07
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao Contexto
1
Livres de contexto
2
Lineares à direita
3
Lineares à esquerda
3
Chomsky
Limitação

Além da limitação anterior,
apenas um ou nenhum símbolo
não terminal pode compor a cadeia
gerada e, se existir, este símbolo
deve estar no final da cadeia
    =   *   N ou  = 

Chamadas de lineares à direita ou gramáticas do tipo 3
Gera linguagens lineares à direita ou conjuntos regulares
É um subconjunto do conjunto de gramáticas livres de contexto
Toda gramática linear a direita deve ser livre de contexto.
Nem toda gramática livre de contexto é linear a direita

Exemplo:




G = ({A,B,b,c},{b,c},{AbB, AbA, BccA, Abcc},A)
07
Classe de Gramáticas
Tipo
Irrestritas
0
Sensíveis ao Contexto
1
Livres de contexto
2
Lineares à direita
3
Lineares à
esquerda
3
Chomsky
Limitação

Além da limitação anterior,
apenas um ou nenhum símbolo
não terminal pode compor a cadeia
gerada e, se existir, este símbolo
deve estar no final da cadeia
    =   *   N ou  = 

Chamadas de lineares à esquerda ou gramáticas do tipo 3
Gera linguagens lineares à esquerda ou conjuntos regulares
É um subconjunto do conjunto das gramáticas livres de
contexto
Toda gramática linear a esquerda deve ser livre de contexto.
Nem toda gramática livre de contexto é linear a esquerda

Exemplo:




G = ({A,B,b,c},{b,c},{ABb, AAb, BAcc, Abcc},A)
07
Chomsky
Conjuntos das gramáticas
Conjunto das Gramáticas Irrestritas ou conjunto das gramáticas
Conjunto das gramáticas sensíveis ao contexto
Conjunto das gramáticas livres de contexto
Conjunto das gramáticas
lineares à esquerda
Conjunto das gramáticas
lineares à direita
08
definição




Notações Gramaticais
Notação gramatical é o formato que usamos para
escrever as gramáticas formais
Define um formato próprio (que não deixa de ser
uma linguagem) para escrever gramáticas que vão
definir linguagens.
Ou seja, uma notação gramatical é uma
metalinguagem
Conceito de metalinguagem:
linguagem usada para definir outra linguagem
08
Produções gramaticais







Notações Gramaticais
É o formato que foi utilizado até o momento nas aulas e nos
exercícios realizados para representar uma gramática formal
Usa basicamente simbologia de representação de conjuntos
largamente conhecida na matemática
Exige a definição explícita dos quatro elementos
formalizadores de uma gramática
Não existe convenção para distinguir símbolos terminais de
símbolos não terminais
A substituição de um cadeia por outra é

representada pelo uso do formato ao lado
Uma única alternativa é permitida em cada produção
gramatical (ou regra)
Exemplo
08
BNF
Notações Gramaticais

forma mais popular de representar gramáticas
publicada pela primeira vez no relatório de especificação do
ALGOL 60
cada produção corresponde a uma lei de substituição
< X > representa um símbolo X não terminal
X representa um símbolo X terminal
::= representa uma substituição possível de cadeias
| separa as diversas cadeias que definem um símbolo (ou)
yx concatenação de símbolos da cadeias y e x

Exemplo







08
Wirth
Notações Gramaticais

Variante da forma normal de Backus (BNF)
oferece mecanismos de substituição de recursões por iterações
às vezes chamada de BNF estendido
As produções são terminadas pelo símbolo .
X nome de um não terminal
"y" representa um terminal
(z) agrupamento de cadeias
{z} iterações arbitrárias da cadeia z
[ z ] representa uma construção opcional
zt concatenação de duas cadeias
z|t alternativas entre duas cadeias
= símbolo de atribuição
. delimitador de produção

Exemplo












08
Expressão regular
Notações Gramaticais

Muito difundida em textos mais teóricos
contém a forma geral das sentenças das linguagens que
representam
utilizam apenas os símbolos terminais
cadeia vazia e cadeia elementar
concatenação de duas cadeias ab
alternância de duas cadeias a|b
fechamento recursivo e transitivo da cadeia a*
fechamento transitivo da cadeia a+
agrupamento de cadeias (ab)
Exemplo de notação Expressão Regular

Exemplo









08
Expressão regular estendida




Notações Gramaticais
introduz o conceito de Não terminal na notação de expressões
regulares
da nome ao conjunto denotado pelo Não Terminal
sinal de igualdade associa o não terminal a expressão regular
que o define
Exemplo
08
Diagramas de sintaxe






Notações Gramaticais
Também chamada de notação ferroviária
Utilizada pela definição do Pascal
dois pontos diferenciados: ponto de partida e ponto de
chegada
pontos são ligados por um grafo orientado
nos representam pontos onde pode haver uma escolha de
caminho
Exemplo
09
PG para BNF
Transformações

Identificar os símbolos não terminais
Batizar estes símbolos na nova notação < >
Agrupar as regras da mesma cadeia geradora em
uma única regra
Substituir o sinal de atribuição para ::=

Exemplo



09
Wirth para BNF






Transformações
Pode ser feita de várias maneiras
Vamos usar a maneira canônica
Rebatizam-se os não terminais
Criam-se não terminais adicionais para cada
agrupamento existente
Criam-se produções para cada não terminal criado
Substitui agrupamentos pelos não terminais criados

Parênteses: agrupamento das opções
Colchetes: agrupamentos das opções mais a cadeia vazia
Chaves: definindo recursivamente o não terminal criado

Exemplos de conversões entre Wirth e BNF


09
BNF para Wirth














Transformações
Com eliminação de recursão sempre
Transformação de cadeia
Transformação de varias cadeias
Transformação de Não terminal e cadeia
Transformação de Não terminal e varias cadeia
Transformação de cadeia e Não terminal
Transformação de varias cadeias e Não Terminal
Transformação de cadeia Não Terminal e Cadeia
Regra Geral
Aplica a simbologia para atribuição
Aplica a simbologia para Não Terminais
Aplica a simbologia para terminais
Aplica a Regra Geral de eliminação de Recursão
Exemplo de conversões
10
Definição






Ambiguidade
Cada produção pode ser vista como uma árvore
sintática do pedaço da cadeia que atua
Toda a derivação de uma sentença gera uma árvore
sintática correspondente àquela sentença
Mais de uma arvore sintática possível para a
mesma sentença significa ambigüidade
Ambigüidade: seqüências de átomos com mais de
um significado possível
Compiladores devem tratar gramáticas não
ambíguas ou ter regras muito claras para resolver
as ambigüidades
A tentativa de determinar seqüências de produções
ótimas pode produzir ambigüidade
10
Tipos de ambiguidade
Ambiguidade
Ambigüidade estrutural
 A ambigüidade é demonstrada pelas estruturas
diferentes das arvores sintáticas montadas para a
mesma sentença
Ambigüidade de rótulos
 A árvore sintática montada tem a mesma estrutura
aparente mas difere nos rótulos apresentados em
um ou mais nodos
10
Técnicas para eliminar
Ambiguidade
Associatividade de operadores
 convenções para decidir qual operador vai ser efetuado
primeiro para um operando
 operadores associativos a esquerda (operadores
aritméticos)
 operadores associativos a direita (exponenciação
atribuição)
 diferenças entre as árvores de derivação dos operadores
Precedência de operadores
 regra que se aplica para operadores diferenciados
 associatividade não resolve este problema
 separa os operadores em classes distintas
 exemplo de uma gramática para classes de operadores
2
Download

comp20072_-_Teoria_das_Linguagens_