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

Documentos relacionados
Análise Sintática Introdução

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

Compiladores - Gramáticas

Análise Sintática. Fabiano Baldo

Compiladores - Gramáticas

Compiladores - Gramáticas

Análise Semântica e Representação Intermédia

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

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

Compiladores - Análise SLR

Compiladores - Análise Ascendente

Compiladores - Análise Ascendente

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

Compiladores 02 Analise léxica

Gramáticas Livres de Contexto Parte 1

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

Linguagens de Programação Aula 5

Compiladores - Análise Recursiva

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

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

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

Análise Semântica e Representação Intermédia

Linguagens Formais e Autômatos

Conceitos de Linguagens de Programação

Revisão. Fases da dacompilação

Análise Léxica II. Eduardo Ferreira dos Santos. Setembro, Ciência da Computação Centro Universitário de Brasília UniCEUB 1 / 30

Reduce: reduz o que está imediatamente à esquerda do foco usando uma produção

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

CAP. VI ANÁLISE SEMÂNTICA

Folha 4.1 Análise sintática descendente

Compiladores - Análise Recursiva

Compiladores - Especificando Sintaxe

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

Análise Sintática Bottom-up

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

Compiladores. Motivação. Tradutores. Motivação. Tipos de Tradutores. Tipos de Tradutores

Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação

TRABALHO Nº 4: Desenvolvimento de um Interpretador ou de um Compilador

Tratamento dos Erros de Sintaxe. Adriano Maranhão

Linguagens de Domínio Específico

Linguagens Livres de Contexto

Processamento de Linguagens I LESI + LMCC (3 o ano)

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

Árvores (ordenadas) Departamento de Ciência de Computadores da FCUP MC Aula 11 1

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

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

Compiladores. Prof. Bruno Moreno Aula 8 02/05/2011

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

Compiladores. Fabio Mascarenhas

Compiladores - Análise Léxica

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

Analisadores Descendentes Tabulares; Cjs First Follow

FERRAMENTA DE AUXÍLIO AO PROCESSO DE DESENVOLVIMENTO DE SOFTWARE INTEGRANDO TECNOLOGIAS OTIMIZADORAS

Compiladores - Análise Léxica

Compiladores. Introdução

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

Compiladores Ficha de exercícios práticos

Análise Sintática LL(1)

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

Compiladores - JACC. Fabio Mascarenhas

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 Semântica e Representação Intermédia

Geração de Código. Compiladores Cristina C. Vieira. Compiladores 2012/2013

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

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

Linguagens e Programação Gramáticas. Paulo Proença

LINGUAGEM LIVRE DE CONTEXTO GRAMÁTICA LIVRE DE CONTEXTO

Paradigmas de Linguagens de Programação. Descrevendo a Sintaxe e a Semântica

Construção de Compiladores

IV Gramáticas Livres de Contexto

Folha 4.2 Análise sintática ascendente

Apresentação. !! Familiarização com os métodos de construção de compiladores de linguagens e com as técnicas de compilação mais habituais.

Tokens, Padroes e Lexemas

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

V.2 Especificação Sintática de Linguagens de Programação

Linguagens de Domínio Específico

Capítulo 1 Linguagens e processadores

Análise sintática. Prof. Thiago A. S. Pardo. Análise sintática ascendente

Introdução à Programação

Paradigmas de Programação

Compiladores Análise Semântica

INE5421 LINGUAGENS FORMAIS E COMPILADORES

Introdução O problema geral de descrever sintaxe Métodos formas de descrever sintaxe Gramática de atributos Semântica dinâmica

Análise Sintática - Final

Compiladores. Análise Léxica

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

V Teoria de Parsing. Termos Básicos: Parser Analisador Sintático Parsing Analise Sintática Parse Representação da analise efetuada

15/03/2018. Professor Ariel da Silva Dias Aspectos sintáticos e semânticos básicos de linguagens de programação

Estrutura geral de um compilador programa-fonte

LINGUAGENS FORMAIS Definições. Desenvolveram-se na História em função da necessidade dos grupos humanos que as empregavam

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

MAB Análise Sintática. Wednesday, April 4, 12

Identificadores Nome de variáveis, constantes, métodos, etc...

Compilação da linguagem Panda

Função, interação com o compilador Especificação e reconhecimento de tokens Implementação Tratamento de erros. Prof. Thiago A. S.

MAB Análise Sintática. Wednesday, August 31, 11

Transcrição:

Análise Sintática Compiladores Cristina C. Vieira 1

Árvore Sintática Nós internos: símbolos não-terminais Folhas: símbolos terminais Arcos: de símbolos não-terminais do LHS da produção para nós do RHS da produção Captura a derivação da frase (String) 2

Gramática Start EN CLOSE = + - * / = [0-9] [0-9]* EN = ( CLOSE = ) 3

Árvore Sintática para (2-1)+1 Start EN ( 2 4 - CLOSE ) 1 + 1

Ambiguidade numa Gramática Múltiplas derivações (como consequência: múltiplas árvores sintáticas) para a mesma String Derivação e árvore sintática reflecte usualmente a semântica do programa Ambiguidade na gramática reflecte muitas das vezes ambiguidades na semântica da linguagem (considerada indesejável) 5

Exemplo de ambiguidade Duas árvores sintáticas para 2-1+1 Start Start 2 6 - + 1 1 2-1 + 1

Eliminação de ambiguidade Solução: modificar gramática fazer todos os operadores com associação à esquerda Gramática Original Start EN CLOSE Gramática Modificada Start EN CLOSE 7

Árvore sintática para a gramática Apenas uma árvore sintáctica para: 2-1+1 Árvore sintática válida Start Árvore sintática inválida Start - 2 8 + 1 1 2-1 + 1

Violação de prioridade Todos os operadores associam à esquerda Viola prioridade de * sobre + 2-3*4 associa como (2-3)*4 Árvore sintática para 2-3*4 Start * 4 9-2 3

Resolver prioridade Gramática Original = + - * / = [0-9] [0-9]* EN = ( CLOSE = ) Start EN CLOSE 10 Gramática Modificada 1 = + - 2 = * / = [0-9] [0-9]* EN = ( CLOSE = ) Start 1 Term Term EN CLOSE Term Term 2 Term

Modificação nas Árvores Sintáticas Velha Árvore sintática para 2-3*4 Start Nova Árvore sintática para 2-3*4 Start - 2 11 * 3 4 Term 2 1 - Term 3 Term 2 * 4

Ideia Geral Agrupar operadores por níveis de prioridade * e / estão no nível de topo + e estão no nível a seguir Símbolo não-terminal para cada nível de prioridade Term é não-terminal para * e / é não-terminal para + e - Pode-se fazer associatividade dos operadores à esquerda ou à direita em cada nível Generalizar para níveis arbitrários de prioridades 12

TPC Dada a gramática: NUM = [0-9]+ ID = [A-Za-Z][0-9A-Za-z]* + Term Term Term Term Term * Factor Term / Factor Factor Factor Primary ^ Factor Primary Primary -Primary Element Element ( ) NUM ID 13 Quais as árvores sintáticas para: 5-2*3 y^3

Estruturas if-then-else Start Stat Stat IF THEN Stat ELSE Stat Stat IF THEN Stat Stat... 14

Árvore Sintática Considere o enunciado: if e 1 then if e 2 then s 1 else s 2 15

Árvore Sintática IF Stat Stat Duas Árvores Sintáticas e1 IF THEN Stat ELSE Stat Stat e2 s1 s2 IF THEN Stat ELSE e1 IF THEN s1 Stat s2 Qual é a correcta? 16 e2

Leituras alternativas Gramática ambígua Árvore sintática 1 if e 1 if e 2 s 1 else s 2 Árvore sintática 2 if e 1 if e 2 s 1 else s 2 17

Gramática modificada Ideia básica: controlar quando um IF sem ELSE pode ocorrer No nível de topo do enunciado Ou como último numa sequência de enunciados if then else if then... 18

Gramática modificada Goal Stat Stat WithElse Stat LastElse WithElse IF THEN WithElse ELSE WithElse WithElse LastElse IF THEN Stat LastElse IF THEN WithElse ELSE LastElse 19

Analisador Sintático Converte programas numa árvore sintática Pode ser programado do zero! Ou construído automaticamente por um gerador de parsers Aceitam uma gramática como entrada Produzem um analisador sintático como resultado Problema prático A Árvore Sintática para a gramática modificada é complicada Gostaríamos de começar com uma árvore sintática mais intuitiva 20

Solução Sintaxe Abstracta versus Concreta Sintaxe abstracta corresponde ao meio intuitivo de pensar a estrutura do programa Omite detalhes como palavras-chave supérfluas que estão lá para tornar a linguagem não ambígua Sintaxe abstracta pode ser ambígua Sintaxe Concreta corresponde à gramática completa utilizada para analisar sintacticamente a linguagem Os analisadores sintáticos são muitas das vezes escritos para produzirem Árvores Sintáticas Abstractas (ASTs) 21

ASTs (Árvores Sintáticas Abstractas) Começar com uma gramática intuitiva mas ambígua Modificar a gramática para a tornar nãoambígua Árvores sintáticas concretas Menos intuitivas Converter as árvores sintáticas concretas em ASTs Correspondem à gramática intuitiva para a linguagem Mais simples de manipular pelo programa 22

Exemplo Gramática não-ambígua 1 = + - 2 = * / = [0-9] [0-9]* EN = ( CLOSE = ) Start 1 Term Term Term EN CLOSE Term Term 2 Term 23 Gramática intuitiva mas ambígua = * / + - = [0-9] [0-9]* Start

Exemplo 24 1 - Start Árvore sintática concreta para (2-3)*4 Term EN Term 2 Term 2 * CLOSE Term 3 4 Árvore sintática abstracta para (2-3)*4-2 Start * 3 Utiliza gramática intuitiva 4 Elimina terminais supérfluos EN, CLOSE, etc.

Exemplo Árvore sintática abstracta para (2-3)*4 Start AST para (2-3)*4 ainda mais simplificada Start - 2 * 3 4 2 - * 3 4 25

Sumário Níveis da estrutura lexicais e sintáticos Lexicais expressões regulares e autómatos Sintáticos gramáticas Ambiguidades na gramática Gramáticas modificadas Árvores Sintáticas Abstractas (ASTs) Papel generativo versus papel reconhecedor Generativo mais conveniente para especificação Reconhecedor requerido na implementação 26