O documento descreve como construir um compilador utilizando ferramentas Java. Ele aborda os principais componentes de um compilador como analisador léxico, analisador sintático, analisador semântico e gerador de código, e como cada um desses componentes é implementado para analisar uma linguagem e gerar código de máquina.
Este documento discute gramáticas livres de contexto (GLC) e a forma de Backus-Naur (BNF) para definir linguagens formais. Em três frases:
1) GLCs e BNFs são maneiras de definir linguagens de programação usando não-terminais, produções e símbolos terminais.
2) A BNF introduz operadores como seleção, opcionalidade e repetição para dar mais flexibilidade na definição de produções.
3) Grafos sintáticos representam as gramáticas visivelmente e mostram os caminhos poss
Criando sua própria linguagem de programaçãoronaldoferraz
O documento discute a criação de uma nova linguagem de programação chamada Mirror. Apresenta os conceitos-chave de linguagens de programação como sintaxe, semântica e gramáticas formais. Descreve elementos da linguagem Mirror como slots, contextos e mensagens. Explica como a linguagem é interpretada usando um parser, AST, bytecodes e máquina virtual.
JavaScript é a linguagem do browser e mais popular do mundo. Foi criada em 1995 para o Netscape e adotada pela Microsoft em 1996. Apesar de sua má fama inicial devido a problemas como variáveis globais e parseInt, JavaScript possui "partes boas" como funções como valores, objetos dinâmicos e JSON que a tornaram uma linguagem importante.
A palestra apresenta uma introdução à linguagem de programação Ruby, destacando suas principais características como ser interpretada, dinâmica, de tipagem dinâmica e orientada a objetos. O palestrante também discute tópicos como metaprogramação, Gems e implementações do interpretador Ruby, além de exemplos de uso da linguagem.
O documento discute o crescimento do uso da internet e das redes sociais ao longo dos anos, as limitações das tecnologias web atuais para lidar com alta concorrência, e como Node.js aborda esses problemas usando I/O não bloqueante e event loop.
A aula abordou:
1) A importância de padrões de codificação para aumentar a legibilidade e manutenção de códigos.
2) Os tipos primitivos em Java como int, double e char e suas características.
3) Variáveis e tipos de referência como String e como são usados para criar objetos.
O documento descreve as principais etapas de um compilador, incluindo a geração de código intermediário, geração de código objeto, otimização de código e gerenciamento de tabelas de símbolos. O código intermediário representa o programa em uma forma independente da máquina e pode ser otimizado antes de ser traduzido para código de máquina. A geração de código objeto mapeia o código intermediário para instruções da máquina-alvo.
Este documento discute gramáticas livres de contexto (GLC) e a forma de Backus-Naur (BNF) para definir linguagens formais. Em três frases:
1) GLCs e BNFs são maneiras de definir linguagens de programação usando não-terminais, produções e símbolos terminais.
2) A BNF introduz operadores como seleção, opcionalidade e repetição para dar mais flexibilidade na definição de produções.
3) Grafos sintáticos representam as gramáticas visivelmente e mostram os caminhos poss
Criando sua própria linguagem de programaçãoronaldoferraz
O documento discute a criação de uma nova linguagem de programação chamada Mirror. Apresenta os conceitos-chave de linguagens de programação como sintaxe, semântica e gramáticas formais. Descreve elementos da linguagem Mirror como slots, contextos e mensagens. Explica como a linguagem é interpretada usando um parser, AST, bytecodes e máquina virtual.
JavaScript é a linguagem do browser e mais popular do mundo. Foi criada em 1995 para o Netscape e adotada pela Microsoft em 1996. Apesar de sua má fama inicial devido a problemas como variáveis globais e parseInt, JavaScript possui "partes boas" como funções como valores, objetos dinâmicos e JSON que a tornaram uma linguagem importante.
A palestra apresenta uma introdução à linguagem de programação Ruby, destacando suas principais características como ser interpretada, dinâmica, de tipagem dinâmica e orientada a objetos. O palestrante também discute tópicos como metaprogramação, Gems e implementações do interpretador Ruby, além de exemplos de uso da linguagem.
O documento discute o crescimento do uso da internet e das redes sociais ao longo dos anos, as limitações das tecnologias web atuais para lidar com alta concorrência, e como Node.js aborda esses problemas usando I/O não bloqueante e event loop.
A aula abordou:
1) A importância de padrões de codificação para aumentar a legibilidade e manutenção de códigos.
2) Os tipos primitivos em Java como int, double e char e suas características.
3) Variáveis e tipos de referência como String e como são usados para criar objetos.
O documento descreve as principais etapas de um compilador, incluindo a geração de código intermediário, geração de código objeto, otimização de código e gerenciamento de tabelas de símbolos. O código intermediário representa o programa em uma forma independente da máquina e pode ser otimizado antes de ser traduzido para código de máquina. A geração de código objeto mapeia o código intermediário para instruções da máquina-alvo.
Este documento resume as principais etapas da geração de código em compiladores: 1) geração de código intermediário, que produz um código mais próximo da linguagem da máquina antes da tradução final; 2) otimização desse código intermediário para produzir um código objeto mais eficiente; e 3) geração do código objeto final na linguagem da máquina alvo.
Linguagem C e Dev-C++ Algumas Explicaçõesnataferraz
O documento explica os conceitos básicos da linguagem C, incluindo o que é C, sua sintaxe e tipos de dados. C foi criada em 1972 por Dennis Ritchie para facilitar a criação de programas extensos com menos erros utilizando programação procedural. A sintaxe de C define regras para identificadores, variáveis e tipos de dados como inteiros, reais e caracteres.
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
Nesta palestra, eu apresentei uma introdução à linguagem de programação <strong>JavaScript</strong>, sua evolução, sua padronização de acordo com a especificação <strong>ECMA-262</strong> (linguagem <strong>ECMAScript</strong>), principais usos da linguagem, alguns dos principais conceitos da linguagem, programação orientada a objetos com JavaScript e algumas das novidades da <strong>ECMAScript 5</strong>. Além disto, eu também apresentei estatísticas de uso dos 5 principais browsers da atualidade e o suporte dos principais browsers do mercado ao ECMAScript 5.
O documento discute a geração de código objeto, que é a última fase de um compilador. Ele explica que o gerador de código objeto recebe a representação intermediária do compilador e produz um código objeto semanticamente equivalente para a máquina-alvo. Alguns conceitos importantes incluem a seleção de instruções, alocação de registradores e escalonamento de instruções.
1. O documento apresenta uma introdução ao JavaScript para iniciantes, abordando tópicos como sintaxe, boas práticas e informações úteis.
2. É apresentada uma sequência com três sessões: introdução ao JavaScript, conceitos básicos e manipulação do DOM.
3. Na sessão de conceitos básicos, são explicados tópicos como variáveis, operadores, estruturas de controlo, funções, objetos e eventos.
Zephir é uma linguagem de programação de alto nível para criar extensões para PHP. Ela compila para código C que é então interpretado pelo motor Zend do PHP, resultando em desempenho até 3 vezes mais rápido em comparação com PHP. O documento fornece detalhes sobre como instalar e começar a usar a linguagem Zephir, apresentando exemplos de código e características como tipos estáticos, namespaces, retorno de tipo e dicas de predição de ramificação para melhor desempenho.
O documento fornece uma introdução à linguagem PHP, abordando sua visão geral, sintaxe básica e estruturas de controle. Resume os principais pontos sobre o que é PHP, como delimitar código, tipos de variáveis e declaração de funções.
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
Nesta palestra, eu apresentei uma visão geral da evolução da linguagem de programação C# desde o lançamento da versão 1.0, em fevereiro de 2002, até a versão 4, em março de 2010. Depois, eu também apresentei a principal novidade da linguagem C# 5: suporte direto da linguagem à programação assíncrona. Este novo recurso permite que o desenvolvedor realize programação assíncrona de modo similar à programação síncrona. Além disto, eu também comentei sobre as principais novidades esperadas para a versão posterior (C# 6?), que atualmente é conhecida pelo nome de projeto Roslyn.
O documento discute a evolução e o potencial de JavaScript como linguagem séria para desenvolvimento. Apresenta o histórico da linguagem, suas características como tipagem fraca e funções de primeira classe, e novos usos em aplicações web, mobile e servidores como Node.js.
Testes unitários como ferramentas de design de códigoPaula Grangeiro
A apresentação discute testes unitários como ferramentas de design de código, mostrando como testes podem ser usados para isolar componentes e validar fluxos de sucesso e falha. Ela também fornece dicas sobre nomear testes de forma descritiva e usar mocks para isolar dependências.
O documento apresenta os conteúdos do módulo 5 de Desenvolvimento de páginas web dinâmicas em PHP do curso de Técnico de Gestão e Programação de Sistemas Informáticos. São abordados conceitos básicos de PHP como variáveis, operadores, constantes e estruturas de dados.
O documento apresenta uma introdução ao PHP, incluindo o que é PHP, para que serve e como funciona. Explica como o código PHP é interpretado dentro de páginas HTML para gerar conteúdo dinâmico. Também aborda variáveis, arrays, estruturas condicionais if/else e switch para controlar a execução de código.
Este documento apresenta uma palestra sobre Shell Script e programação em Linux. A palestra é dividida em três partes principais: introdução ao Linux, comandos básicos de shell e programação em shell script, e interfaces gráficas para shell scripts. O documento fornece detalhes sobre os tópicos apresentados na palestra, incluindo exemplos de comandos shell, estruturas de programação e ferramentas gráficas.
BDD: Torne viva a documentação de seus sistemasVitor Mattos
O documento discute a importância de se documentar os sistemas usando comportamentos (behavior-driven development - BDD) em vez de apenas documentação estática. Apresenta exemplos de como escrever histórias e cenários de teste usando a linguagem Gherkin para descrever funcionalidades de forma concisa e compreensível para todos os envolvidos no projeto. Demonstra a instalação e uso básico da ferramenta Behat para rodar testes automatizados baseados em BDD no PHP.
O documento descreve o .NET Framework e a linguagem C#. O .NET Framework fornece um ambiente de programação orientado a objetos, executação consistente entre plataformas, e segurança. A linguagem C# é projetada para o .NET Framework e oferece tipos de variáveis, operadores, comandos de controle de fluxo e tratamento de erros.
O documento apresenta uma introdução à linguagem de programação C# utilizando o Visual Studio. Aborda noções básicas como variáveis, tipos de dados, operadores, estruturas de controle e repetição. Também introduz conceitos de orientação a objetos como classe, métodos e atributos.
O documento descreve como instalar e usar o compilador Dev C++. Ele explica que o Dev C++ é um compilador gratuito para C, C++ e C# que permite compilar e executar programas. O documento também mostra como criar e compilar um programa simples usando o Dev C++.
(1) O documento apresenta uma introdução à linguagem Java, abordando sua história, características da plataforma e fundamentos da linguagem como variáveis, operadores e estruturas condicionais;
(2) São apresentados conceitos como tipos primitivos, declaração de classes e variáveis, operadores unários, incremento/decremento e representação de sinal;
(3) O documento também explica conceitos importantes como escopo de variáveis e realiza um exercício prático para fixação dos conceitos apresentados.
Este documento apresenta três frases ou menos:
O documento apresenta uma apostila sobre linguagem de programação Java, abordando tópicos como criação de programas, compilação, impressão de texto, trabalhar com números inteiros e reais, operações matemáticas e lógicas.
Compilador-Analisador Léxico com FLEX + Linguagem C Aldisio Medeiros
O documento discute o analisador léxico, incluindo tokens, padrões e lexemas. Ele também cobre a estrutura de um analisador léxico em C e como simular a busca de símbolos em uma tabela de símbolos usando tabelas hash.
Este documento fornece instruções passo a passo para construir um compilador de análise léxica usando o software FLEX. Ele explica como baixar os arquivos necessários, instalar o FLEX e MinGW, examinar exemplos iniciais, compilar os arquivos de exemplo usando FLEX e MinGW, e testar o resultado.
O documento descreve o compilador GCC, incluindo sua história, versões, estrutura e funcionamento. O GCC (GNU Compiler Collection) foi desenvolvido originalmente por Richard Stallman em 1987 para o projeto GNU. Ele é um compilador multiplataforma, de código aberto, que suporta várias linguagens como C, C++, Java e Fortran. O GCC realiza quatro etapas de compilação: pré-processamento, compilação, montagem e ligação. Sua estrutura inclui front-end, middle-end e back-end para análise, ot
Este documento resume as principais etapas da geração de código em compiladores: 1) geração de código intermediário, que produz um código mais próximo da linguagem da máquina antes da tradução final; 2) otimização desse código intermediário para produzir um código objeto mais eficiente; e 3) geração do código objeto final na linguagem da máquina alvo.
Linguagem C e Dev-C++ Algumas Explicaçõesnataferraz
O documento explica os conceitos básicos da linguagem C, incluindo o que é C, sua sintaxe e tipos de dados. C foi criada em 1972 por Dennis Ritchie para facilitar a criação de programas extensos com menos erros utilizando programação procedural. A sintaxe de C define regras para identificadores, variáveis e tipos de dados como inteiros, reais e caracteres.
TechEd Brasil 2011: WEB 302 - Presente e futuro da linguagem de programação J...Rogério Moraes de Carvalho
Nesta palestra, eu apresentei uma introdução à linguagem de programação <strong>JavaScript</strong>, sua evolução, sua padronização de acordo com a especificação <strong>ECMA-262</strong> (linguagem <strong>ECMAScript</strong>), principais usos da linguagem, alguns dos principais conceitos da linguagem, programação orientada a objetos com JavaScript e algumas das novidades da <strong>ECMAScript 5</strong>. Além disto, eu também apresentei estatísticas de uso dos 5 principais browsers da atualidade e o suporte dos principais browsers do mercado ao ECMAScript 5.
O documento discute a geração de código objeto, que é a última fase de um compilador. Ele explica que o gerador de código objeto recebe a representação intermediária do compilador e produz um código objeto semanticamente equivalente para a máquina-alvo. Alguns conceitos importantes incluem a seleção de instruções, alocação de registradores e escalonamento de instruções.
1. O documento apresenta uma introdução ao JavaScript para iniciantes, abordando tópicos como sintaxe, boas práticas e informações úteis.
2. É apresentada uma sequência com três sessões: introdução ao JavaScript, conceitos básicos e manipulação do DOM.
3. Na sessão de conceitos básicos, são explicados tópicos como variáveis, operadores, estruturas de controlo, funções, objetos e eventos.
Zephir é uma linguagem de programação de alto nível para criar extensões para PHP. Ela compila para código C que é então interpretado pelo motor Zend do PHP, resultando em desempenho até 3 vezes mais rápido em comparação com PHP. O documento fornece detalhes sobre como instalar e começar a usar a linguagem Zephir, apresentando exemplos de código e características como tipos estáticos, namespaces, retorno de tipo e dicas de predição de ramificação para melhor desempenho.
O documento fornece uma introdução à linguagem PHP, abordando sua visão geral, sintaxe básica e estruturas de controle. Resume os principais pontos sobre o que é PHP, como delimitar código, tipos de variáveis e declaração de funções.
TechEd Brasil 2011: DEV 303 - Atualizando suas habilidades de programação com...Rogério Moraes de Carvalho
Nesta palestra, eu apresentei uma visão geral da evolução da linguagem de programação C# desde o lançamento da versão 1.0, em fevereiro de 2002, até a versão 4, em março de 2010. Depois, eu também apresentei a principal novidade da linguagem C# 5: suporte direto da linguagem à programação assíncrona. Este novo recurso permite que o desenvolvedor realize programação assíncrona de modo similar à programação síncrona. Além disto, eu também comentei sobre as principais novidades esperadas para a versão posterior (C# 6?), que atualmente é conhecida pelo nome de projeto Roslyn.
O documento discute a evolução e o potencial de JavaScript como linguagem séria para desenvolvimento. Apresenta o histórico da linguagem, suas características como tipagem fraca e funções de primeira classe, e novos usos em aplicações web, mobile e servidores como Node.js.
Testes unitários como ferramentas de design de códigoPaula Grangeiro
A apresentação discute testes unitários como ferramentas de design de código, mostrando como testes podem ser usados para isolar componentes e validar fluxos de sucesso e falha. Ela também fornece dicas sobre nomear testes de forma descritiva e usar mocks para isolar dependências.
O documento apresenta os conteúdos do módulo 5 de Desenvolvimento de páginas web dinâmicas em PHP do curso de Técnico de Gestão e Programação de Sistemas Informáticos. São abordados conceitos básicos de PHP como variáveis, operadores, constantes e estruturas de dados.
O documento apresenta uma introdução ao PHP, incluindo o que é PHP, para que serve e como funciona. Explica como o código PHP é interpretado dentro de páginas HTML para gerar conteúdo dinâmico. Também aborda variáveis, arrays, estruturas condicionais if/else e switch para controlar a execução de código.
Este documento apresenta uma palestra sobre Shell Script e programação em Linux. A palestra é dividida em três partes principais: introdução ao Linux, comandos básicos de shell e programação em shell script, e interfaces gráficas para shell scripts. O documento fornece detalhes sobre os tópicos apresentados na palestra, incluindo exemplos de comandos shell, estruturas de programação e ferramentas gráficas.
BDD: Torne viva a documentação de seus sistemasVitor Mattos
O documento discute a importância de se documentar os sistemas usando comportamentos (behavior-driven development - BDD) em vez de apenas documentação estática. Apresenta exemplos de como escrever histórias e cenários de teste usando a linguagem Gherkin para descrever funcionalidades de forma concisa e compreensível para todos os envolvidos no projeto. Demonstra a instalação e uso básico da ferramenta Behat para rodar testes automatizados baseados em BDD no PHP.
O documento descreve o .NET Framework e a linguagem C#. O .NET Framework fornece um ambiente de programação orientado a objetos, executação consistente entre plataformas, e segurança. A linguagem C# é projetada para o .NET Framework e oferece tipos de variáveis, operadores, comandos de controle de fluxo e tratamento de erros.
O documento apresenta uma introdução à linguagem de programação C# utilizando o Visual Studio. Aborda noções básicas como variáveis, tipos de dados, operadores, estruturas de controle e repetição. Também introduz conceitos de orientação a objetos como classe, métodos e atributos.
O documento descreve como instalar e usar o compilador Dev C++. Ele explica que o Dev C++ é um compilador gratuito para C, C++ e C# que permite compilar e executar programas. O documento também mostra como criar e compilar um programa simples usando o Dev C++.
(1) O documento apresenta uma introdução à linguagem Java, abordando sua história, características da plataforma e fundamentos da linguagem como variáveis, operadores e estruturas condicionais;
(2) São apresentados conceitos como tipos primitivos, declaração de classes e variáveis, operadores unários, incremento/decremento e representação de sinal;
(3) O documento também explica conceitos importantes como escopo de variáveis e realiza um exercício prático para fixação dos conceitos apresentados.
Este documento apresenta três frases ou menos:
O documento apresenta uma apostila sobre linguagem de programação Java, abordando tópicos como criação de programas, compilação, impressão de texto, trabalhar com números inteiros e reais, operações matemáticas e lógicas.
Compilador-Analisador Léxico com FLEX + Linguagem C Aldisio Medeiros
O documento discute o analisador léxico, incluindo tokens, padrões e lexemas. Ele também cobre a estrutura de um analisador léxico em C e como simular a busca de símbolos em uma tabela de símbolos usando tabelas hash.
Este documento fornece instruções passo a passo para construir um compilador de análise léxica usando o software FLEX. Ele explica como baixar os arquivos necessários, instalar o FLEX e MinGW, examinar exemplos iniciais, compilar os arquivos de exemplo usando FLEX e MinGW, e testar o resultado.
O documento descreve o compilador GCC, incluindo sua história, versões, estrutura e funcionamento. O GCC (GNU Compiler Collection) foi desenvolvido originalmente por Richard Stallman em 1987 para o projeto GNU. Ele é um compilador multiplataforma, de código aberto, que suporta várias linguagens como C, C++, Java e Fortran. O GCC realiza quatro etapas de compilação: pré-processamento, compilação, montagem e ligação. Sua estrutura inclui front-end, middle-end e back-end para análise, ot
Este documento fornece um resumo introdutório sobre análise sintática. Discute tópicos como reconhecimento de sentenças, derivações canônicas, árvores sintáticas, gramáticas ambíguas e analisadores sintáticos como autômatos de pilha e analisadores preditivos. O objetivo é apresentar os principais conceitos e técnicas relacionados à validação automática de sentenças de acordo com uma gramática formal.
O documento discute inteligência competitiva e como a internet pode ser usada como uma fonte valiosa de informações estratégicas para organizações. Define inteligência competitiva como um processo de coleta e análise de informações sobre concorrentes, clientes e tendências do mercado. Também descreve como a internet oferece acesso global a literatura, especialistas e dados governamentais que podem ser usados nesse processo para gerar vantagem competitiva.
Inteligência Artificial - Inferência Ascendente e DescendenteAldisio Medeiros
Descreve os algoritmos de percurso na base de conhecimento na forma de Horn. Encadeamento pra frente (Inferência Ascendente) e Encadeamento pra trás(Inferência Descendente)
Uma DSL para declarar a Ordem de Execução de AspectosGPrimola
Este documento apresenta uma DSL para declarar a ordem de execução de aspectos. A DSL permite definir restrições sobre a execução de advices de aspectos que interceptam um mesmo join point. O documento descreve um estudo de caso em que dois aspectos interceptam o mesmo join point e a DSL é usada para declarar que o advice de compressão deve executar antes do de criptografia. A solução proposta permite também suportar versões antigas do sistema variando a regra de composição usada.
Lex is a computer program that generates lexical analyzers ("scanners" or "lexers"). Lex is commonly used with the yacc parser generator. Lex, originally written by Mike Lesk and Eric Schmidt and described in 1975, is the standard lexical analyzer generator on many Unix systems, and a tool exhibiting its behavior is specified as part of the POSIX standard. The computer program Yacc is a LALR parser generator developed by Stephen C. Johnson at AT&T Corporation for the Unix operating system in 1970. The name is an acronym for "Yet Another Compiler Compiler". It generates a parser, the part of a compiler that tries to make syntactic sense of the source code, specifically a LALR parser, based on an analytic grammar written in a notation similar to BNF.
O documento descreve o Java Compiler Compiler (JavaCC), um gerador de parsers para a linguagem Java. JavaCC recebe como entrada uma especificação de gramática e gera um parser para reconhecer aquela gramática. Explica como escrever gramáticas no formato JavaCC, incluindo definições léxicas, produções e ações semânticas.
Este documento fornece instruções para implementar um compilador dividido em 4 etapas: 1) Análise léxica e sintática com inserção na tabela de símbolos, 2) Geração de código intermediário, 3) Otimizações simples, 4) Geração de código assembly. A análise léxica reconhece tokens como palavras-chave e operadores, enquanto a análise sintática define regras gramaticais. Um conflito de precedência no if/else é resolvido atribuindo maior precedência
Este documento descreve como construir um interpretador de expressões aritméticas simples utilizando o JavaCC e o JJTree para gerar a árvore sintática. A estratégia envolve:
1. Construir um analisador sintático para expressões aritméticas com o JavaCC;
2. Utilizar o JJTree para gerar automaticamente a árvore sintática;
3. Anotar a árvore gerada com valores e operações para permitir a avaliação das expressões.
1. O documento descreve a construção de um analisador léxico para a linguagem C++.
2. É apresentada uma introdução sobre linguagens de programação, níveis de linguagem e características da linguagem C++.
3. São definidos os componentes lexicais da linguagem C++, incluindo palavras-chave, tipos de dados, operadores e caracteres especiais.
[TUTORIAL] PetitParser
First Name: Jan
Last Name: Kurs
Type: Tutorial
Video1: https://www.youtube.com/watch?v=HQswKmwkuhk
Video2: https://www.youtube.com/watch?v=vzcJfWU832w
Abstract: PetitParser is PEG-based parser combinator framework utilizing scannerless parsing and packrat parsing. PetitParser makes it easy to define parsers with Smalltalk code and to dynamically reuse, compose, transform and extend grammars. Recently, PetitParser was extended in two areas:
1) parsing context sensitive and indentation sensitive grammars; and
2) parsing imprecisely or incompletely specified grammars (island parsing).
In this tutorial we will show how to quickly develop an island parser of an indentation sensitive language using the PetitParser framework.
Bio:
I am a PhD candidate at the Software Composition Group, University of Bern since 2012. My research interest is in model extraction and parsing technologies.
Este documento apresenta o gabarito oficial definitivo de uma prova chamada POSCOMP 2010, com as alternativas corretas para cada uma das 70 questões, além de correções feitas em 3 questões.
Este documento descreve as instruções para a realização do Exame Nacional para Ingresso na Pós-Graduação em Computação (POSCOMP 2011), que ocorrerá no dia 9/10/2011. O exame terá duração de 4 horas e conterá 70 questões objetivas de múltipla escolha. Os candidatos deverão assinar o cartão-resposta e não poderão utilizar livros ou comunicar-se durante a prova.
Este documento apresenta o gabarito oficial definitivo de uma prova chamada POSCOMP 2011, com as alternativas corretas para cada uma das 70 questões e informações sobre mudanças nos gabaritos das questões 18 e 35.
This document discusses JavaScript libraries and frameworks. It provides an overview of some popular options like jQuery, Prototype, Dojo, MooTools, and YUI. It explains why developers use libraries, such as for faster development, cross-browser compatibility, and animation capabilities. The document also discusses how libraries resemble CSS and use selector syntax. Basic examples are provided to demonstrate common tasks like hover effects and row striping. Factors for choosing a library are outlined like maturity, documentation, community, and licensing. The document concludes by explaining how to obtain library code from project websites or Google's AJAX Libraries API.
O documento discute os conceitos de compiladores, interpretadores e linkagem no contexto da programação. Explica que compiladores transformam programas de alto nível em código de máquina, enquanto interpretadores fazem isso linha a linha. A linkagem une código objeto e bibliotecas para criar programas executáveis.
O documento discute os termos essenciais da oração, incluindo sujeito, predicado e diferentes tipos de sujeito. Explica que o sujeito é o ser do qual se diz alguma coisa e o predicado é aquilo que se declara do sujeito. Também define sujeito simples, sujeito composto, sujeito oculto e sujeito indeterminado.
O documento discute conceitos de análise sintática como sujeito, predicado, adjuntos adnominais e adverbiais, e classificação de orações. Explica como identificar elementos essenciais como sujeito, objeto direto e indireto, e tipos de verbos e predicados.
O documento discute as principais linguagens de programação, como surgiram e onde são utilizadas atualmente. Aborda os paradigmas de programação, a diferença entre interpretador e compilador e como funciona um compilador. Apresenta exemplos de linguagens como Assembly, Fortran, Pascal, COBOL, C, C++, Java, PHP e Shell Script.
O documento introduz os principais conceitos da linguagem de programação Java, incluindo sua história, características, plataformas, JVM, tipos de dados, controle de fluxo, classes, herança e tratamento de exceções.
1. O documento apresenta conceitos sobre linguagem de programação Java, incluindo tipos de programação, tradução de programas, compilação vs interpretação, e exercícios para praticar variáveis e controle de fluxo.
2. São discutidos tópicos como tipos primitivos em Java, declaração e atribuição de variáveis, operadores aritméticos, comentários, e controle de fluxo com estruturas if/else e laços for/while.
3. Exemplos de código são fornecidos para compilar e executar
1. O documento apresenta conceitos sobre linguagem de programação Java, incluindo tipos de programação, tradução de programas, compilação vs interpretação, e exercícios para praticar variáveis e controle de fluxo.
2. São discutidos tópicos como tipos primitivos em Java, declaração e atribuição de variáveis, operadores aritméticos, comentários, e controle de fluxo com estruturas if/else e laços for/while.
3. Exemplos de código são fornecidos para compilar e executar
O documento descreve a história e os fundamentos da linguagem de programação Java. Resume os principais pontos como: 1) Java foi desenvolvido inicialmente pela Sun Microsystems em 1991 com foco em dispositivos embarcados e depois adotado para web; 2) Atualmente está na versão 8 e possui mais de 3 mil classes; 3) Possui três principais distribuições: Java SE, EE e ME.
1) O documento apresenta um tutorial sobre a linguagem de programação Java, abordando conceitos de orientação a objetos, características da linguagem e programação em Java.
2) A linguagem Java é compilada, portátil e orientada a objetos, permitindo a criação de aplicações para a internet de forma segura e eficiente.
3) O tutorial introduz conceitos como classes, objetos, herança e interfaces para ensinar programação orientada a objetos em Java.
O documento fornece uma introdução sobre Java, abordando: 1) Java como linguagem de programação e plataforma; 2) os tipos de programas Java como aplicações locais, applets e servlets; 3) o processo de compilação e execução de programas Java.
O documento discute a evolução e o potencial de JavaScript como linguagem séria para desenvolvimento. Apresenta o histórico da linguagem, seus problemas iniciais de tipagem fraca e nome, mas destaca suas capacidades atuais de programação funcional com funções de primeira classe e ordem superior, além de novos usos em aplicações web, mobile e servidores.
O documento descreve: 1) O que é uma linguagem de programação e seus componentes; 2) Os tipos de linguagens de programação - de baixo e alto nível; 3) O que é um compilador e como ele traduz códigos de alto para baixo nível.
Aula 1 da disciplina de Programação Orientada a Objetos do 4º semestre do curso de Tecnologia em Análise e Desenvolvimento de Sistemas do IFSP Campus Capivari.
Este documento fornece um resumo de 3 frases ou menos sobre o documento dado:
O documento descreve o conteúdo da disciplina Linguagem de Programação IV, incluindo fundamentos de orientação a objetos em Java, bibliotecas, interfaces gráficas, tratamento de exceções e multithreading. Além disso, fornece uma lista de referências bibliográficas sobre Java.
O documento fornece uma introdução à plataforma Java, descrevendo suas principais características como orientada a objetos, simples, dinâmica, robusta, independente da arquitetura, portável, multi-threaded, segura, rápida e distribuída. Também explica os componentes da plataforma Java como a máquina virtual Java e a API Java, e fornece instruções sobre como instalar o ambiente de desenvolvimento Java.
Deep Dive na plataforma Java, cobrindo os motivos da JVM/JRE ser a menina dos olhos em um mundo de TI poliglota! PErformance, Segurança, Jython, JRuby e muito mais!
O documento discute Java e fornece informações sobre:
1. As expectativas de vários alunos em relação ao curso de Java;
2. Breve histórico da linguagem Java, sua máquina virtual, coletor de lixo e ferramentas;
3. Convenções de nomenclatura em Java.
O documento discute linguagens de programação, compiladores e paradigmas de programação, mencionando exemplos de cada um. Também aborda linguagens interpretadas e linguagens que geram bytecode, além de compiladores de compiladores.
O documento apresenta uma introdução sobre lógica de programação e a linguagem Java, incluindo definições de algoritmos, diagramas de blocos, operadores, estruturas de repetição e introdução à Java Virtual Machine.
1. O documento é uma apostila sobre Java que introduz os principais conceitos da linguagem, incluindo:
2. Apresenta os tipos básicos de dados em Java, operadores, arrays, loops e condicionais.
3. Explica como criar classes, métodos, aplicações e applets em Java.
Este documento resume os principais aspectos da linguagem de programação Java, incluindo operadores, conversão de tipos, estruturas de controle, comentários, blocos de código, palavras reservadas, tipos primitivos e a classe Scanner.
O documento descreve a tecnologia Java, incluindo suas principais características, como orientada a objetos e portabilidade. Ele também explica como escrever, compilar e executar um programa "Olá Mundo!" simples em Java usando um editor de texto, o compilador javac e a máquina virtual Java.
O mercado de internet evolui em uma velocidade muito rápida, se não formos capazes de acompanhar as evoluções e apresentar inovações, ficamos para trás. Ruby e Rails vem trazer ao mundo do desenvolvimento web a produtividade e alegria necessária!
Semelhante a Como Construir um Compilador cap-1 (20)
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
Em determinadas ocasiões, dependendo dos requisitos de uma aplicação, pode ser preciso percorrer todos os elementos de uma árvore para, por exemplo, exibir todo o seu conteúdo ao usuário. De acordo com a ordem de visitação dos nós, o usuário pode ter visões distintas de uma mesma árvore.
Imagine que, para percorrer uma árvore, tomemos o nó raiz como nó inicial e, a partir dele, comecemos a visitar todos os nós adjacentes a ele para, só então, começar a investigar os outros nós da árvore. Por outro lado, imagine que tomamos um nó folha como ponto de partida e caminhemos em direção à raiz, visitando apenas o ramo da árvore que leva o nó folha à raiz. São maneiras distintas de se visualizar a mesma árvore.
Tome a árvore binária a seguir como base para realizar percursos que partirão sempre da raiz (nó 1).
Figura 1 - Árvore binária
Fonte: OLIVEIRA, P. M. de; PEREIRA, R. de L. Estruturas de Dados II. Maringá: UniCesumar, 2019. p. .
Com base na árvore anterior, responda quais seriam as ordens de visitação, partindo da raiz:
a) Percorrendo a árvore pelo algoritmo Pré-Ordem.
b) Percorrendo a árvore pelo algoritmo Em-Ordem.
c) Percorrendo a árvore pelo algoritmo Pós-Ordem.
Obs.: como resposta, informar apenas os caminhos percorridos em cada Situação:
a) Pré-ordem: X - Y - Z.
b) Em-ordem: X - Y - Z.
c) Pós-ordem: X - Y - Z.
ATENÇÃO!
- Você poderá elaborar sua resposta em um arquivo de texto .txt e, após revisado, copiar e colar no campo destinado à resposta na própria atividade em seu STUDEO.
- Plágios e cópias indevidas serão penalizados com nota zero.
- As perguntas devem ser respondidas de forma adequada, ou seja, precisam ser coerentes.
- Antes de enviar sua atividade, certifique-se de que respondeu todas as perguntas e não se esqueceu nenhum detalhe. Após o envio, não são permitidas alterações. Por favor, não insista.
- Não são permitidas correções parciais no decorrer do módulo, isso invalida seu processo avaliativo. A interpretação da atividade faz parte da avaliação.
- Atenção ao prazo de entrega da atividade. Sugerimos que envie sua atividade antes do prazo final para evitar transtornos e lentidão nos servidores. Evite o envio de atividade em cima do prazo.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Como Construir um Compilador cap-1
1. Como construir um compilador utilizando
ferramentas Java
Aula 1 - Introdução
´
Prof. Marcio Delamaro
delamaro@icmc.usp.br
Como construir um compilador utilizando ferramentas Java – p. 1/2
3. Conteúdo
Introdução à compilação.
Descrição da linguagem X++, utilizada como estudo de
caso. Apresenta conceitos básicos sobre linguagens e
como defini-las.
Análise léxica. Mostra como se utiliza a ferramenta
JavaCC para criar um analisador léxico para a
linguagem X++.
Análise sintática. Mostra como construir um analisador
sintático para X++ utilizando JavaCC.
Como construir um compilador utilizando ferramentas Java – p. 3/2
4. Conteúdo
Árvore sintática. Mostra como construir a árvore
sintática usando o JavaCC e como utilizá-la nas etapas
seguintes.
Tabela de símbolos e análise semântica. Mostra como
implementar uma tabela de símbolos utilizada na
checagem de tipos e validação semântica.
Geração de código. Mostra como utilizar a ferramenta
Jasmin para gerar o código-objeto (bytecode) Java.
Como construir um compilador utilizando ferramentas Java – p. 4/2
5. O que é um programa?
Seqüência de 0s e 1s.
CPU
Memória
A
B
C
D
000
001
002
003
004
005
006
007
Como construir um compilador utilizando ferramentas Java – p. 5/2
6. Operações simples
Programa é armazenado na memória.
Como construir um compilador utilizando ferramentas Java – p. 6/2
7. Operações simples
Programa é armazenado na memória.
Programa é executado dentro da CPU por meio de
instruções muito simples.
Como construir um compilador utilizando ferramentas Java – p. 6/2
8. Operações simples
Programa é armazenado na memória.
Programa é executado dentro da CPU por meio de
instruções muito simples.
“Somar posição de memória 100 com posição 101 e
colocar resultado em 102.”
copiar o conteúdo da posição de memória 100 para o
registrador A;
copiar o conteúdo da posição de memória 101 para o
registrador B;
somar o conteúdo de B em A;
copiar o conteúdo de A para a posição de memória
102.
Como construir um compilador utilizando ferramentas Java – p. 6/2
9. Linguagens de alto nível
Necessário desenvolver programas num nível de
abstração um pouco mais elevado.
Como construir um compilador utilizando ferramentas Java – p. 7/2
10. Linguagens de alto nível
Necessário desenvolver programas num nível de
abstração um pouco mais elevado.
Menos dependente das instruções de uma determinada
máquina.
Como construir um compilador utilizando ferramentas Java – p. 7/2
11. Linguagens de alto nível
Necessário desenvolver programas num nível de
abstração um pouco mais elevado.
Menos dependente das instruções de uma determinada
máquina.
As linguagens de alto nível substituem as instruções dos
computadores por comandos cujas utilização e
compreensão são mais fáceis
Como construir um compilador utilizando ferramentas Java – p. 7/2
12. Linguagens de alto nível
Necessário desenvolver programas num nível de
abstração um pouco mais elevado.
Menos dependente das instruções de uma determinada
máquina.
As linguagens de alto nível substituem as instruções dos
computadores por comandos cujas utilização e
compreensão são mais fáceis
a=b+c
Como construir um compilador utilizando ferramentas Java – p. 7/2
13. Processo de compilação
As linguagens de programação evoluíram
Como construir um compilador utilizando ferramentas Java – p. 8/2
14. Processo de compilação
As linguagens de programação evoluíram
Máquinas continuam as mesmas ou seja, continuam
usando instruções de baixo nível
Como construir um compilador utilizando ferramentas Java – p. 8/2
15. Processo de compilação
As linguagens de programação evoluíram
Máquinas continuam as mesmas ou seja, continuam
usando instruções de baixo nível
Como usar então uma linguagem de alto nível numa
máquina que não a compreende?
Como construir um compilador utilizando ferramentas Java – p. 8/2
16. Processo de compilação
As linguagens de programação evoluíram
Máquinas continuam as mesmas ou seja, continuam
usando instruções de baixo nível
Como usar então uma linguagem de alto nível numa
máquina que não a compreende?
PROGRAMA
PROGRAMA
FONTE
OBJETO
COMPILADOR
Como construir um compilador utilizando ferramentas Java – p. 8/2
17. Os componentes de um compilador
o analisador léxico;
o analisador sintático;
o analisador semântico;
o gerador de código.
Como construir um compilador utilizando ferramentas Java – p. 9/2
18. Analisador léxico
O analisador léxico (AL) encarrega-se de separar no
programa fonte cada símbolo que tenha algum significado
para a linguagem ou de avisar quando um símbolo que não
faz parte da linguagem é encontrado.
Como construir um compilador utilizando ferramentas Java – p. 10/2
19. Análise léxica
123 x1 ; y2 true begin
Como construir um compilador utilizando ferramentas Java – p. 11/2
20. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
Como construir um compilador utilizando ferramentas Java – p. 11/2
21. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
Como construir um compilador utilizando ferramentas Java – p. 11/2
22. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
Como construir um compilador utilizando ferramentas Java – p. 11/2
23. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
y2 – nome de variável ou procedimento;
Como construir um compilador utilizando ferramentas Java – p. 11/2
24. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
y2 – nome de variável ou procedimento;
true – constante booleana;
Como construir um compilador utilizando ferramentas Java – p. 11/2
25. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
y2 – nome de variável ou procedimento;
true – constante booleana;
begin – palavra reservada.
Como construir um compilador utilizando ferramentas Java – p. 11/2
26. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
y2 – nome de variável ou procedimento;
true – constante booleana;
begin – palavra reservada.
A descrição da linguagem diz quais são os símbolos
válidos e o que significam
Como construir um compilador utilizando ferramentas Java – p. 11/2
27. Análise léxica
123 x1 ; y2 true begin
123 – constante inteira;
x1 – nome de variável ou procedimento;
; – símbolo especial “ponto-e-vírgula”;
y2 – nome de variável ou procedimento;
true – constante booleana;
begin – palavra reservada.
A descrição da linguagem diz quais são os símbolos
válidos e o que significam
Erros léxicos
Como construir um compilador utilizando ferramentas Java – p. 11/2
28. Nem tudo é tão simples
123x1begin(end
Como construir um compilador utilizando ferramentas Java – p. 12/2
29. Nem tudo é tão simples
123x1begin(end
123 – constante inteira;
Como construir um compilador utilizando ferramentas Java – p. 12/2
30. Nem tudo é tão simples
123x1begin(end
123 – constante inteira;
x1begin – nome de variável ou procedimento;
Como construir um compilador utilizando ferramentas Java – p. 12/2
31. Nem tudo é tão simples
123x1begin(end
123 – constante inteira;
x1begin – nome de variável ou procedimento;
( – símbolo especial “abre parênteses”;
Como construir um compilador utilizando ferramentas Java – p. 12/2
32. Nem tudo é tão simples
123x1begin(end
123 – constante inteira;
x1begin – nome de variável ou procedimento;
( – símbolo especial “abre parênteses”;
end – palavra reservada.
Como construir um compilador utilizando ferramentas Java – p. 12/2
33. Estados do analisador léxico
"Aqui @ temos uma arroba"
/* Isso é um comentário */
Como construir um compilador utilizando ferramentas Java – p. 13/2
34. Analisador sintático
O AL não se preocupa em verificar se a ordem em que
os símbolos aparecem é válida ou não.
Como construir um compilador utilizando ferramentas Java – p. 14/2
35. Analisador sintático
O AL não se preocupa em verificar se a ordem em que
os símbolos aparecem é válida ou não.
O analisador sintático é o “coração” do compilador,
responsável por verificar se a seqüência de símbolos
contida no programa fonte forma um programa válido ou
não.
Como construir um compilador utilizando ferramentas Java – p. 14/2
36. Análise sintática
if (a - 10 > b * 2)
a = b;
O AS deve ser capaz de analisar esse programa e
reconhecê-lo como válido.
Após a palavra reservada if deve vir um “(”
Uma expressão
Um “)”
Um comando qualquer (por exemplo “a = b”)
Como construir um compilador utilizando ferramentas Java – p. 15/2
37. Descrição da linguagem
O AS é construído sobre uma gramática livre de
contexto que descreve a linguagem fonte.
Essa gramática é composta de uma série de regras que
descrevem quais são as construções válidas da
linguagem.
O AS deve aceitar aqueles programas que seguem
essas regras e rejeitar – indicando a ocorrência de um
erro sintático – aqueles que as violam.
Como construir um compilador utilizando ferramentas Java – p. 16/2
38. árvore sintática
O AS desempenha ainda outra importante função que é
a construção da árvore sintática(árvore de derivação) do
programa fonte.
Uma árvore sintáticaé uma estrutura em forma de
árvore que descreve as construções da linguagem
reconhecidas pelo AS no programa fonte.
Se o programa fonte possui um comando if como
aquele visto há pouco, sua árvore sintática deve
espelhar esse fato e descrever como esse comando é
formado.
Como construir um compilador utilizando ferramentas Java – p. 17/2
40. O analisador semântico
O analisador semântico (ASem) verifica se os aspectos
semânticos do programa estão corretos, ou seja, se não
existem incoerências quanto ao significado das
construções utilizadas pelo programador.
Como construir um compilador utilizando ferramentas Java – p. 19/2
41. O analisador semântico
O analisador semântico (ASem) verifica se os aspectos
semânticos do programa estão corretos, ou seja, se não
existem incoerências quanto ao significado das
construções utilizadas pelo programador.
Não utiliza mais o programa fonte para fazer tal
verificação. Em vez disso, utiliza a árvore sintática como
representação do programa.
Como construir um compilador utilizando ferramentas Java – p. 19/2
42. Análise semântica
Tipos de operandos incompatíveis com operadores. Se
tivermos o comando a = b * c e a variável c foi declarada
do tipo string, então o analisador semântico deve
apontar um erro semântico, pois esse tipo de operando
não é compatível com o operador *
Como construir um compilador utilizando ferramentas Java – p. 20/2
43. Análise semântica
Tipos de operandos incompatíveis com operadores. Se
tivermos o comando a = b * c e a variável c foi declarada
do tipo string, então o analisador semântico deve
apontar um erro semântico, pois esse tipo de operando
não é compatível com o operador *
Variáveis não declaradas.
Como construir um compilador utilizando ferramentas Java – p. 20/2
44. Análise semântica
Tipos de operandos incompatíveis com operadores. Se
tivermos o comando a = b * c e a variável c foi declarada
do tipo string, então o analisador semântico deve
apontar um erro semântico, pois esse tipo de operando
não é compatível com o operador *
Variáveis não declaradas.
Redeclaração de variáveis.
Como construir um compilador utilizando ferramentas Java – p. 20/2
45. Análise semântica
Tipos de operandos incompatíveis com operadores. Se
tivermos o comando a = b * c e a variável c foi declarada
do tipo string, então o analisador semântico deve
apontar um erro semântico, pois esse tipo de operando
não é compatível com o operador *
Variáveis não declaradas.
Redeclaração de variáveis.
Chamadas de funções ou métodos com o número
incorreto de parâmetros.
Como construir um compilador utilizando ferramentas Java – p. 20/2
46. Análise semântica
Tipos de operandos incompatíveis com operadores. Se
tivermos o comando a = b * c e a variável c foi declarada
do tipo string, então o analisador semântico deve
apontar um erro semântico, pois esse tipo de operando
não é compatível com o operador *
Variáveis não declaradas.
Redeclaração de variáveis.
Chamadas de funções ou métodos com o número
incorreto de parâmetros.
Comandos colocados fora de contexto. Por exemplo, a
utilização de um comando continue fora de um comando
de laço deve ser apontada como um erro semântico.
Como construir um compilador utilizando ferramentas Java – p. 20/2
47. Erros semânticos
Esses erros não são detectados pelo AS, pois não
constituem erros sintáticos. De acordo com a gramática da
linguagem fonte, uma variável c pode ser utilizada em uma
expressão como a = b * c, não importando se foi
declarada anteriormente ou não, ou qual é o seu tipo.
Como construir um compilador utilizando ferramentas Java – p. 21/2
48. Tabela de símbolos
Para desempenhar seu papel, o ASem depende de uma
tabela de símbolos.
Nela são armazenadas informações de variáveis
declaradas, funções ou métodos, tipos ou classes.
Ao analisar o comando a = b * c (ou melhor, a árvore
sintática correspondente a esse comando), o ASem
precisa saber se cada uma das variáveis envolvidas foi
previamente declarada e o tipo de cada uma delas.
O ASem deve, ao analisar um comando de declaração
como int c, incluir na tabela de símbolos a variável c,
indicando, entre outras coisas, que seu tipo é int.
Como construir um compilador utilizando ferramentas Java – p. 22/2
49. O gerador de código
Uma vez verificado que não existem erros sintáticos ou
semânticos, o compilador pode realizar sua tarefa, que é
a criação do programa objeto.
Como construir um compilador utilizando ferramentas Java – p. 23/2
50. O gerador de código
Uma vez verificado que não existem erros sintáticos ou
semânticos, o compilador pode realizar sua tarefa, que é
a criação do programa objeto.
O programa objeto reflete, mediante instruções de baixo
nível, os comandos do programa fonte. Como cada
máquina ou cada plataforma possui um conjunto
diferente de instruções e de meios de acesso ao
sistema operacional, em geral é necessário que exista
um gerador de código distinto para cada plataforma.
Como construir um compilador utilizando ferramentas Java – p. 23/2
51. JavaCC
Programa é um gerador de compiladores, ou mais
precisamente um gerador de analisador sintático.
Ele toma como entrada uma gramática e transforma-a
num programa Java capaz de analisar um arquivo e
dizer se satisfaz ou não as regras especificadas nessa
gramática.
Ele também oferece facilidades para a construção da
árvore sintática. Ao descrever a gramática, pode-se
também indicar como a árvore sintática deve ser
construída, incorporando-se código para realizar tal
tarefa ao analisador sintático gerado.
Como construir um compilador utilizando ferramentas Java – p. 24/2
52. Próximo passo
Vamos definir uma linguagem de programação que será
usada como estudo de caso durante o curso.
Ver Capítulo 2 do livro.
Como construir um compilador utilizando ferramentas Java – p. 25/2