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},{AAA, AAb, Acc, 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},{AAB, ABAb, BAcc, Ab},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},{AAB, AAb, BAcc, Ab},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},{AbB, AbA, BccA, Abcc},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},{ABb, AAb, BAcc, Abcc},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