Análise Sintática. Fabiano Baldo

Documentos relacionados
Compiladores Analisador Sintático. Prof. Antonio Felicio Netto Ciência da Computação

Compiladores - Gramáticas

Análise Sintática Introdução

Análise Sintática. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 18

COMPILADORES. Análise sintática. Prof. Geovane Griesang Universidade de Santa Cruz do Sul UNISC Departamento de informática

Uma gramática é ambígua se existe alguma cadeia para qual ela tem mais de uma árvore sintática

Compiladores - Gramáticas

Linguagens Livres de Contexto

Gramáticas Livres de Contexto Parte 1

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

V Análise Sintática. V.1.1 Gramáticas Livres de Contexto Definições de GLC

Análise Sintática I. Eduardo Ferreira dos Santos. Abril, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 42

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Plano da aula. Compiladores. Os erros típicos são sintáticos. Análise Sintática. Usando Gramáticas. Os erros típicos são sintáticos

Análise Sintática II. Eduardo Ferreira dos Santos. Outubro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 34

Conceitos de Linguagens de Programação

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

INE5416 Paradigmas de Programação. Ricardo Azambuja Silveira INE CTC UFSC E Mail: URL:

IV Gramáticas Livres de Contexto

Construção de Compiladores Aula 16 - Análise Sintática

Python e sua sintaxe LNCC UFRJ

Compiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 30. Instituto de C

Análise Sintática. Compiladores Cristina C. Vieira. Compiladores 2012/2013

ACH2043 INTRODUÇÃO À TEORIA DA COMPUTAÇÃO

Se o símbolo inicial não fizer parte do conjunto de símbolos férteis, a linguagem gerada pela gramática é vazia.

Compiladores Aula 4. Celso Olivete Júnior.

Construção de Compiladores Aula 3 - Analisador Sintático

Sintaxe e Semântica. George Darmiton da Cunha Cavalcanti.

Compiladores - Análise Léxica

Introdução à Programação

Compilação: Erros. Detecção de Erros: * Analisadores Top-Down - Preditivo Tabular (LL) - Feito a mão. * Analisadores Botton-Up: - Shift-Reduce (SLR)

Compiladores. Exemplo. Caraterísticas de Gramáticas. A αβ 1 αβ 2. A αx X β 1 β 2. Lembrando... Gramáticas Livres de Contexto

COMPILADORES. Revisão Linguagens formais Parte 02. Prof. Geovane Griesang

Compiladores - Análise LL(1)

Construção de Compiladores

Gramática. Prof. Yandre Maldonado e Gomes da Costa. Prof. Yandre Maldonado - 1

Gramática. Gramática. Gramática

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal:

INE5318 Construção de Compiladores. AULA 4: Análise Sintática

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

Análise sintática. Análise sintática ascendente. Parte-se dos símbolos terminais em direção ao símbolo inicial da gramática. Derivação mais à direita

Vantagens de uma Gramática. Sintaxe de uma Linguagem. Analisador Sintático - Parser. Papel do Analisador Sintático. Tiposde Parsers para Gramáticas

Tokens, Padroes e Lexemas

Introdução. Compiladores Análise Semântica. Introdução. Introdução. Introdução. Introdução 11/3/2008

Compiladores - Análise Léxica

Compiladores. Análise lexical. Plano da aula. Motivação para análise lexical. Vocabulário básico. Estrutura de um compilador

LFA Aula 09. Gramáticas e Linguagens Livres de Contexto 18/01/2016. Linguagens Formais e Autômatos. Celso Olivete Júnior.

Compiladores. Análise Sintática

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Conceitos de Linguagens de Programação

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE Prof. Jefferson Morais

Eduardo Belo de Araújo. Analisador ANSI-C

BNF (Backus-Naur Form) Gramática Livres de Contexto / Estruturas Recursivas

Análise Sintática Bottom-up

Análise Sintática LL(1)

Tradução Dirigida Pela Sintaxe

Análise sintática. Análise sintática. Top-down ou descendente. Com retrocesso: por tentativa e erro. Preditiva: para gramáticas LL(1) 09/04/2012

Análise Sintática - Final

Gramáticas Livres de Contexto

Compiladores I Prof. Ricardo Santos (cap 3 Análise Léxica: Introdução, Revisão LFA)

Gramática Livre de Contexto

Notação EBNF BNF estendida Notação usada com o YACC (gerador de parsers Bottom-up)

Linguagens Livres do Contexto. Adaptado de H. Brandão

Análise Sintática (Cap. 04) Análise Sintática Descendente

INE5317 Linguagens Formais e Compiladores AULA 9: Propriedades e Reconhecimento das Linguagens Livres do Contexto

Interfaces de Vanguarda do Compilador

Gramá3ca Livre de Contexto (GLC)

Compiladores - JACC. Fabio Mascarenhas

Exemplo preliminar. Considere a linguagem dos Palíndromos Lpal:

Transcrição:

Compiladores Análise Sintática Fabiano Baldo

Gramáticas Livre de Contexto (GLC) É utilizada na especificação formal lda sintaxe de uma linguagem de programação. É um conjunto de produções ou regras gramaticais i da seguinte forma: A X 1 X 2 X n A produção tem exatamente um símbolo A do lado esquerdo. Pode ter zero ou mais símbolos X i do lado direito. Por exemplo, uma clausula while é definida desta forma: 2

Gramáticas Livre de Contexto Dois tipos de símbolos podem aparecer em uma GLC: Não terminais: São elementos substituídos pelo lado direitodasproduções das produções, quando aparecemdo lado esquerdo. Terminais: Representam as marcações de uma linguagem g (ou tokens). Uma gramática livre de contexto define uma linguagem: Este linguagem é um conjunto de strings (seqüência) de tokens (terminais) i Cada string de tokens é derivada de uma regra de produção. 3

Gramáticas Livre de Contexto Ex: Considere a seguinte gramática simplificada para expressões: 4

Derivação Uma derivação é uma seqüência de substituições de não terminais por uma escolha das regras de produção gramaticais. A derivação é o método utilizado para a construção de uma cadeia específica de terminais, partindo de um não terminal inicial. Em geral, existem várias derivações para a construção da mesma cadeia de não terminais. 5

Derivação Verificar se a seqüência de tokens é reconhecida: Inicia se com o símbolo não terminal chamado raiz; Aplica se produções, substituindo não terminais, até somente restarem terminais; Uma derivação substitui um não terminal pelo lado direito de uma de suas produções; O símbolo denota um passo de derivação. 6

Derivação Ex: Derivação da cadeia (num + num) * num é apresentada abaixo: 7

Definição Formal de GLC Uma Gramática livre de contexto consiste em: Um conjunto finito de terminais T Um conjunto finito de não terminais N (disjunto de T) Um símbolo inicial S Є N Um conjunto de produções ou regras gramaticais P Uma regra de produção é da forma: tal que e Um produção com zero símbolos no lado direito (n = 0) é da forma: Uma produção também é escrita como:, tal que 8

Linguagem de uma Gramática A linguagem de uma gramática G é O símbolo de derivação pode ser estendido: : Derivado em um ou mais passos : Derivado em zero ou mais passos Freqüentemente, mais de uma produção compartilham o mesmo lado esquerdo da produção É o mesmo que: 9

Derivação mais à Esquerda e mais à Direita Derivação mais à esquerda de uma sentença é a seqüência de formas sentenciais que se obtém derivando sempre o símbolo não terminal mais à esquerda; Derivação mais à direita é a seqüência de formas sentenciais que se obtém derivando sempre o símbolo não terminal mais à direita; 10

Derivação mais à Esquerda Ex: (num + num) * num 11

Derivação mais à Direita Ex: (num + num) * num 12

Propriedades de GLC Gramática sem ciclos: É uma gramática que não possui derivação da forma: Gramáticas com ε produção: É uma gramática que possui produção do tipo A ε Gramática recursiva à esquerda: É uma gramática que permite e derivação do tipo: Gramática recursiva à direita: É uma gramática que permite derivaçãodo do tipo: 13

Propriedades de GLC A recursividade em GCL é importante, pois a repetição poder ser construída através da recursão. As ε produções sãotambém úteis para definir estruturas opcionais da linguagem. 14

Arvore de Análise Sintática Uma árvore de análise sintática é uma árvore rotulada cujos nós interiores são rotulados por nãoterminais, já os nós folha são rotulados por terminais. Os filhos de cada nó interno representam a substituição do não terminal associado em um passo de derivação. 15

Arvore de Análise Sintática É uma representação gráfica da derivação de uma sentença, que: Filtra as escolhas levando em consideração a ordem de substituição; Tem como raiz da árvore o não terminal inicial S Nós internos representam não terminais pertencentes a N Nós folhas são terminais em T ou ε O nó A pode ter filhos se existir a regra 16

Arvore de Análise Sintática Ex: (num + num) * num 17

Enumeração Pré ordem e Pósordem Uma árvore de derivação pode ser construída de derivações à esquerda ou à direita. Derivações mais à esquerda produzem uma árvore enumerada em pré ordem. Derivações mais à direita produzem uma árvore enumerada e adaem pós ordem ode invertida. Enumeração pré ordem corresponde ao parsing top down Enumeração pós ordem corresponde ao parsing botton up. 18

Enumeração em Pré ordem 19

Enumeração em Pós ordem Invertida 20

Árvore Sintática Abstrata Uma árvore de análise sintática contém muito mais informação que o necessário para um compilador gerar código executável. Uma árvore sintática abstrata pode ser entendida como uma representação em forma de árvore de uma notação simplificada. 21

Árvore Sintática Abstrata Ex: (3+4)*2 22

Árvore Sintática Abstrata O princípio da tradução dirigida por sintaxe estabelece que o significado da sentença está diretamente relacionado a sua estrutura sintática representada na árvore. Assim, a posição que cada token na árvore indica sua relação com os outros tokens reconhecidos. 23

Gramática Ambígua É uma gramática que permite construir mais de uma árvore de derivação para uma mesma sentença. Isto representa um problema para o analisador sintático, pois ela não especifica com precisão a estrutura sintática do um programa. Este sepobe problema apode ser comparado ado ao dos autômatos não determinísticos, onde dois caminhos podem aceitar a mesma cadeia. 24

Gramática Ambígua A eliminação de ambigüidade não é tão simples como a eliminação de não determinismo em autômatos. Existem duas maneiras: Estabelecer uma regra que especifique a cada caso ambíguo qual é o caminho correto. (Sem alterar a gramática) Alterar a gramática para forçar a construção da árvore sintática i correta, removendo a ambigüidade. d 25

Gramática Ambígua Infelizmente só isso não garante que a gramática não possui ambigüidade. 26

Eliminação de Ambigüidade Para tratar o problema de ambigüidade em gramática são utilizados os conceitos de precedência e associatividade. Eles especificam uma ordem na avaliação dos operadores. Operadores es com maior ao precedência c são avaliados aaados primeiro. Operadores com igual precedência são avaliados de acordo com a associatividade (esquerda direita, direta esquerda) esquerda). 27

Eliminação de Ambigüidade Para tratar a precedência dos operadores: Divide se os operadores em grupos de igual precedência Para cada nível de precedência, introduz se um não terminal e uma regra gramatical Para tratar a associatividade dos operadores: Cria se regras gramaticais que serão recursivas à direita ou à esquerda. 28

Eliminação de Ambigüidade Gramática para expressões sem ambigüidade 29

Ambigüidade da declaração Else Considera a seguinte gramática para a declaração do If 30

Ambigüidade da declaração Else Existem duas árvores de derivação para: As duas árvores traduzem diferentemente a parte else: 31

Eliminação da Ambigüidade do Else A eliminação da ambigüidade pode ser feita dessa forma: Esta regra é denominada de regra de aninhamento com o mais próximo; 32