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

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

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

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

I LINGUAGENS E PROCESSADORES: INTRODUÇÃO 1

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.

CAP. VI ANÁLISE SEMÂNTICA

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

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

Como construir um compilador utilizando ferramentas Java

Compiladores Ambiente de Execução

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

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

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

Análise Sintática. Fabiano Baldo

Compiladores. Geração de Código Objeto

Linguagens de Programação

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

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

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

Linguagens de Domínio Específico

Linguagens de Programação

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

Algoritmos II prof. Daniel Oliveira

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

Introdução a Programação. Tipos Estruturados de Dados

Linguagem Haskell. Universidade Estadual Santa Cruz Conceitos de Linguagens de Programação. Tiago Carneiro 19 Agosto 2013

Compiladores Ciência e Tecnologia da Computação Engenharia Informática e de Computadores

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

Introdução aos Compiladores

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Compiladores. Análise Semântica

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

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

TÉCNICO DE INFORMÁTICA - SISTEMAS

Programação II. Aula 3

Compiladores Ficha de exercícios práticos

ÍNDICE. PREFÁCIO xv. 3 PROCESSOS GERADOS POR PROCEDIMENTOS Recursão Linear Cálculo de potências Cálculo de factoriais 91

A máquina SECD. Pedro Vasconcelos. 20 de Fevereiro de 2014

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Compiladores. Conceitos Básicos

Introdução à Programação

Compiladores Análise Semântica

Compiladores e Computabilidade

Infra- Estrutura de Hardware

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

Programação I A Linguagem C. Prof. Carlos Alberto

Linguagens de Programação Aula 11

Arquitecturas Alternativas. Java Virtual Machine

Linguagem C Introdução. Contexto Histórico Principais diferenças do Java Funções em C Compilar programas em C no Linux

Compiladores Análise Semântica

1. Selecione a Estrutura de Dados que melhor representa os diretórios ou pastas de arquivos do computador.

Compiladores Ambiente de Execução

Paradigmas de Programação

Projeto de Compiladores

William Stallings Arquitetura e Organização de Computadores 8 a Edição

Construção de um compilador para a linguagem Panda

Linguagem C: Ponteiros. Prof. Tiago Alves de Oliveira

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

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

Linguagem C: Ponteiros. Prof. Leonardo Barreto Campos 1

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

Pragmática das Linguagens de

Número: Nome: 1. (3.0 val.) Considere um analisador lexical contendo a sequência ordenada de

Introdução à Geração de Código

Ambiente de tempo de Execução Cap. 7

Ambientes de Execução

Ambientes de Execução

Autômatos e Linguagens

Otimização do código. Compiladores Cristina C. Vieira. Compiladores 2012/2013

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

II.1 Conceitos Fundamentais. Uma delas é programar o =>

Algoritmos e Programação

Linguagem C. André Tavares da Silva.

Trabalho de Linguagens Formais e Compilação

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

Programação Estruturada

Linguagem C: Introdução

Carlos Eduardo Batista. Centro de Informática - UFPB

Tradução Dirigida Pela Sintaxe

Linguagens de Programação

Puca Huachi Vaz Penna

Conversões de Linguagens: Tradução, Montagem, Compilação, Ligação e Interpretação

Lic. Engenharia de Sistemas e Informática

21 Variáveis estruturadas

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

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 11 Estruturas (Structs) Structs

Métodos Computacionais

Programação Funcional

LINGUAGEM C: PONTEIROS

MCTA028 Programação Estruturada Aula 01: - Introdução à linguagem C - Teste de avaliação

Ambiente de desenvolvimento

Universidade Federal do Espírito Santo. Programação II. CT IX - Sala 206 Departamento de Informática Centro Tecnológico

Tipos de Dados Simples (Continuação)

Conceitos de Linguagens de Programação

Nome: Número: Computação e Programação Mestrado Integrado em Engenharia Civil Licenciatura Bolonha em Engenharia Geológica e de Minas

Estruturas de Dados. Módulo 2 Expressões. 9/8/2005 (c) Marco A. Casanova - PUC-Rio 1

Fundamentos da Programação

Compiladores - Análise SLR

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

Linguagens de Programação. Nomes, Escopos e Vinculações (Bindings) Carlos Bazilio

Transcrição:

Análise Semântica e Representação Intermédia Compiladores Cristina C. Vieira 1

Descritores O que contêm? Informação utilizada para geração de código e análise semântica Descritores locais - nome, tipo, offset na pilha Descritores de funções assinatura (tipo do valor retornado, e parâmetros) Referência à tabela de símbolos local Referência ao código para a função 2

Parâmetros, Local, e Descritores de Tipos Parâmetros e Local referem descritores de tipo Descritor de tipo base: int, boolean, etc. Descritor de tipo de array, que contém referência ao descritor de tipo para os elementos do array Descritor de estrutura, etc. 3

Exemplo: Tabela de Símbolos para Tipos int Descritor de int int [] Descritor de array boolean Descritor de boolean boolean [] Descritor de array vector [] Descritor de array Descritor de estrutura para vector 4

Descritores de funções Contêm referência para o código da função Contêm referência para a tabela de símbolos local (para as variáveis locais da função) Na hierarquia de tabelas de símbolos, a TS para os parâmetros é mãe da TS para as variáveis locais 5

Descritor de função para add Descritor de função para add TS para parâmetros N x v TS de variáveis locais i Descritor de parâmetro Descritor de parâmetro Descritor de parâmetro Descritor de variável local Código para a função add 6

O que é uma árvore sintáctica? Árvore sintáctica guarda resultados da análise sintáctica Nós externos são terminais/tokens Nós internos são não-terminais 7

Árvores abstractas versus concretas Relembrar modificações à gramática Factorização à esquerda, eliminação de ambiguidade, precedências dos operadores Modificações levam a uma árvore que não reflecte uma interpretação do programa intuitiva e clara Pode ser mais conveniente trabalhar com a AST (pode ser vista como a árvore sintáctica representativa da gramática sem as modificações modificações) 8

Construções alternativas para Representações Intermédias Construir a árvore sintáctica concreta, traduzir para AST, traduzir para representação intermédia Construir a árvore sintáctica abstracta, traduzir para representação intermédia Incluir a construção da representação intermédia durante a análise sintáctica Elimina a construção intermédia da árvore sintáctica melhora performance do compilador Menos código a escrever 9

Tabela de Símbolos Dada uma árvore sintáctica (abstracta ou concreta) Atravessar recursivamente a árvore Construir a tabela de símbolos enquanto a travessia da árvore decorre 10

Escopos aninhados Várias formas de aninhamento TS das funções aninhadas na TS dos globais TS de locais aninhada dentro da TS da função Aninhamento resolve ambiguidade em possíveis conflitos Mesmo nome utilizado para uma variável global e uma variável local Nome refere uma variável local dentro da função 11

Escopos aninhados de código TS podem ter profundidade arbitrária com base no aninhamento do código: boolean x; int foo(int x) { double x = 5.0; { float x = 10.0; { int x = 1;... x...} } 12... x... }... x... Nota: Conflitos de nomes com aninhamento podem reflectir erros no programa. Os compiladores geram mensagens de aviso em presença de conflitos deste tipo.

Representação de código em nível alto Ideia básica Movimento em direcção à linguagem assembly Preservar a estrutura de nível alto Formato de objectos Fluxo de controlo estruturado Distinção entre parâmetros, variáveis locais, e campos Abstracção de nível alto da linguagem assembly Nós load e store Acesso a armazenamento local abstracto, parâmetros e campos, e não posições de memória directamente 13

Representação de expressões Árvores de expressões representam as expressões Nós internos operações como: +, -, etc. Folhas Nós Load representam acesso a variáveis Nós Load ldl para acesso a variáveis locais descritor de locais ldp para acessos a parâmetros descritor de parâmetros lda para acesso a arrays Árvore da expressão para o valor Árvore de expressão para o índice Para acesso a atributos de uma classe ou campos de estruturas... 14

Exemplo x e y são variáveis locais x*x + y*y + * * ldl ldl ldl ldl Descritor de local para x Na tabela de símbolos locais Descritor de local para x Na tabela de símbolos locais 15

Exemplo v é uma array passado como argumento da função add i é uma variável local x é um argumento da função v[i]+x 16 ldp Descritor de parâmetro para v na tabela de símbolos de parâmetros da função add lda ldl + Descritor local para i na tabela de símbolos locais da função add ldp Descritor de parâmetro para x na tabela de símbolos de parâmetros da função add

Representação de enunciados de atribuição Nós Store stl para stores em variáveis locais Descritor local Árvore da expressão para o valor a guardar sta para stores em elementos de arrays Árvore da expressão para o array Árvore da expressão para o índice Árvore da expressão para o valor a guardar Para stores em atributos de classes ou campos de estruturas... 17

Exemplo sta v[i]=v[i]+x; ldp ldl + lda ldp Descritor do parâmetro para v na tabela de símbolos dos parâmetros da função add 18 ldp ldl Descritor local para i na tabela de símbolos locais da função add Descritor do parâmetro para x na tabela de símbolos dos parâmetros da função add

Orientação Representações intermédias Movimento em direcção à linguagem máquina Suporte para análises do programa e acções de transformação IR (intermediate representation) de nível alto Preserva estruturas de objectos e de arrays Tabelas de símbolos Descritores 19