Como construir um compilador utilizando ferramentas Java
|
|
- Gabriel Henrique Melgaço Espírito Santo
- 6 Há anos
- Visualizações:
Transcrição
1 Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 11 Tabela de Símbolos Prof. Márcio Delamaro
2 Como construir um compilador utilizando ferramentas Java p. 2/3 Para que serve Guardar informação para cada nome que aparece no programa class firstclass extends secondclass {... } firstclass está sendo declarada como uma classe. firstclass y;
3 Como construir um compilador utilizando ferramentas Java p. 3/3 Para que serve int a, b, c; c = a * b; c = "abc"; firstclass y; c = y.atributo1;
4 Como construir um compilador utilizando ferramentas Java p. 4/3 O que armazenar? classes: nome, qual é a superclasse, quais são as variáveis dessa classe, quais são as classes aninhadas, quais são os métodos e construtores;
5 Como construir um compilador utilizando ferramentas Java p. 4/3 O que armazenar? classes: nome, qual é a superclasse, quais são as variáveis dessa classe, quais são as classes aninhadas, quais são os métodos e construtores; variáveis: nome, tipo, dimensão, se são locais ou não;
6 Como construir um compilador utilizando ferramentas Java p. 4/3 O que armazenar? classes: nome, qual é a superclasse, quais são as variáveis dessa classe, quais são as classes aninhadas, quais são os métodos e construtores; variáveis: nome, tipo, dimensão, se são locais ou não; métodos: nome, parâmetros, variáveis locais, tipo de retorno.
7 Como construir um compilador utilizando ferramentas Java p. 5/3 Como a tabela é usada: Ao declarar classe class firstclass extends secondclass... firstclass já foi declarada?
8 Como construir um compilador utilizando ferramentas Java p. 5/3 Como a tabela é usada: Ao declarar classe class firstclass extends secondclass... firstclass já foi declarada? secondclass é uma classe válida?
9 Como construir um compilador utilizando ferramentas Java p. 5/3 Como a tabela é usada: Ao declarar classe class firstclass extends secondclass... firstclass já foi declarada? secondclass é uma classe válida? secondclass pode ser usada como superclasse?
10 Como construir um compilador utilizando ferramentas Java p. 6/3 Ao declarar variável firstclass y; firstclass é um tipo ou classe válido?
11 Como construir um compilador utilizando ferramentas Java p. 6/3 Ao declarar variável firstclass y; firstclass é um tipo ou classe válido? y pode ser declarada nesse ponto?
12 Como construir um compilador utilizando ferramentas Java p. 7/3 Ao declarar método fisrtclass m(int k, secondclass s) firstclass é um tipo ou classe válido?
13 Como construir um compilador utilizando ferramentas Java p. 7/3 Ao declarar método fisrtclass m(int k, secondclass s) firstclass é um tipo ou classe válido? m pode ser declarado nesse ponto?
14 Como construir um compilador utilizando ferramentas Java p. 7/3 Ao declarar método fisrtclass m(int k, secondclass s) firstclass é um tipo ou classe válido? m pode ser declarado nesse ponto? seus parâmetros são legais?
15 Como construir um compilador utilizando ferramentas Java p. 8/3 Comandos x[i+9] = y.m(10, b) x é um array?
16 Como construir um compilador utilizando ferramentas Java p. 8/3 Comandos x[i+9] = y.m(10, b) x é um array? índice é do tipo correto?
17 Como construir um compilador utilizando ferramentas Java p. 8/3 Comandos x[i+9] = y.m(10, b) x é um array? índice é do tipo correto? classe de y possui o método m?
18 Como construir um compilador utilizando ferramentas Java p. 8/3 Comandos x[i+9] = y.m(10, b) x é um array? índice é do tipo correto? classe de y possui o método m? argumentos combinam com parâmetros formais?
19 Como construir um compilador utilizando ferramentas Java p. 8/3 Comandos x[i+9] = y.m(10, b) x é um array? índice é do tipo correto? classe de y possui o método m? argumentos combinam com parâmetros formais? dois lados da atribuição possuem tipos compatíveis?
20 Como construir um compilador utilizando ferramentas Java p. 9/3 Controle de escopo class classa { class classb { } int i; string m(classa x) { if ( x == null ) { int j; } } } class classc { }
21 Como construir um compilador utilizando ferramentas Java p. 10/3 Controle de escopo A classe classa pode ser utilizada em qualquer ponto dentro de si própria, incluindo em classb e dentro de classc.
22 Como construir um compilador utilizando ferramentas Java p. 10/3 Controle de escopo A classe classa pode ser utilizada em qualquer ponto dentro de si própria, incluindo em classb e dentro de classc. A classe classb não pode ser utilizada dentro de classc.
23 Como construir um compilador utilizando ferramentas Java p. 10/3 Controle de escopo A classe classa pode ser utilizada em qualquer ponto dentro de si própria, incluindo em classb e dentro de classc. A classe classb não pode ser utilizada dentro de classc. A variável i pode ser utilizada dentro de classa (excluindo classb), mas não dentro de classc.
24 Como construir um compilador utilizando ferramentas Java p. 10/3 Controle de escopo A classe classa pode ser utilizada em qualquer ponto dentro de si própria, incluindo em classb e dentro de classc. A classe classb não pode ser utilizada dentro de classc. A variável i pode ser utilizada dentro de classa (excluindo classb), mas não dentro de classc. A variável x é local a m.
25 Como construir um compilador utilizando ferramentas Java p. 10/3 Controle de escopo A classe classa pode ser utilizada em qualquer ponto dentro de si própria, incluindo em classb e dentro de classc. A classe classb não pode ser utilizada dentro de classc. A variável i pode ser utilizada dentro de classa (excluindo classb), mas não dentro de classc. A variável x é local a m. j é local ao comando if.
26 Como construir um compilador utilizando ferramentas Java p. 11/3 A tabela para X ++ class firstclass { } class secondclass { } class thirdclass { } firstclass secondclass thirdclass
27 Como construir um compilador utilizando ferramentas Java p. 12/3 A tabela de símbolose a árvore sintática Assim como no programa que exibe a árvore sintática, temos um programa que analisa a árvore e vai montando a tabela de símbolos. Esse programa, ao analisar o nó número 2, deve inserir na tabela o identificador firstclass, ao analisar o nó 6, deve incluir secondclass e, ao analisar o nó 10, deve inserir thirdclass. (1)ListNode (2)ClassDeclNode (5)ListNode (3)Token: firstclass (4)ClassBodyNode (6)ClassDeclNode (9)ListNode (7)Token: secondclass (8)ClassBodyNode (10)ClassDeclNode (11)Token: thirdclass (12)ClassBodyNode
28 Como construir um compilador utilizando ferramentas Java p. 13/3 O conteúdo de uma classe Cada entrada de Symtable deve descrever uma classe.
29 Como construir um compilador utilizando ferramentas Java p. 13/3 O conteúdo de uma classe Cada entrada de Symtable deve descrever uma classe. Nome da classe, nome da superclasse.
30 Como construir um compilador utilizando ferramentas Java p. 13/3 O conteúdo de uma classe Cada entrada de Symtable deve descrever uma classe. Nome da classe, nome da superclasse. Variáveis, construtores, métodos e classes aninhadas.
31 Como construir um compilador utilizando ferramentas Java p. 13/3 O conteúdo de uma classe Cada entrada de Symtable deve descrever uma classe. Nome da classe, nome da superclasse. Variáveis, construtores, métodos e classes aninhadas. A cada entrada associa-se uma outra Symtable
32 Como construir um compilador utilizando ferramentas Java p. 14/3 Por exemplo class secondclass { class sec2 { class sec3 { } } int secvar1, secvar2[]; firstclass secvar3; thirdclass [][] secmeth1(); }
33 Como construir um compilador utilizando ferramentas Java p. 15/3 Resulta na tabela 0 firstclass Symtable para firstclass sec2 secvar1 sec3 Symtable para sec3 1 2 secondclass thirdclass Symtable secvar2 secvar3 secmeth1 para thirdclass
34 Como construir um compilador utilizando ferramentas Java p. 15/3 Resulta na tabela 0 firstclass Symtable para firstclass sec2 secvar1 sec3 Symtable para sec3 1 2 secondclass thirdclass Symtable secvar2 secvar3 secmeth1 para thirdclass Escopo: variável em sec2 pode usar sec2, sec3, secondclass, firstclass ou thirdclass; não pode usar classe aninhada a firstclass. secondclass não pode utilizar sec3.
35 Como construir um compilador utilizando ferramentas Java p. 16/3 Símbolo locais O comportamento e escopo de classes, métodos, construtores e variáveis de classe são, de certa forma, estáticos.
36 Como construir um compilador utilizando ferramentas Java p. 16/3 Símbolo locais O comportamento e escopo de classes, métodos, construtores e variáveis de classe são, de certa forma, estáticos. As variáveis locais dos métodos têm comportamento volátil.
37 Como construir um compilador utilizando ferramentas Java p. 16/3 Símbolo locais O comportamento e escopo de classes, métodos, construtores e variáveis de classe são, de certa forma, estáticos. As variáveis locais dos métodos têm comportamento volátil. Só podem ser usadas dentro do método em que foram definidas ou, ainda, dentro do bloco onde foram definidas.
38 Como construir um compilador utilizando ferramentas Java p. 16/3 Símbolo locais O comportamento e escopo de classes, métodos, construtores e variáveis de classe são, de certa forma, estáticos. As variáveis locais dos métodos têm comportamento volátil. Só podem ser usadas dentro do método em que foram definidas ou, ainda, dentro do bloco onde foram definidas. Ao iniciar a análise de um método ou um bloco, o analisador deve marcar quais as variáveis que foram definidas até aquele ponto.
39 Como construir um compilador utilizando ferramentas Java p. 16/3 Símbolo locais O comportamento e escopo de classes, métodos, construtores e variáveis de classe são, de certa forma, estáticos. As variáveis locais dos métodos têm comportamento volátil. Só podem ser usadas dentro do método em que foram definidas ou, ainda, dentro do bloco onde foram definidas. Ao iniciar a análise de um método ou um bloco, o analisador deve marcar quais as variáveis que foram definidas até aquele ponto. Ao terminar a análise desse bloco o analisador deve tirar da tabela aquelas variáveis declaradas dentro do bloco.
40 Como construir um compilador utilizando ferramentas Java p. 17/3 Por exemplo thirdclass[][] secmeth1() { int i,j; { string s; } } MethodDeclNode Token: thirdclass 2 MethodBodyNode BlockNode ListNode VarDeclNode ListNode Token: int ListNode BlockNode VarNode ListNode ListNode Token: i 0 VarNode VarDeclNode Token: j 0 Token: string ListNode VarNode Token: s 0
41 Como construir um compilador utilizando ferramentas Java p. 18/3 Por exemplo thirdclass[][] secmeth1() { int i,j; { string s; } } i = j + s; MethodDeclNode Token: thirdclass 2 MethodBodyNode BlockNode ListNode VarDeclNode ListNode Token: int ListNode BlockNode ListNode VarNode ListNode ListNode AtribNode Token: i 0 VarNode VarDeclNode Token: j 0 Token: string ListNode VarNode Token: s 0
42 Como construir um compilador utilizando ferramentas Java p. 19/3 Gera a tabela sec2 sec2 secvar1 secvar1 secvar2 secvar2 secvar3 (a) secvar3 (b) secmeth1 secmeth1 i j sec2 secvar1 secvar2 secvar3 (c) secmeth1 i j s
43 Como construir um compilador utilizando ferramentas Java p. 20/3 Observações cada entrada da Symtable pode representar tipos diferentes de identificadores.
44 Como construir um compilador utilizando ferramentas Java p. 20/3 Observações cada entrada da Symtable pode representar tipos diferentes de identificadores. Descritor de uma classe, de um construtor, de um método ou de uma variável.
45 Como construir um compilador utilizando ferramentas Java p. 20/3 Observações cada entrada da Symtable pode representar tipos diferentes de identificadores. Descritor de uma classe, de um construtor, de um método ou de uma variável. Para cada um desses descritores, o tipo de informação que se armazena é diferente.
46 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable
47 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable Lista ligada
48 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable Lista ligada Política de pilha
49 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable Lista ligada Política de pilha Variáveis: top, scptr, levelup
50 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable Lista ligada Política de pilha Variáveis: top, scptr, levelup Dois construtores
51 Como construir um compilador utilizando ferramentas Java p. 21/3 Implementação: Symtable Pacote symtable Lista ligada Política de pilha Variáveis: top, scptr, levelup Dois construtores Add, beginscope, endscope
52 Como construir um compilador utilizando ferramentas Java p. 22/3 Variáveis top aponta para a cabeça da lista. scptr é um número inteiro que controla o aninhamento de blocos. Inicialmente seu valor é 0 e a cada novo bloco esse valor é incrementado. Cada variável guarda o valor de scptr quando inserida na tabela, assim é possível saber a qual bloco ela pertence. levelup aponta para uma entrada em outra Symtable. Ela possibilita identificar a qual classe essa tabela pertence.
53 Como construir um compilador utilizando ferramentas Java p. 23/3 Visão Symtable (1) EntryTable EntryTable (3) (2) Symtable (1) EntryTable EntryTable EntryTable
54 Como construir um compilador utilizando ferramentas Java p. 24/3 Construtores Um cria uma tabela vazia. Outro, cria uma tabela vazia, que aponta para a entrada que a possui. public Symtable(EntryClass up) { top = null; scptr = 0; levelup = up; }
55 Como construir um compilador utilizando ferramentas Java p. 25/3 EntryTable Todo elementa da Symtable é do tipo EntryTable. É uma classe abstrata.
56 Como construir um compilador utilizando ferramentas Java p. 25/3 EntryTable Todo elementa da Symtable é do tipo EntryTable. É uma classe abstrata. package symtable; // classe geral para as possíveis entradas na tabela de símbolo abstract public class EntryTable { public String name; // nome do símbolo (var., método ou classe) public EntryTable next; // apontador para próximo dentro da tabela public int scope; // número do aninhamento corrente public Symtable mytable; // aponta para a tabela da qual ela é parte }
57 Como construir um compilador utilizando ferramentas Java p. 26/3 EntryClass public class EntryClass extends EntryTable { public Symtable nested; // tabela p/ declaração de elementos aninhados public EntryClass parent; // entrada correspondente à superclasse public EntryClass(String n, Symtable t) { name = n; // nome da classe declarada nested = new Symtable(this); // tabela onde inserir variáveis, // métodos ou classes parent = null; // sua superclasse } }
58 Como construir um compilador utilizando ferramentas Java p. 27/3 Entryvar public class EntryVar extends EntryTable { public EntryTable type; // apontador para o tipo da variável public int dim; // número de dimensões da variável public int localcount; // numeração seqüencial para locais // cria uma entrada para var. de classe public EntryVar(String n, EntryTable p, int d) { name = n; // nome da variável type = p; // apontador para a classe dim = d; // número de dimensões localcount = -1; // número seqüencial é sempre -1 (não local) } // cria uma entrada para var.local public EntryVar(String n, EntryTable p, int d, int k) { this(n, p, d); localcount = k; // inclui também o número seqüencial } }
59 Como construir um compilador utilizando ferramentas Java p. 28/3 EntryMethod public class EntryMethod extends EntryTable { public EntryTable type; // tipo de retorno do método public int dim; // número de dimensões do retorno public EntryRec param; // tipo dos parâmetros public int totallocals; // número de variáveis locais public int totalstack; // tamanho da pilha necessária public boolean fake; // true, se é um falso construtor public boolean hassuper; // true, se método possui chamada super // cria elemento para inserir na tabela public EntryMethod(String n, EntryTable p, int d, EntryRec r) { name = n; type = p; dim = d; param = r; totallocals = 0; totalstack = 0; fake = false; hassuper = false; }
60 Como construir um compilador utilizando ferramentas Java p. 29/3 EntryMethod public EntryMethod(String n, EntryTable p, boolean b) { name = n; type = p; dim = 0; param = null; totallocals = 0; totalstack = 0; fake = b; hassuper = false; } }
61 Como construir um compilador utilizando ferramentas Java p. 30/3 EntryRec public class EntryRec extends EntryTable { public EntryTable type; // tipo de um objeto public int dim; // dimensão public EntryRec next; // apontador para o resto da lista public int cont; // número de elementos a partir daquele elemento // cria elemento public EntryRec(EntryTable p, int d, int c) { type = p; cont = c; dim = d; next = null; } // cria elemento e põe no início da lista public EntryRec(EntryTable p, int d, int c, EntryRec t) { this(p, d, c); next = t; } }
62 Como construir um compilador utilizando ferramentas Java p. 31/3 EntrySimple package symtable; // entrada utilizada para declarar os tipos // básicos da linguagem public class EntrySimple extends EntryTable { public EntrySimple(String n) { name = n; } }
63 Como construir um compilador utilizando ferramentas Java p. 32/3 Outros métodos Essas classes possuem diversos métodos que auxiliam na manipulação da tabela de símbolos. Em particular, métodos de busca de símbolos. Eles serão estudados durante a análise semântica. Fica registrado que eles respeitam a estrutura do programa, implementando a política de escopos definida pela linguagem X ++.
Como construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/8 Como construir um compilador utilizando ferramentas Java Aula 12 Análise Semântica Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 10 Exibição da árvore sintática Prof. Márcio Delamaro delamaro@icmc.usp.br
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/4 Como construir um compilador utilizando ferramentas Java Aula 9 Construção da árvore sintática Prof. Márcio Delamaro delamaro@icmc.usp.br
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 3 A linguagem X ++ Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir
Leia maisPalavras Reservadas da Linguagem Java
Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java: Categorias Tipos de dados primitivos Literais Pseudo-variáveis Desvio e controle de fluxo Pacotes Exceções Modificadores de
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 1 - Introdução Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir um
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp Árvores Sintáticas Abstratas (ASTs) A árvore de análise sintática tem muita informação redundante Separadores,
Leia maisCAP. VI ANÁLISE SEMÂNTICA
CAP. VI ANÁLISE SEMÂNTICA VI.1 Introdução Semântica SIGNIFICADO, SENTIDO LÓGICO, COERÊNCIA,... Diferença entre SINTAXE e SEMÂNTICA Sintaxe : descreve as estruturas de uma linguagem; Semântica : descreve
Leia maisAnálise Semântica e Tratamento de Erros Dependentes de Contexto
Análise Semântica e Tratamento de Erros Dependentes de Contexto O componente Semântico de uma LP Tarefas da Análise Semântica Implementação da Tabelas de Símbolos Ações Semânticas em Compiladores Dirigidos
Leia maisAnálise Semântica e Representação Intermédia
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,
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-7 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando
Leia maisClasses e Objetos. Sintaxe de classe em Java
Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro
6 Exceções Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável O controlo da execução do programa
Leia maisPró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica
FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: CONSTRUÇÃO DE COMPILADORES CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2017/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS
Leia maisUniversidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores
Universidade Federal de Goiás Bacharelado em Ciências da Computacão Compiladores 2013-2 Compilador para a Linguagem Cafezinho Especificação dos trabalhos: T2 (Geração da Representação Intermediária e Análise
Leia maisLinguagem Algorítmica OO. Linguagem Algorítmica
UFSC-CTC-INE INE5384 - Estruturas de Dados Linguagem Algorítmica OO Prof. Ronaldo S. Mello 2002/2 Linguagem Algorítmica Independente de linguagem de programação OO Utilizada para: Exemplificar os algoritmos
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro
Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável O controlo da execução do programa é transferido
Leia maisParadigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura
Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação
Leia maisAnálise Semântica: Verificação de Tipos
Análise Semântica: Verificação de Tipos Introdução Verifica se as construções sintaticamente corretas possuem significado lógico dentro da linguagem Verifica a consistência da declaração e uso dos identificadores
Leia maisQuando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção.
6 Exceções Quando um programa viola as restrições semânticas da linguagem, a JVM assinala um erro ao programa, sob a forma de exceção. Uma exceção é um erro recuperável - O controlo da execução do programa
Leia maisTipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Leia maisTipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Leia maisJava First-Tier: Aplicações. Herança: Simples Múltipla. Orientação a Objetos em Java (III) Problemas de Herança Múltipla.
Java First-Tier: plicações Orientação a Objetos em Java (III) Grupo de Linguagens de Programação Departamento de Informática PUC-Rio Herança: Simples Múltipla O tipo de herança que usamos até agora é chamado
Leia maisCompiladores - JACC. Fabio Mascarenhas
Compiladores - JACC Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JACC Gerador de analisadores sintáticos LALR que gera código Java Sintaxe baseada na sintaxe do YACC (e de muitos outros
Leia maisCompiladores. Bruno Lopes. Bruno Lopes Compiladores 1 / 31. Instituto de C
ompiladores Análise Léxica Bruno Lopes Bruno Lopes ompiladores 1 / 31 Front-end Lida com a linguagem de entrada Teste de pertinência: código fonte linguagem fonte? Programa está bem formado? Sintaticamente?
Leia maisListas Lineares Ordenadas
Listas Lineares Ordenadas Algoritmos e Estruturas de Dados I Nesta apresentação será apresentado o ADT lista linear ordenada Uma lista linear ordenada, ou simplesmente lista ordenada há uma ordem entre
Leia maisCompiladores. Análise Léxica
Compiladores Análise Léxica Cristiano Lehrer, M.Sc. Introdução (1/3) Análise léxica é a primeira fase do compilador. A função do analisador léxico, também denominado scanner, é: Fazer a leitura do programa
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisDetalhes da geração de código Usando a técnica ad hoc, amarrada aos procedimentos sintáticos, igual à análise semântica
Geração de Código para uma Máquina Hipotética a Pilha Detalhes da geração de código Usando a técnica ad hoc, amarrada aos procedimentos sintáticos, igual à análise semântica É composta de 3 Regiões MEPA
Leia maisAlgoritmos II prof. Daniel Oliveira
Algoritmos II prof. Daniel Oliveira Revisar conceitos abordados na disciplina anterior Abordar conceitos vistos com a linguagem C# Variáveis e listas Expressões Estruturas de controle do tipo condicional
Leia maisLição 7 Array em Java
Lição 7 Array em Java Introdução à Programação I 1 Objetivos Ao final desta lição, o estudante será capaz de: Declarar e criar arrays Acessar elementos de um array Determinar o número de elementos em um
Leia maisJava Básico. Carga Horária: 32 horas. Pré-requisito: Lógica de Programação; JAVA. Conteúdo Programático
Java Básico Objetivo: Os assuntos apresentados no decorrer do curso Java Básico incluem os conceitos gerais desta linguagem assim como a definição e utilização de seus recursos diversos, tais como: tipos
Leia maisLinguagens de Programação Conceitos e Técnicas. Amarrações
Linguagens de Programação Conceitos e Técnicas Amarrações Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável e seu valor ou entre um identificador
Leia maisCompiladores. Análise Semântica
Compiladores Análise Semântica Cristiano Lehrer, M.Sc. Atividades do Compilador Arquivo de origem Análise léxica Análise semântica Síntese Análise sintática Análise Gramáticas Estruturas internas Arquivo
Leia maisFolha 4.2 Análise sintática ascendente
Folha 4.2 Análise sintática ascendente 1. Considere a gramática G = (S, T, P, S) que representa o cabeçalho de métodos na linguagem Java (sem os modificadores de acesso), onde T = {S, Type, Param, Exception,
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 4 Análise Léxica Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir
Leia maisVariáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
Leia maisConstrução de um compilador para a linguagem Panda
Construção de Compiladores I UFOP DECOM 2014 1 Atividades Práticas Construção de um compilador para a linguagem Panda Etapa 1 Sumário José Romildo Malaquias Resumo Nesta série de atividades vamos implementar
Leia maisProgramação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III
Programação Orientada a Objetos Alexandre César Muniz de Oliveira Métodos e Atributos Parte III Métodos [mod] tipo nome ([tipo arg]) [throws exc]{ [mod]: zero ou mais modificadores separados por espaços
Leia mais4 Conceito de Herança
4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança
Leia maisCompiladores Análise Semântica
Compiladores Análise Semântica Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Análise Semântica Muitos erros no programa não podem ser detectados sintaticamente, pois precisam de contexto
Leia maisCompilação da linguagem Panda
Construção de Compiladores I [BCC328] Atividades Práticas Compilação da linguagem Panda Departamento de Computação Universidade Federal de Ouro Preto Prof. José Romildo Malaquias 22 de abril de 2015 Resumo
Leia maisLinguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira
Linguagens de Programação Conceitos e Técnicas Amarrações Prof. Tiago Alves de Oliveira Conceituação Amarração (ou binding) é uma associação entre entidades de programação, tais como entre uma variável
Leia maisPROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com
Leia maisProgramação II. Aula 3
Programação II Aula 3 Algoritmo Algoritmo: REVISÃO qualquer procedimento bem definido que toma algum valor como entrada e produz algum valor como saída. Técnica de refinamentos sucessivos: dividir um processo
Leia maisOrientação a Objetos AULA 09
Orientação a Objetos AULA 09 Prof. Fabrício Martins Mendonça Conteúdo da Aula ü Coleções ü Coleções lista de objetos ü Coleções conjuntos 2 Coleções Podemos armazenar vários objetos em um array e este
Leia maisArrays. Declaração e criação de arrays
Arrays Os arrays são estruturas de dados que consistem em itens de dados relacionados do mesmo tipo. São entidades estáticas no sentido de que, uma vez criadas, mantém o mesmo tamanho, embora uma referência
Leia maisProgramação Orientada a Objetos II JAVA Décima Aula. Prof. Rogério Albuquerque de Almeida
Programação Orientada a Objetos II JAVA Décima Aula Prof. Rogério Albuquerque de Almeida 1 Programação Orientada a Objeto II Introdução à Estruturas de Dados Alocação Dinâmica Listas, pilhas e filas Construção
Leia maisGenéricos. Profa. Thienne Johnson EACH/USP
Genéricos Profa. Thienne Johnson EACH/USP Java, como programar, 6ª edição Deitel & Deitel Capítulo 18 Material complementar http://wps.prenhall.com/br_deitel_comoprogra_6/ Todas as classes em Java herdam,
Leia maisDiagramas Sintáticos
Diagramas Sintáticos Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Classe pública com método main Cada classe X pública é declarada num ficheiro
Leia maisArray em Java. Figura 1 - Exemplo de um array de inteiros
Array em Java 1. Objetivos Nesta lição, abordaremos Array em Java. Primeiro, definiremos o que é array e, então, discutiremos como declará-los e usá-los. Ao final desta lição, o estudante será capaz de:
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisCONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO
CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO CLASSES E OBJETOS PARA PROGRAMAÇÃO ORIENTADA A OBJETOS Classes são estruturas das linguagens de POO criadas para conter os dados que
Leia maisLembrando análise semântica. Compiladores. Implementação de esquemas de tradução L-atribuídos. Exemplo de implementação top-down (1)
Lembrando análise semântica Compiladores Geração de código intermediário (1) Parser Bottom-up: squema S-atribuído sem problema Apenas atributos sintetizados squema L-atribuído: ok, mas deve-se usar variáveis
Leia maisALOCAÇÃO DINÂMICA DE MEMÓRIA
INE5408 Estruturas de Dados Semestre 2008/1 Prof. Leandro J. Komosinski ALOCAÇÃO DINÂMICA DE Memória de Computador 1 byte = 8 bits (ex.: 00100110) 1 KB = 1024 bytes 1 MB = 1024 KB 1 GB = 1024 MB Meu computador
Leia maisExceções AULA 13. Ricardo Massa F. Lima Sérgio C. B. Soares
Introdução a Programação IF669 http://www.cin.ufpe.br/~if669 Exceções AULA 13 Ricardo Massa F. Lima rmfl@cin.ufpe.br Sérgio C. B. Soares scbs@cin.ufpe.br Exceções Objetivo Depois desta aula você será capaz
Leia maisComputação II Orientação a Objetos
Computação II Orientação a Objetos Fabio Mascarenhas - 2014.1 http://www.dcc.ufrj.br/~fabiom/java Breakout Componentes do Breakout Bola Raquete Tijolos Paredes Score Nem todos vão precisar de classes próprias
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 7 Análise Sintática no JavaCC Prof. Márcio Delamaro delamaro@icmc.usp.br Como
Leia maisSintaxe e Semântica. George Darmiton da Cunha Cavalcanti.
Sintaxe e Semântica George Darmiton da Cunha Cavalcanti (gdcc@cin.ufpe.br) Tópicos Introdução O problema de descrever a sintaxe Métodos formais para descrever a sintaxe Gramáticas de atributos Descrevendo
Leia maisClasses o Objetos. Classes, objetos, métodos e variáveis de instância
Classes o Objetos Um recurso comum de cada aplicativo feito até agora é que todas as instruções que realizavam tarefas localizavam-se no método main. Se você tornar parte de uma equipe de desenvolvimento
Leia maisCompiladores - JFlex. Fabio Mascarenhas
Compiladores - JFlex Fabio Mascarenhas 2018.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada
Leia maisParadigmas de Programação
Paradigmas de Programação Sintaxe e semântica Aula 4 Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Sintaxe A sintaxe de uma linguagem de programação é a forma
Leia maisAnálise Semântica e Representação Intermédia
Análise Semântica e Representação Intermédia Compiladores, Aula Nº 22 João M. P. Cardoso 1 Representação do fluxo de controlo Nós de enunciados Nó if Árvore de expressão para a condição Nó para o corpo
Leia maisCompiladores - JFlex. Fabio Mascarenhas Monday, April 15, 13
Compiladores - JFlex Fabio Mascarenhas - 2013.1 http://www.dcc.ufrj.br/~fabiom/comp JFlex Um gerador de analisadores léxicos que gera analisadores escritos em Java A sintaxe das especificações é inspirada
Leia maisCompiladores Análise de Tipos
Compiladores Análise de Tipos Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp Tipos Um tipo é: Um conjunto de valores Um conjunto de operações sobre esses valores Os tipos de uma linguagem
Leia maisLinguagem de Programação II Implementação
Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Implementação em Java Variáveis Palavras reservadas Pacotes Identificador this Acessando membros de outros objetos API Java Nossa
Leia maisProgramação Estruturada e Orientada a Objetos
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Programação Estruturada e Orientada a Objetos Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação
4 Conceito de Herança Hierarquia de classes e mecanismo de ligação Herança Uma classe pode herdar operações de uma superclasse e as suas operações podem ser herdadas por subclasses. O mecanismo de herança
Leia maisLinguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos
Linguagem de Programação II Programação Orientada a Objetos Orientação a Objetos Prof. Alessandro Borges 2 Tópicos Introdução à Programação Orientada a Objetos Conceitos Objetivos Classes e Objetos Atributos
Leia maisUniversidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java
Guia da Sintaxe do Java TIPOS PRIMITIVOS DE DADOS DO JAVA São os tipos nativos de dados do Java, que podem ser usados na declaração de atributos, variáveis, parâmetros. Tipo primitivo Tamanho Valor padrão
Leia maisLinguagem de Programação III
Linguagem de Programação III Aula-6 Reutilização de Classes Prof. Esbel Tomás Valero Orellana Até Aqui Introdução a POO e sua implementação em Java Atributos, métodos e encapsulamento dos mesmos Trabalhando
Leia maisComo construir um compilador utilizando ferramentas Java
Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula 6 Análise Sintática Prof. Márcio Delamaro delamaro@icmc.usp.br Como construir
Leia maisTipos Abstratos de Dados. Estrutura de Dados
Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:
Leia maisProgramação de Computadores IV
Programação de Computadores IV Introdução ao C - Variáveis Slides de Bruno Augusto Dorta Marques 1 Roteiro da aula Introdução a linguagem C Organização do código-fonte Método main Variável Tipos básicos
Leia maisAnálise de Programação
Análise de Programação Fundamentos da Linguagem de Programação Java Prof. Gilberto B. Oliveira Variáveis Atributos: Variáveis Declaradas fora de um método, sem o modificador static Variáveis membro ou
Leia maisRevisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa
Revisões de PG (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa Pedro Alexandre Pereira (palex@cc.isel.ipl.pt) Compilar e executar programas em Java Ficheiro fonte (Prog.java) Ficheiro
Leia maisFolha 4.1 Análise sintática descendente
1. Dada a seguinte gramática G = (Σ, T, P, S), onde : Σ = { S, A, B } T = { a, b, c } S a b A c A A a S b S c B B a B b S b) Verifique que G é do tipo LL(1). c) Construa a tabela sintática predicativa
Leia maisCIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO
REVISÃO POO INTRODUÇÃO À LINGUAGEM JAVA CRIANDO CLASSES EM JAVA Convenção de Nomes em Java Classes iniciam com letras maiúsculas Métodos, atributos e variáveis locais iniciam com minúsculas. Declaração
Leia maisnome = n; cargo = c; salario = s; public void print() { System.out.println(nome cargo salario); public void aumento( double fator){
UNIVERSIDADE FEDERAL DE SANTA CATARINA - Departamento de Automação e Sistemas PROGRAMAÇÃO DE SISTEMAS AUTOMATIZADOS - 2016/2 - P2 Nome: ------------------------------------------------------------------------------------------------------
Leia maisPseudolinguagem. BC0501 Linguagens de Programação t2 Aula 11. Prof. Alysson Ferrari ufabc.edu.br
BC0501 Linguagens de Programação - 2008t2 Aula 11 Pseudolinguagem Prof. Alysson Ferrari alysson.ferrari @ ufabc.edu.br http://fma.if.usp.br/~alysson baseado em material elaborado por: Marcelo Zanchetta
Leia maisINF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS
INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Ivan Mathias Filho ivan@inf.puc-rio.br Programa Capítulo 3 Ponteiros e Variáveis de Objeto Construtores e Blocos de Inicialização
Leia maisProf. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Quinta aula
Prof. Rogério Albuquerque de Almeida Programação Orientada a Objetos II Java Quinta aula 1 Prof. Rogério Albuquerque de Almeida Programação Orientada a Objeto II Arrays Declarar e criar arrays Acessar
Leia maisCompiladores Geração de Código
Compiladores Geração de Código Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica
Leia maisDeclaração de Construtores em Java
Programando com Java Artigo http://mballem.wordpress.com/ Declaração de Construtores em Java Para que serve e como usar um Construtor em Java Autor Marcio Ballem: é formado em Sistemas de Informação e
Leia maisProjeto de Linguagem. Linguagens de Programação
Projeto de Linguagem Renato Ferreira Linguagens de Programação Linguagens são adotadas para preencher uma demada Facilitar uma aplicação outrora difícil/impossível Independente da qualidade da linguagem
Leia maisErros de Tipo em Pascal Simplifificado
Checagem de Tipos Erros de Tipos em Pascal Simplificado não capturados pela gramática Tarefas de um Type Checker e Conversões de Tipos Sistema de Tipos Checagem Estática X Dinâmica Linguagens Fortemente
Leia maisINF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS
INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS Departamento de Informática PUC-Rio Andrew Diniz da Costa andrew@les.inf.puc-rio.br Programa Capítulo 3 Ponteiros e Variáveis de Objeto Construtores
Leia maisAULA 6 - ARRAYS. Array de 10 elementos
1 AULA 6 - ARRAYS Arrays são objetos que armazenam diversas variáveis do mesmo tipo. Eles podem conter variáveis de referência primitivas ou de objeto, mas o array propriamente dito sempre será um objeto
Leia maisUniversidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES. Introdução. Geovane Griesang
Universidade de Santa Cruz do Sul UNISC Departamento de informática COMPILADORES Introdução geovanegriesang@unisc.br Processadores de linguagem Linguagens de programação são notações para se descrever
Leia maisUniversidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação
Universidade Estadual da Paraíba - UEPB Curso de Licenciatura em Computação Análise Semântica Disciplina: Compiladores Equipe: Luiz Carlos dos Anjos Filho José Ferreira Júnior Compiladores Um compilador
Leia maisCompiladores. Árvore de derivação anotada. Geração de TAC para as principais construções. tradução em código TAC de expressões
Compiladores Geração de código intermediário (2) Geração de TAC para as principais construções xpressões xpressões booleanas tradução em código TAC de expressões S := 1 + 2 1 * 2 ( 1 ) : A := X + Y * Z
Leia maisInterfaces POO. Prof. Marcio Delamaro
Interfaces POO Prof. Marcio Delamaro Programação Orientada a Objetos Prof Marcio Delamaro ICMC/USP 1/41 O que é interface É um template de classe Outras classes podem seguir esse template Chamamos isso
Leia maisNomes, Amarração, Verificação de Tipos, e Escopo
5 Nomes, Amarração, Verificação de Tipos, e Escopo Concepts of Programming Languages, 5/e Robert W. Sebesta Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave
Leia maisSintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida)
Sintaxe do Pascal Simplificado Estendido de 12 novas construções em Notação EBNF (BNF estendida) Não-terminais são nomes mnemônicos colocados entre parênteses angulares. Vocabulário terminal formado por
Leia maisProgramação por Objectos. Java
Programação por Objectos Java Parte 6: Herança e Polimorfismo LEEC@IST Java 1/50 Herança revisão (1) A herança é um mecanismo em que a subclasse constitui uma especialização da superclasse. A superclasse
Leia maisProgramação Orientada a Objectos - P. Prata, P. Fazendeiro
2 A tecnologia Java Uma ideia base da linguagem JAVA é a de que, um programa em JAVA deve poder ser executado em qualquer tipo de computador sem ter que ser alterado ou compilado novamente. Em Java o código
Leia mais