Análise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo

Documentos relacionados
Análise semântica. Função, interação com o compilador Tabela de símbolos Análise semântica. Prof. Thiago A. S. Pardo

FACULDADE LEÃO SAMPAIO

Análise semântica (continuação)

Compiladores Aula 12. Celso Olivete Júnior.

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

Análise Semântica e Tratamento de Erros Dependentes de Contexto

Análise Semântica e Tratamento de Erros Dependentes de Contexto

INE5421 LINGUAGENS FORMAIS E COMPILADORES

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

Projeto de Compiladores

Tradução Dirigida Pela Sintaxe

Compiladores. Prof. Bruno Moreno

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

Compiladores. Análise Semântica

Paradigmas de Programação

Introdução à Programação

Introdução à Programação Aula 03. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

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

Noções de compilação

CP Compiladores I Prof. Msc.. Carlos de Salles

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

Compiladores Análise Semântica

Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores

Noções de compilação

CAP. VI ANÁLISE SEMÂNTICA

Estrutura geral de um compilador programa-fonte

ao paradigma imperativo

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

Prof. Adriano Maranhão COMPILADORES

INE5622 INTRODUÇÃO A COMPILADORES

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

Linguagens de Programação Aula 3

Conclusões. Baseado no Capítulo 9 de Programming Language Processors in Java, de Watt & Brown

Lembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)

FOLHA DE PROVA. Descreva e ilustre, com um exemplo, o algoritmo de minimização de um autômato.

Conceitos de Linguagens de Programação

Compiladores Análise de Tipos

Linguagem de Programação e Compiladores

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang

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

Especificações Gerais do Compilador e Definição de FRANKIE

Compiladores Análise de Tipos

Compiladores. Análise Semântica

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.

Compiladores Análise Semântica

Compiladores I Prof. Ricardo Santos (cap 1)

Paradigmas de Linguagem de. Programação Profª. Roberta B Tôrres de programação referem-se a:

Compiladores Análise Semântica

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

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

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

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

Trabalho de Linguagens Formais e Compilação

Introdução Uma linguagem de programação apoiada em um paradigma imperativo apresenta algum grau de dificuldade nos aspectos relativos ao contexto;

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Introdução parte II. Compiladores. Mariella Berger

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

Linguagens de Programação Conceitos e Técnicas. Amarrações

Conceitos de Linguagens de Programação

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

Linguagens de Programação

Análise Semântica: Verificação de Tipos

Análise Semântica e Tratamento de Erros Dependentes de Contexto

Compiladores. Introdução

SEMÂNTICA. Rogério Rocha. rode = program simples = var x : int := 3 in x := x + 5 end.

Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Síntese. Prof. Geovane Griesang

Compiladores - Especificando Sintaxe

Compiladores Análise de Tipos

Análise Sintática LL(1)

Como construir um compilador utilizando ferramentas Java

Compiladores. Fabio Mascarenhas

Conceitos de Linguagens de Programação

Compiladores 02 Analise léxica

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

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

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

EA876 - Introdução a Software de Sistema

Compiladores. Introdução à Compiladores

Ambientes de Execução

Ambientes de Execução

Universidade Federal do ABC Rua Santa Adélia, Bairro Bangu - Santo André - SP - Brasil CEP Telefone/Fax:

Geração e Otimização de Código

PLANO DE UNIDADE DIDÁTICA- PUD

MAB Análise Semântica. Monday, October 10, 11

Sistemas de Tipos. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

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

Capítulo 6: Linguagens de Programação

Compiladores Ficha de exercícios práticos

As fases de um compilador

Introdução aos Compiladores

Programação de Sistemas (Sistemas de Programação) Semana 10, Aula 17

DESENVOLVIMENTO DO COMPILADOR PARA A LINGUAGEM SIMPLE

Compiladores. Conceitos Básicos

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Introdução as Máquinas de Autômatos

As fases de um compilador

Paradigmas de Linguagem de Programação. Aspectos Básicos

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

Transcrição:

Análise semântica Função, interação com o compilador Tabela de símbolos Análise semântica Prof. Thiago A. S. Pardo 1 Estrutura geral de um compilador programa-fonte analisador léxico Tabela de símbolos analisador sintático Tabela de palavras e símbolos reservados analisador semântico gerador de código intermediário otimizador de código Manipulação de erros gerador de código programa-alvo dados de entrada saída 2 1

Análise semântica Função: verificação do uso adequado Análise contextual: declarações prévias de variáveis, procedimentos, etc. Checagem de tipos Coisas que vão além do domínio da sintaxe Sensitividade ao contexto! Tipos de análise semântica Estática, em tempo de compilação: linguagens tipadas, que exigem declarações C, Pascal, etc. Dinâmica, em tempo de execução: linguagens em que as variáveis são determinadas pelo contexto de uso LISP, PROLOG 3 Análise semântica Devido às variações de especificação semântica das linguagens de programação, a análise semântica Não é tão bem formalizada Não existe um método ou modelo padrão de representação do conhecimento Não existe um mapeamento claro da representação para o algoritmo correspondente Análise é artesanal, dependente da linguagem de programação 4 2

Análise semântica Semântica dirigida pela sintaxe Conteúdo semântico fortemente relacionado à sintaxe do programa Maioria das linguagens de programação modernas Em geral, a semântica de uma linguagem de programação não é especificada O projetista do compilador tem que analisar e extrair a semântica 5 Formalização e implementação Assim como a sintaxe, a semântica precisa ser formalizada/descrita antes de ser implementada Sintaxe: por exemplo, BNF procedimentos recursivos é um formalismo de descrição da semântica comumente utilizado 6 3

Método usualmente utilizado Conjunto de atributos e regras semânticas para uma gramática Cada regra sintática/gramatical pode ter regras semânticas associadas Atributos associados aos símbolos gramaticais Por exemplo, valor e escopo x.valor, x.escopo Regras semânticas que manipulam os atributos Por exemplo, regra para somar os atributos valores de duas variáveis x:=a+b, cuja regra é x.valor:=a.valor+b.valor 7 Atributos podem ser fixados durante a compilação ou a execução de um programa A associação de um valor a um atributo é chamada amarração (ou vinculação) do atributo Acontece em tempo de amarração Em tempo de compilação, tem-se a amarração estática Em tempo de execução, tem-se a amarração dinâmica 8 4

Exemplo de gramática de atributos exp exp + termo exp - termo termo termo termo * fator termo div fator fator fator ( exp ) num Regras gramaticais exp 1 exp 2 +termo exp 1 exp 2 -termo exp termo termo 1 termo 2 *fator termo 1 termo 2 div fator termo fator fator (exp) fator num Regras semânticas exp 1.val=exp 2.val+termo.val exp 1.val=exp 2.val-termo.val exp.val=termo.val termo 1.val=termo 2.val*fator.val termo 1.val=termo 2.val/fator.val termo.val=fator.val fator.val=exp.val fator.val=num.val 9 Exercício: escreva a gramática de atributos para a gramática abaixo número número 0 1 2 3 4 5 6 7 8 9 10 5

Exercício: escreva a gramática de atributos para a gramática abaixo número número 0 1 2 3 4 5 6 7 8 9 Regras gramaticais Regras semânticas número 1 número 2 número 1.val=número 2.val*10 +.val número número.val=.val 0.val=0 1.val=1...... 9.val=9 11 Árvore sintática com visualização da computação de atributos número (val=34*10+5=345) número (val=3*10+4=34) (val=5) número (val=3) (val=4) 5 (val=3) 4 3 12 6

Exercício: escreva a gramática de atributos para a gramática abaixo decl tipo var-lista tipo int float var-lista id, var-lista id 13 Exercício: escreva a gramática de atributos para a gramática abaixo decl tipo var-lista tipo int float var-lista id, var-lista id Regras gramaticais decl tipo var-lista tipo int tipo float var-lista 1 id, var-lista 2 var-lista id Regras semânticas var-lista.tipo_dado = tipo.tipo_dado tipo.tipo_dado = integer tipo.tipo_dado = real id.tipo_dado = var-lista 1.tipo_dado var-lista 2.tipo_dado = var-lista 1.tipo_dado id.tipo_dado=var-lista.tipo_dado 14 7

Exercício: construa a árvore sintática com cálculo dos atributos para a cadeia float x, y decl tipo var-lista tipo int float var-lista id, var-lista id Regras gramaticais decl tipo var-lista tipo int tipo float var-lista 1 id, var-lista 2 var-lista id Regras semânticas var-lista.tipo_dado = tipo.tipo_dado tipo.tipo_dado = integer tipo.tipo_dado = real id.tipo_dado = var-lista 1.tipo_dado var-lista 2.tipo_dado = var-lista 1.tipo_dado id.tipo_dado=var-lista.tipo_dado 15 Exercício: construa a árvore sintática com cálculo dos atributos para a cadeia float x, y decl tipo (tipo_dado=real) var-lista (tipo_dado=real) float id (tipo_dado=real), var-lista (tipo_dado=real) id (tipo_dado=real) 16 8

Atenção Nem todo símbolo gramatical tem atributos Pode haver manipulação de mais de um atributo em uma mesma regra e para um mesmo símbolo Pode não haver regras semânticas para uma regra sintática Em geral, a gramática de atributos de uma gramática pode especificar Comportamento semântico das operações Checagem de tipos Manipulação de erros Tradução do programa 17 Gramática para geração de números binários ou decimais, indicados pelos sufixos b ou d, respectivamente número num sufixo sufixo b d num num 0 1 2 3 4 5 6 7 8 9 18 9

Escreva a gramática de atributos número num sufixo sufixo b d num num 0 1 2 3 4 5 6 7 8 9 19 Regras gramaticais número num sufixo número.val = num.val num.base = sufixo.base sufixo b sufixo.base = 2 sufixo d sufixo.base = 10 Regras semânticas num 1 num 2 num 1.val = if.val = erro or num 2.val=erro then erro else num 2.val * num 1.base +.val num 2.base = num 1.base.base = num 1.base num num.val =.val.base = num.base 0.val = 0 1.val = 1 2.val = if.base=2 then erro else 2...... 20 10

Gramática para geração de números binários ou decimais, indicados pelos sufixos b ou d, respectivamente número num sufixo sufixo b d num num 0 1 2 3 4 5 6 7 8 9 A sintaxe permitiria o número 02b, mas a semântica não 21 Exercício: construa a árvore sintática com cálculo dos atributos para a cadeia 10b 22 11

número (val=2) 10b num (val=2) sufixo num (val=1) (val=0) b (val=1) 0 1 23 Exercício: construa a árvore sintática com cálculo dos atributos para a cadeia 02b 24 12

Atenção Alguns valores sobem (val) Outros descem (base) num (val=erro) número (val=erro) sufixo num (val=0) (val=erro) b Como calcular os atributos de forma consistente? (val=0) 0 2 25 Cômputo de atributos Com base na árvore sintática explícita Grafos de dependência Compilador de mais de uma passagem Ad hoc Análise semântica comandada pela análise sintática Compilador de uma única passagem 26 13