Construção de uma linguagem baseada em Java denominada J4CV para Visão Computacional

Tamanho: px
Começar a partir da página:

Download "Construção de uma linguagem baseada em Java denominada J4CV para Visão Computacional"

Transcrição

1 FACULDADE DE INFORMÁTICA DE PRESIDENTE PRUDENTE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Construção de uma linguagem baseada em Java denominada J4CV para Visão Computacional RICARDO FLORÊNCIO MIRANDA Presidente Prudente SP 2006

2 FACULDADE DE INFORMÁTICA DE PRESIDENTE PRUDENTE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO Construção de uma linguagem baseada em Java denominada J4CV para Visão Computacional RICARDO FLORÊNCIO MIRANDA Trabalho de Conclusão de Curso apresentado ao curso de Bacharelado em Ciência da Computação como requisito parcial para a sua conclusão. Orientadores: MSc. Francisco Assis da Silva MSc. Leandro Luiz de Almeida MSc. Ana Paula D. Parizoto Fabrin Presidente Prudente SP 2006

3 0004 Miranda, Ricardo Florêncio. Construção de uma linguagem baseada em Java denominada J4CV para Visão Computacional / Ricardo Florêncio Miranda. Presidente Prudente : Unoeste, n.º de folhas : 121f : Il Trabalho de Conclusão de Curso (Graduação em Ciência da Computação) Universidade do Oeste Paulista UNOESTE: Presidente Prudente SP, Bibliografia 1. Visão Computacional, 2. Compiladores. I. Autor. II. Título.

4 DEDICATÓRIA Dedico este trabalho a minha mãe Dulcimar e ao meu pai Lúcio, que sempre me apoiaram e fizeram o possível para que eu conseguisse superar todos os obstáculos da minha vida. Aos meus irmãos Vinícius e Rafaela, que são pessoas com quem sempre posso contar. E aos meus amigos da faculdade que sempre estiveram do meu lado e me proporcionaram muitos momentos de alegria e companheirismo: Berne, Betão, Borges, Eduardo, Gaúcho, PH, Élton, Billy, Marcelo e outros que fazem parte de boas histórias.

5 AGRADECIMENTOS Ao professor orientador, MSc. Francisco Assis da Silva que, sempre acreditou em mim e no meu trabalho. À professora orientadora, MSc. Ana Paula D. Parizoto Fabrin, e ao professor orientador, MSc. Leandro Luiz de Almeida, por todo apoio e ajuda prestada.

6 [...] É muito melhor arriscar coisas grandiosas, alcançar triunfos e glórias, mesmo expondo-se a derrota, do que formar fila com os pobres de espírito que nem gozam muito nem sofrem muito, porque vivem nessa penumbra cinzenta que não conhece vitória nem derrota.[...] Theodore Roosevelt

7 RESUMO O desenvolvimento de uma aplicação em Java usando algoritmos de Visão Computacional é relativamente demorado na sua concepção, pois estes algoritmos devem ser implementados desde o princípio. Desta forma, pensou-se em criar uma linguagem denominada J4CV (Java For Computational Vision) para auxiliar no desenvolvimento de aplicações de Visão Computacional sob a linguagem Java. Para tanto, idealizou-se a construção de uma ferramenta que melhore o processo de desenvolvimento de uma aplicação na área de Visão Computacional. Os códigos-fonte deste tipo de aplicação são relativamente complexos e, conseqüentemente, necessitam de algum esforço por parte do programador. Objetiva-se com a ferramenta atender as necessidades de usuários com conhecimento, no mínimo, básico em programação Java. Assim, é possível que profissionais fora da área da computação como engenharia cartográfica, engenharia elétrica, etc. desenvolvam seus projetos de Visão Computacional. A ferramenta consiste em um ambiente de desenvolvimento onde o programador deverá inserir seu código-fonte Java nativo juntamente com os comandos e especificações da linguagem J4CV. Estes comandos representam os códigos-fonte dos algoritmos muitas vezes complexos de Visão Computacional. O compilador do ambiente analisa o código-fonte escrito pelo programador e após a análise léxica e sintática, gera o código-fonte final totalmente em Java nativo da aplicação desejada. Palavras-Chave: Java. Compiladores. JAI. Visão Computacional.

8 ABSTRACT The Java application development using Computational Vision algorithms is relatively slow, because these algorithms should be implemented from the beginning. This way, it was think in creating a language named J4CV (Java For Computational Vision) to aid in the development of Computational Vision applications under the Java language. It was idealized the construction of a tool that improves the development process of an application in Computational Vision area. The sourcecodes of this kind of application are relatively complex and, consequently, they need some effort of the programmer. It is aimed at with the tool to take care of the users needs with knowledge, at minimum, basic in Java programming. Like this, it is possible that professionals out of the computation area as cartographic engineering, electric engineering, etc. they develop their Computation Vision projects. The tool consists of a development environment where the programmer should insert your native Java source-code together with the J4CV language commands and specifications. These commands represent the algorithms source-code many times complex of Computation Vision. The environment compiler analyzes the source-code written by the programmer and after the lexical and syntactic analysis it generates the final source-code totally in native Java of the desired application. Key-Words: Java. Compilers. JAI. Computational Vision.

9 LISTA DE TABELAS Tabela 1 Tabela de Tokens, Padrões e Lexemas Tabela 2 Tokens da linguagem J4CV Tabela 2 Tokens da linguagem J4CV (continuação) Tabela 3 Tabela Preditiva - parte Tabela 3 Tabela Preditiva - parte 1 (continuação) Tabela 4 Tabela Preditiva - parte Tabela 5 Tabela Preditiva - parte

10 LISTA DE FIGURAS Figura 1 Estrutura de um Compilador (Aho, 1986) Figura 2 Analisador Léxico (Aho, 1986) Figura 3 Máscaras de Filtros Passa-Baixa Figura 4 Figura com Ruído Figura 5 Aplicação do Filtro Passa-baixa Figura 6 Código do Filtro Passa-Alta Figura 7 Código de Abrir Imagem em Nova Janela Figura 8 Código de Detecção de Bordas Figura 9 Máscaras de Sobel Figura 10 Máscaras de Roberts Figura 11 Lena Figura 12 Aplicação de Detecção de Bordas Figura 13 Código da operação de Zoom Figura 14 Aplicação de Zoom in (ampliação) sobre a Figura Figura 15 Código de Translação Figura 16 Aplicação da Translação sobre a Figura Figura 17 Código de Rotação Figura 18 Aplicação da Rotação de 90 graus sobre a Figura Figura 19 Código de Warping Figura 20 Aplicação do Warping sobre a figura Figura 21 Código de Luminância Figura 22 Código de Quantização de Cores Figura 23 Código de Adição de Quantidade de Cores (vermelho, verde e azul) em uma Imagem Figura 24 Código de Subtração que remove todo o verde de uma imagem Figura 25 Multiplicação por 1R1G2B Figura 26 Divisão por 2R1G1B Figura 27 Lógica Figura 28 Lógica Figura 29 Operação Lógica AND das figuras 27 e Figura 30 Operação Lógica OR das figuras 27 e Figura 31 BNF da Linguagem J4CV Figura 32 Conjunto de Firsts definidos para a linguagem J4CV Figura 33 Conjunto dos Follows definido para a linguagem J4CV Figura 34 Código-fonte Java do comando #Afinamento(PlanarImage fonte, double vetor[]) Figura 35 Código-fonte Java do comando #Luminancia(PlanarImage fonte) Figura 36 Código-fonte Java gerado pelo comando #AND(PlanarImage img1, PlanarImage img2) Figura 37 Código-fonte Java gerado pelo comando #OR(PlanarImage img1, PlanarImage img2) Figura 38 Código-fonte Java gerado pelo comando #XOR(PlanarImage img1, PlanarImage img2) Figura 39 Código-fonte Java gerado pelo comando #Convolucao(PlanarImage fonte, float mascara[], int x, int y)

11 Figura 40 Código-fonte Java gerado pelo comando #detecbordas(planarimage fonte, float MascaraHorizontal[], int tamh, float MascaraVertical[], int tamv). 55 Figura 41 Código-fonte Java gerado pelo comando #Adicao(PlanarImage img1, PlanarImage img2) Figura 42 Código-fonte Java gerado pelo comando #Subtracao(PlanarImage img1, PlanarImage img2) Figura 43 Código-fonte Java gerado pelo comando #Multiplicacao(PlanarImage img1, PlanarImage img2) Figura 44 Código-fonte Java gerado pelo comando #Divisao(PlanarImage img1, PlanarImage img2) Figura 45 Código-fonte Java gerado pelo comando #Inverter(PlanarImage fonte) Figura 46 Código-fonte Java gerado pelo comando #Zoom(PlanarImage fonte, float Z) Figura 47 Código-fonte Java gerado pelo comando #Rotacao(PlanarImage fonte, int value) Figura 48 Código-fonte Java gerado pelo comando #Quantizacao(PlanarImage fonte, int qtd) Figura 49 Código-fonte Java gerado pelo comando #salvarbmp(planarimage fonte, String destino) Figura 50 Código-fonte Java gerado pelo comando #salvarjpg(planarimage fonte, String destino) Figura 51 Código-fonte Java gerado pelo comando #salvartiff(planarimage fonte, String destino) Figura 52 Código-fonte Java gerado pelo comando #abririmagem() Figura 53 Código-fonte Java gerado pelo comando #abririmagemmdi(planarimage fonte) Figura 54 Código-fonte Java gerado pelo comando #abririmagemframe(planarimage fonte) Figura 55 Código-fonte Java gerado pelo comando #paramatriz(planarimage Imagem, int X, int Y) Figura 56 Código-fonte Java gerado pelo comando #paraimagem(int matriz[][][], int X, int Y) Figura 57 Código-fonte Java gerado pelo comando #Adicao no comando #Menu Figura 58 Código-fonte Java gerado pelo comando #Subtracao no comando #Menu Figura 59 Código-fonte Java gerado pelo comando #Multiplicacao no comando #Menu Figura 60 Código-fonte Java gerado pelo comando #Divisao no comando #Menu Figura 61 Código-fonte Java gerado pelo comando #AND no comando #Menu Figura 62 Código-fonte Java gerado pelo comando #OR no comando #Menu.. 71 Figura 63 Código-fonte Java gerado pelo comando #XOR no comando #Menu

12 Figura 64 Código-fonte Java gerado pelo comando #Inverter no comando #Menu Figura 65 Código-fonte Java gerado pelo comando #Afinamento no comando #Menu Figura 66 Código-fonte Java gerado pelo comando #Quantizacao no comando #Menu Figura 67 Código-fonte Java gerado pelo comando #Rotacao no comando #Menu Figura 68 Código-fonte Java gerado pelo comando #Zoom no comando #Menu Figura 69 Código-fonte Java gerado pelo comando #Luminancia no comando #Menu Figura 70 Código-fonte Java gerado pelo comando #detecbordas no comando #Menu Figura 71 Código-fonte Java gerado pelo comando #abririmagem no comando #Menu Figura 72 Código-fonte Java gerado pelo comando #salvarjpg no comando #Menu Figura 73 Código-fonte Java gerado pelo comando #salvarbmp no comando #Menu Figura 74 Código-fonte Java gerado pelo comando #salvartiff no comando #Menu Figura 75 Código-fonte Java gerado pelo comando #FiltroPassaBaixa no comando #Menu Figura 76 Código-fonte Java gerado pelo comando #FiltroPassaAlta no comando #Menu Figura 77 Código-fonte Java gerado pelo comando #FiltroLaplaciano no comando #Menu Figura 78 Código do usuário mostrando como usar o #Menu sem usar outro comando da linguagem Figura 79 Método gerado pelo comando #Menu quando este não usar outro comando da linguagem Figura 80 Classes geradas para trabalhar com janelas ativas Figura 80 Classes geradas para trabalhar com janelas ativas (continuação) Figura 81 Tela principal da Ferramenta Figura 82 Código padrão gerado pela ferramenta Figura 83 Botões de Funções da Ferramenta Figura 84 Editor do Construtor do Código Figura 85 Tela para Adicionar ou Remover Imports adicionados pelo Usuário..89 Figura 86 Tela para Instanciar Variáveis Figura 87 Tela para alterar o nome da Classe a ser gerada Figura 88 Código-fonte do usuário na Ferramenta Figura 88 Código-fonte do usuário na Ferramenta (continuação) Figura 89 Nome da Classe a ser gerada Figura 90 Import adicionado para o exemplo Figura 91 Código adicionado no construtor da ferramenta para o exemplo Figura 92 Botão Gerar Código

13 SUMÁRIO 1. INTRODUÇÃO Objetivos, Justificativas e Motivações do Projeto Formulação do problema Objetivos do projeto Justificativas do projeto A Estrutura desta Monografia CONCEITOS BÁSICOS O Pacote JAI (Java Advanced Imaging) Histórico Características Compilador Orientado a Objetos Implementação de um compilador e suas fases Análise léxica Tokens, padrões e lexemas Erros léxicos Análise sintática Top-Down (análise descendente) Análise semântica ALGORITMOS DE VISÃO COMPUTACIONAL IMPLEMENTADOS EM JAI Filtro Passa-baixa Filtro Passa-alta Abrir Imagem Detecção de Bordas Ampliação e Redução (Zoom) Translação Rotação Warping Luminância Quantização de Cores Formato de Imagem BMP Formato de Imagem TIFF Formato de Imagem JPEG Operações Aritméticas e Lógicas Operações aritméticas pixel a pixel Adição Subtração Multiplicação Divisão Operações lógicas pixel a pixel A LINGUAGEM J4CV Compilador Comandos A Ferramenta UM ESTUDO DE CASO CONCLUSÕES... 94

14 REFERÊNCIAS BIBLIOGRÁFICAS Anexo... 96

15 13 1. INTRODUÇÃO 1.1 Objetivos, Justificativas e Motivações do Projeto Formulação do problema Para se desenvolver uma aplicação em Java usando Visão Computacional leva-se muito tempo para a programação e os algoritmos de Visão Computacional geralmente devem ser implementados desde o princípio. Uma aplicação em Java é relativamente complexa e exige um certo conhecimento por parte do programador, com isso pessoas fora da área da computação como profissionais da Engenharia Elétrica, Cartografia, etc. têm dificuldade em desenvolver aplicações de Visão Computacional nas suas áreas afins Objetivos do projeto O principal objetivo deste projeto é criar uma linguagem (J4CV Java For Computational Vision, assim nomeada) para auxiliar no desenvolvimento de aplicações de Visão Computacional sob a linguagem Java. Esta linguagem apresenta simplicidade na escrita, possuindo comandos para diversas funcionalidades da área de Visão Computacional. Além da definição dos comandos da linguagem, fora construído um compilador. Este compilador é capaz de gerar um código-fonte final totalmente em Java, baseado nos comandos da J4CV e nos códigos-fonte Java nativos. A idéia é que o programador possa misturar códigos nativos de Java com os comandos da linguagem J4CV. Para os algoritmos de Visão Computacional foi utilizado o pacote JAI (Java Advanced Imaging). Este pacote Java possui classes e métodos para a construção dos principais algoritmos de Visão Computacional e Processamento Digital de Imagens, porém, para utilizá-los é necessário um forte conhecimento na área em questão e em Java.

16 Justificativas do projeto A linguagem desenvolvida busca eliminar a complexidade da construção de aplicações Java, principalmente para facilitar o desenvolvimento de aplicações que envolvam algoritmos de Visão Computacional, devido ao fato da linguagem construída possuir comandos fáceis de serem usados. Esses comandos são a representação de códigos complexos relacionados com processamento digital de imagens. 1.2 A Estrutura desta Monografia Além deste primeiro capítulo introdutório, este documento apresenta no capítulo 2 os conceitos básicos, como histórico e características do pacote JAI utilizado no projeto e uma introdução em compiladores, onde são descritas as fases de um compilador e tipos de análises de um compilador. O documento mostra também alguns algoritmos de Visão Computacional implementados pelo JAI (capítulo 3), como é a linguagem criada J4CV, descrevendo a implementação do compilador da ferramenta, os comandos implementados para ela e como é a ferramenta, sua interface, funções e limitações (capítulo 4). Por fim, o capítulo 5 mostra um estudo de caso desenvolvido e o último capítulo mostra as conclusões obtidas no desenvolvimento da linguagem.

17 15 2. CONCEITOS BÁSICOS 2.1 O Pacote JAI (Java Advanced Imaging) Histórico De acordo com Sun (2006) as primeiras versões do Java AWT não disponibilizavam os recursos necessários para o tratamento complexo de imagens. O Java 2D adicionou a esses recursos algumas classes especiais para a definição de primitivas geométricas, layout de texto bem como a definição de fontes, cores e imagens renderizadas. Essas novas classes suportam um limitado conjunto de operações de processamento de imagens, entre as quais podem ser citadas: borramento, contraste e transformações geométricas. O JAI (Java Advanced Imaging) API 1, incluiu a plataforma Java 2D, além de permitir sofisticados processamentos de imagens com alto desempenho para serem incorporados a applets 2 Java e em aplicações Java. O JAI encapsula os formatos dos dados das imagens e os métodos remotos de chamada, permitindo assim que um arquivo de imagem, uma imagem de um objeto de rede ou um simples fluxo real de tempo sejam processados de maneira idêntica. Entretanto, o JAI representa um simples modelo de programação que oculta a complexidade dos mecanismos internos. A verdadeira intenção do JAI é suprir todas as necessidades das aplicações de processamento de imagens, eliminando assim todas as funcionalidades que os desenvolvedores precisavam incorporar dentro de suas applets e de suas aplicações Características O JAI apresenta algumas vantagens em relação às outras soluções de processamento de imagens. Entre as quais se destacam: interoperabilidade, 1 API (Aplication Programming Interface) é um conjunto de rotinas e padrões estabelecidos por um software para utilização de suas funcionalidades por programas aplicativos. 2 Applets mini programas (scripts) que utilizam uma interface de entrada e/ou saída com o código intermediário Java que é executado pelo browser.

18 16 imagens distribuídas, orientação a objetos, flexibilidade e extensibilidade, dispositivos independentes, multi-plataforma, alto desempenho e o alto poder de processamento. Dentre as diversas vantagens existentes pode-se destacar a característica multi-plataforma, pois a maioria das outras API s são desenvolvidas para um sistema operacional específico, porém a API em questão, segue o modelo de biblioteca adotada pelo Java, propiciando que a mesma funcione em qualquer plataforma. As aplicações poderão ser executadas em qualquer computador que possua a Máquina Virtual Java (JVM Java Virtual Machine). Devido a esta característica o desenvolvedor terá a oportunidade de desenvolver em sua plataforma preferida e executar o aplicativo na plataforma necessária. Outra característica que merece devida importância é a orientação a objetos. Nesta API as imagens e o processamento de imagens são definidos como objetos. O JAI unifica noções de imagens e operações fazendo as subclasses terem uma hierarquia em comum. Um operador de objeto é instanciado com um ou mais recursos de imagens e outros parâmetros. As conexões entre os objetos definem o fluxo do processamento de dados. A flexibilidade e a extensibilidade podem ser conceituadas como a capacidade que o JAI possui de suportar algumas tecnologias básicas de imagens tais como a manipulação básica, a manipulação geométrica e a análise. A API em questão fornece um núcleo contendo um conjunto de operações requeridas que disponibilizam essas tecnologias básicas de imagens. O JAI API também fornece um conjunto padrão de métodos para a compressão e a descompressão de imagens. O conjunto de métodos desenvolvidos é baseado em padrões internacionais para a maioria dos tipos de compressão de arquivos. O poder de processamento do JAI é explicitado pela capacidade de suporte a complexos formatos de imagens, incluindo imagens de três dimensões. Muitas classes de algoritmos de imagens são suportadas diretamente enquanto outras são adicionadas à medida que forem sendo necessárias.

19 17 O JAI implementa um conjunto de funcionalidades para processamento de imagens, incluindo regiões de interesse. Além disso, disponibiliza funções de processamento incluindo ponto comum, área e operações de freqüência. Outra característica importante é o alto desempenho que inclui uma alta variedade de implementações que são possíveis, incluindo implementações altamente otimizadas possuindo como vantagem uma aceleração do hardware. Essa API também possui como benefício à interoperabilidade, pois o JAI integra-se com as outras API s do Java como o Java 3D. Isso permite que imagens sofisticadas sejam parte da caixa de ferramenta dos programadores da tecnologia Java. Essa API é classificada como um padrão de extensão da plataforma Java. Ela disponibiliza funcionalidades que são compatíveis com essas classes na maioria dos casos. 2.2 Compilador Orientado a Objetos De acordo com Ramos (2006), um compilador é simplesmente um tradutor que recebe um programa fonte, descrito conforme a linguagem de programação, faz a tradução do mesmo e produz uma outra linguagem, a linguagem objeto, que será interpretada pela máquina. Os dois processos acontecem em momentos distintos, em um primeiro tempo de compilação e em um segundo tempo de execução Implementação de um compilador e suas fases Na maioria das vezes os tradutores de linguagem de programação são programas bastante complexos. Com o passar dos anos surgiu a necessidade de trabalhar melhor a questão e muitos estudos foram desenvolvidos, criando assim diversas teorias com intuito de estruturar um tradutor em fases. Nessa estrutura estão todas as funções básicas do tradutor, divididas na fase de análise e outra de síntese, conforme ilustrado na Figura 1.

20 18 Figura 1 Estrutura de um Compilador (Aho, 1986) Análise léxica A análise léxica é a primeira fase de um compilador, segundo Delamaro (2004), o analisador léxico 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, os símbolos são chamados de tokens, os tokens constituem classes de símbolos, tais como: palavras reservadas, delimitadores, identificadores entre outros, já outras classes de símbolos são descartadas durante o processo léxico, como espaços em brancos, tabulações, caracteres de avanço de linha e comentários, todos os

21 19 tokens encontrados são inseridos em uma tabela interna, tanto para indicar erros léxicos como para servir de entrada para o analisador sintático. Pode ser observado na Figura 2 o funcionamento do analisador léxico. Figura 2 Analisador Léxico (Aho, 1986). As linhas do programa fonte devem ser controladas e armazenadas durante a varredura da análise léxica, pois os erros de análise sintática e/ou análise léxica podem estar associados ao programa fonte Tokens, padrões e lexemas Na análise léxica são utilizados os termos tokens, padrões e lexemas, onde cada termo possui um significado específico, de forma que, os tokens são símbolos terminais na gramática para a linguagem fonte, como palavras-chave, operadores, identificadores, constantes, literais, cadeias e símbolos de pontuação (por exemplo: parênteses, vírgulas e ponto e vírgulas). Padrão é uma regra que descreve o conjunto de lexemas que podem representar um token particular no programa fonte. Lexema é o conjunto de caracteres no programa fonte que é reconhecido pelo padrão de algum token, por exemplo, pi =3.1415; a subcadeia pi é um lexema para o token identificador. Alguns exemplos de tokens e lexemas são mostrados na Tabela 1.

22 20 Tabela 1 Tabela de Tokens, Padrões e Lexemas Token Lexemas Descrição informal do Padrão Se Se Se Classe Classe Classe Id pi, contador, i, x Letra seguida por letras e/ou dígitos. Num , 0, E2 Qualquer constante numérica. Literal mensagem Quaisquer caracteres entre aspas, exceto as aspas. A formalização de um padrão de um determinado token é descrita por meio de expressões regulares 1. O reconhecimento de tokens é realizado a partir de regras de produção do tipo BNF (Backus Naur Form) ou até mesmo por meio de um Autômato Finito Determinístico (AFD) Erros léxicos Poucos erros são distingüíveis somente no nível léxico, considerando que o analisador léxico possui uma visão muito local do programa fonte, um erro comum é alguma cadeia que aparece na entrada não pode ser reconhecida como um token válido. Por exemplo a cadeia: Análise sintática A análise sintática é a segunda fase do compilador, muitos autores a chamam de coração de um compilador, por meio da tabela de símbolos e/ou árvore sintática, ela vai analisar o programa fonte e verificar se este pertence ou não a linguagem desejada, se a cadeia de tokens pode ser gerada pela gramática da linguagem fonte e relatar quaisquer erros de sintaxe de forma inteligível. As vantagens da utilização das gramáticas na análise sintática é que ela oferece uma especificação sintática precisa e fácil de entender, o processo de construção do analisador pode revelar ambigüidades sintáticas, bem como outras dificuldades difíceis de serem detectadas que auxilia na detecção de erros. 1 Expressões Regulares são métodos formais para se especificar um padrão de texto. Facilitam comparações em um texto, auxiliando na busca de uma palavra ou parte dela.

23 21 Segundo Price (2000), o analisador sintático identifica seqüências de símbolos que constituem estruturas sintáticas (por exemplo expressões e comandos), por meio de uma varredura ou parsing da representação interna (cadeia de tokens) do programa fonte. O analisador sintático produz uma estrutura de árvore, chamada árvore de derivação, que exibe a estrutura sintática do textofonte, resultante da aplicação das regras gramaticais da linguagem. A árvore de sintaxe visa eliminar redundâncias e elementos supérfluos. Esta estrutura objetiva facilitar a geração do código que é a fase seguinte. Os analisadores sintáticos devem ser projetados de forma que os mesmos possam trabalhar de forma robusta, que consigam prosseguir na análise, até o fim do programa, mesmo que encontre erros sintáticos no códigofonte. Existem para isso duas estratégias bastante utilizadas para a análise sintática: Top-Down ou descendente: analisa a gramática desde seu início até o seu fim, construindo sua árvore de derivação a partir do símbolo inicial da gramática, fazendo com que ela cresça até atingir suas folhas; Bottom-Up ou redutiva: analisa a gramática do fim para o seu começo, a partir dos tokens de derivação do código-fonte, constrói a árvore até o símbolo inicial da gramática Top-Down (análise descendente) A análise Top-Down pode ser vista como uma tentativa de se encontrar uma derivação mais a esquerda para uma cadeia de entradas, segundo Aho (1986), a análise Top-Down pode ainda ser vista numa tentativa de se construir uma árvore gramatical, para a cadeia de entrada, a partir da raiz, criando nós da árvore gramatical em pré-ordem. Existem três tipos de analisadores sintáticos descendentes: recursivo com retrocesso (backtracking); recursivo preditivo;

24 22 tabular preditivo. Os dois primeiros tipos, trabalham de forma onde cada símbolo nãoterminal é implementado por um procedimento que realiza o reconhecimento do(s) lado(s) direito(s) das produções que definem o símbolo em questão. Já o terceiro tipo, é implementado utilizando-se um autômato de pilha controlado por uma tabela de análise, indicando a regra de produção a ser aplicada relativa ao símbolo não-terminal que se encontra no topo da pilha. A análise recursiva com retrocesso faz a expansão da árvore de derivação a partir da raiz, crescendo sempre pelo não-terminal mais à esquerda. Prince (2000) diz mais, que quando existe uma regra de produção para o nãoterminal a ser expandido, a opção escolhida é função do símbolo corrente na fita de entrada (token sob o cabeçote de leitura). Se o token de entrada não define univocamente a produção a ser usada, então todas as alternativas vão ser tentadas até que se obtenha sucesso (ou até que se falhe irremediavelmente). Segundo Takehana (2004), em muitos casos, escrevendo-se cuidadosamente uma gramática eliminando-se a recursão à esquerda e fatorandose à esquerda a gramática resultante, pode-se obter uma nova gramática processável por um analisador sintático de descendência recursiva que não necessite de retrocesso, ou seja, um analisador sintático preditivo. Assim, a alternativa adequada precisa ser detectável examinando apenas para o primeiro símbolo da cadeia que a mesma deriva. Por exemplo: cmd if... while begin end As palavras chaves if, while e begin informam qual é a única alternativa que possivelmente teria sucesso no momento de encontrar um comando. Os analisadores Recursivos Preditivos não possuem retrocessos, são recursivos sem retrocesso, para eles o símbolo sobre o cabeçote de leitura determina exatamente qual produção deve ser aplicada na expansão de cada não-terminal, para que eles possam trabalhar dessa forma a gramática a ser analisada não pode possuir recursividade à esquerda, deve estar fatorada à esquerda e que não exista para os não-terminais mais de uma regra de produção, para os não terminais.

25 23 Na análise Preditiva Tabular é possível construir analisadores preditivos não recursivos que utilizam uma pilha explícita ao invés de chamadas recursivas (pilha implícita). Esse tipo de analisador implementa um autômato de pilha controlado por uma tabela de análise. O princípio do reconhecimento preditivo é a determinação da produção a ser aplicada, cujo lado direito irá substituir o símbolo não-terminal que se encontra no topo da pilha. O analisador busca a produção a ser aplicada na tabela de análise, levando em conta o nãoterminal no topo da pilha e o token sob o cabeçote de leitura. O analisador preditivo compreende uma fita de entrada, uma pilha e uma tabela de análise. A fita de entrada contém a sentença a ser analisada seguida de $, símbolo que marca o fim da sentença. A tabela de análise é uma matriz M com n linhas e t+1 colunas, onde n é o número de símbolos não-terminais e t, o número de terminais, a coluna extra corresponde ao $. Segundo Price (2000), a implementação de um analisador preditivo tabular tem como maior dificuldade a construção da tabela de análise. Para construir essa tabela, é necessário computar duas funções associadas à gramática: as funções FIRST e FOLLOW. Para computar FIRST(x) para um símbolo x da gramática, aplicam-se regras até que não se possa adicionar mais terminais ou ε (símbolo que significa vazio) ao conjunto em questão. As regras são: 1. Se a é terminal, então FIRST(a) = a; 2. Se x ε é uma produção, então adicione ε a FIRST(x); 3. Se x y1y2...yk e, para algum i, todos y1y2...yi-1 derivam ε, então FIRST(yi) está em FIRST(x). Se todo yj j=1,2,...,k deriva ε, então ε está em FIRST(x). Para computar FOLLOW(x), aplicam-se regras até que não se possa adicionar mais símbolos ao conjunto em questão. As regras são:

2.1.2 Definição Matemática de Imagem

2.1.2 Definição Matemática de Imagem Capítulo 2 Fundamentação Teórica Este capítulo descreve os fundamentos e as etapas do processamento digital de imagens. 2.1 Fundamentos para Processamento Digital de Imagens Esta seção apresenta as propriedades

Leia mais

PROCESSAMENTO DIGITAL DE IMAGENS

PROCESSAMENTO DIGITAL DE IMAGENS PROCESSAMENTO DIGITAL DE IMAGENS Msc. Daniele Carvalho Oliveira Doutoranda em Ciência da Computação - UFU Mestre em Ciência da Computação UFU Bacharel em Ciência da Computação - UFJF FILTRAGEM ESPACIAL

Leia mais

Universidade Federal do Rio de Janeiro - IM/DCC & NCE

Universidade Federal do Rio de Janeiro - IM/DCC & NCE Universidade Federal do Rio de Janeiro - IM/DCC & NCE Processamento de Imagens Tratamento da Imagem - Filtros Antonio G. Thomé thome@nce.ufrj.br Sala AEP/033 Sumário 2 Conceito de de Filtragem Filtros

Leia mais

Compiladores Aula 5. Celso Olivete Júnior. olivete@fct.unesp.br

Compiladores Aula 5. Celso Olivete Júnior. olivete@fct.unesp.br Aula 5 Celso Olivete Júnior olivete@fct.unesp.br Na aula passada Conjuntos Primeiro(First) e Seguidor(Follow) 2 Na aula de hoje Análise Sintática Análise Sintática Descendente Recursividade Fatoração 3

Leia mais

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação -

Descrição Formal de Linguagens -Sumário - Descrição Formal de Linguagens. -Overview- -Overview- - Fundamentos das Linguagens de Programação - Descrição Formal de Linguagens Linguagens de Programação Ciência da Computação DIN UEM CTC Prof. Jucimar Aula 4 Descrição Formal de Linguagens -Sumário - 1. Fundamentos de Linguagens de Programação 2.

Leia mais

CORAL: PROTÓTIPO DE UMA LINGUAGEM ORIENTADA A OBJETOS USANDO GERADORES DE COMPILADORES JAVA

CORAL: PROTÓTIPO DE UMA LINGUAGEM ORIENTADA A OBJETOS USANDO GERADORES DE COMPILADORES JAVA FACULDADE DE INFORMÁTICA DE PRESIDENTE PRUDENTE CORAL: PROTÓTIPO DE UMA LINGUAGEM ORIENTADA A OBJETOS USANDO GERADORES DE COMPILADORES JAVA DIOGO BRANQUINHO RAMOS Presidente Prudente SP 2005 FACULDADE

Leia mais

FILTRAGEM ESPACIAL. Filtros Digitais no domínio do espaço

FILTRAGEM ESPACIAL. Filtros Digitais no domínio do espaço FILTRAGEM ESPACIAL Filtros Digitais no domínio do espaço Definição Também conhecidos como operadores locais ou filtros locais Combinam a intensidade de um certo número de piels, para gerar a intensidade

Leia mais

Operações Algébricas e Lógicas. Guillermo Cámara-Chávez

Operações Algébricas e Lógicas. Guillermo Cámara-Chávez Operações Algébricas e Lógicas Guillermo Cámara-Chávez Operações Aritméticas São aquelas que produzem uma imagem que é a soma, diferença, produto ou quociente pixel a pixel Operações Aritméticas Fig A

Leia mais

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES

UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES UMA BREVE INTRODUÇÃO AO ESTUDO E IMPLEMENTAÇÃO DE COMPILADORES 1 BRANCO; Guido Aparecido Junior, 2 TAMAE, Rodrigo Yoshio 1-Discente do Curso Sistemas de Informação FAEG/Garça 2-Docente do Curso Sistemas

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

4 Conversor EDTV Raw. 4.1 Arquitetura 4 Conversor EDTV Raw O conversor EDTV Raw é o programa que lê um documento escrito no perfil NCL EDTV e gera um documento Raw equivalente, i.e. que define a mesma apresentação. Este capítulo, apresenta

Leia mais

Java Como Programar, 8/E

Java Como Programar, 8/E Capítulo 2 Introdução aos aplicativos Java Java Como Programar, 8/E (C) 2010 Pearson Education, Inc. Todos os 2.1 Introdução Programação de aplicativo Java. Utilize as ferramentas do JDK para compilar

Leia mais

Introdução ao Scilab

Introdução ao Scilab Programação de Computadores 1 Capítulo 1 Introdução ao Scilab José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2014.2 1/35 1 MATLAB e Scilab 2 O ambiente Scilab 2/35

Leia mais

UFGD FCA PROF. OMAR DANIEL BLOCO 4 PROCESSAMENTO DE IMAGENS

UFGD FCA PROF. OMAR DANIEL BLOCO 4 PROCESSAMENTO DE IMAGENS UFGD FCA PROF. OMAR DANIEL BLOCO 4 PROCESSAMENTO DE IMAGENS Executar as principais técnicas utilizadas em processamento de imagens, como contraste, leitura de pixels, transformação IHS, operações aritméticas

Leia mais

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de:

Capítulo 1. Introdução. 1.1 Linguagens. OBJETIVOS DO CAPÍTULO Ao final deste capítulo você deverá ser capaz de: i Sumário 1 Introdução 1 1.1 Linguagens....................................... 1 1.2 O que é um Compilador?................................ 2 1.3 Processadores de Programas: Compiladores, Interpretadores

Leia mais

Introdução à Linguagem

Introdução à Linguagem Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:

Leia mais

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br

Linguagens de. Aula 02. Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação III Aula 02 Profa Cristiane Koehler cristiane.koehler@canoas.ifrs.edu.br Linguagens de Programação Técnica de comunicação padronizada para enviar instruções a um computador. Assim

Leia mais

Tratamento da Imagem Transformações (cont.)

Tratamento da Imagem Transformações (cont.) Universidade Federal do Rio de Janeiro - IM/DCC & NCE Tratamento da Imagem Transformações (cont.) Antonio G. Thomé thome@nce.ufrj.br Sala AEP/133 Tratamento de Imagens - Sumário Detalhado Objetivos Alguns

Leia mais

COMPILADORES E INTERPRETADORES

COMPILADORES E INTERPRETADORES Aula 16 Arquitetura de Computadores 12/11/2007 Universidade do Contestado UnC/Mafra Curso Sistemas de Informação Prof. Carlos Guerber COMPILADORES E INTERPRETADORES Um compilador transforma o código fonte

Leia mais

Capítulo 5 Filtragem de Imagens

Capítulo 5 Filtragem de Imagens Capítulo 5 Filtragem de Imagens Capítulo 5 5.1. Filtragem no Domínio da Frequência 5.2. Filtragem no Domínio Espacial 2 Objetivo Melhorar a qualidade das imagens através da: ampliação do seu contraste;

Leia mais

_PTBR. Guia de configuração de digitalização para aplicativos TWAIN

_PTBR. Guia de configuração de digitalização para aplicativos TWAIN _PTBR Guia de configuração de digitalização para aplicativos TWAIN Como usar a fonte de dados TWAIN Como iniciar a Ferramenta de validação de scanner... 2 A caixa de diálogo Ferramenta de validação de

Leia mais

Introdução a conceitos e a prática de programação

Introdução a conceitos e a prática de programação Instituto de Informática - UFG Disciplina: Introdução à Computação Introdução a conceitos e a prática de programação Autores: Marcelo Akira e Anderson Soares Fevereiro de 2011 Alguns direitos autorais

Leia mais

Filtragem. pixel. perfil de linha. Coluna de pixels. Imagem. Linha. Primeiro pixel na linha

Filtragem. pixel. perfil de linha. Coluna de pixels. Imagem. Linha. Primeiro pixel na linha Filtragem As técnicas de filtragem são transformações da imagem "pixel" a "pixel", que dependem do nível de cinza de um determinado "pixel" e do valor dos níveis de cinza dos "pixels" vizinhos, na imagem

Leia mais

Filtragem Espacial. (Processamento Digital de Imagens) 1 / 41

Filtragem Espacial. (Processamento Digital de Imagens) 1 / 41 Filtragem Espacial (Processamento Digital de Imagens) 1 / 41 Filtragem Espacial Filtragem espacial é uma das principais ferramentas usadas em uma grande variedade de aplicações; A palavra filtro foi emprestada

Leia mais

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010 Construção de Compiladores Prof. Raimundo Santos Moura (http://www.ufpi.br/rsm) Construção de Compiladores Livro-Texto: AHO, Alfred V.; ULLMAN, Jeffrey D.; SETHI, R. Compiladores: princípios, técnicas

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Java e Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas necessários...

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora

OpenGL. Uma Abordagem Prática e Objetiva. Marcelo Cohen Isabel Harb Manssour. Novatec Editora OpenGL Uma Abordagem Prática e Objetiva Marcelo Cohen Isabel Harb Manssour Novatec Editora Capítulo 1 Introdução A Computação Gráfica é uma área da Ciência da Computação que se dedica ao estudo e ao desenvolvimento

Leia mais

2. Detalhes do Griaule Forensic Fingerprint

2. Detalhes do Griaule Forensic Fingerprint Índice 1. Requisitos dos Sistema; a. Sistema Operacional; b. DotNET Framework; c. Processador; d. Memória RAM; 2. Detalhes do Griaule Forensic Fingerprint: a. Sobre; b. Funcionalidades; c. Detecção automática

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

Leia mais

Técnicas para Animação de Imagens em Jogos 2D Utilizando Java

Técnicas para Animação de Imagens em Jogos 2D Utilizando Java Técnicas para Animação de Imagens em Jogos 2D Utilizando Java Silvano Maneck Malfatti 1 1 Faculdade Católica do Tocantins (FACTO) Palmas TO Brasil Malfatti@catolica-to.edu.br Resumo. Um dos recursos que

Leia mais

TRIBUNAL DE JUSTIÇA - SC. MICROSOFT OFFICE - EXCEL 2007 Pág.: 1

TRIBUNAL DE JUSTIÇA - SC. MICROSOFT OFFICE - EXCEL 2007 Pág.: 1 EXCEL 2007 O Excel 2007 faz parte do pacote de produtividade Microsoft Office System de 2007, que sucede ao Office 2003. Relativamente à versão anterior (Excel 2003), o novo programa introduz inúmeras

Leia mais

Compiladores. A seção das regras. Especificação (F)lex. Plano da aula. Escolha das regras. Compilação típica com FLEX

Compiladores. A seção das regras. Especificação (F)lex. Plano da aula. Escolha das regras. Compilação típica com FLEX Compilação típica com FLX Compiladores Análise sintática (1) Noções sobre Gramáticas Livres de conteto dição do teto de especificação No arquivo minhas_regras.l 3 partes: Declarações Regras (Rs -> Ação)

Leia mais

Manual Processamento de Imagem. João L. Vilaça

Manual Processamento de Imagem. João L. Vilaça Manual Processamento de Imagem João L. Vilaça Versão 1.0 31/1/2014 Índice 1. Sistema de eixo e movimentos possíveis do Drone... 3 2. Imagem... 3 3. Espaços de cor... 4 4.1 RGB... 5 4.2HSV... 5 4.3 GRAY...

Leia mais

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I A Linguagem Pascal e o Ambiente de Programação Dev-Pascal Introdução à Ciência da Computação I Março/2004 Introdução (1 de 3) Homenagem a Blaise Pascal, filósofo e matemático do século XVII. Desenvolvida

Leia mais

PHP() é uma linguagem de integração de servidor que permite a criação de paginas dinâmicas. Como todas

PHP() é uma linguagem de integração de servidor que permite a criação de paginas dinâmicas. Como todas O que é PHP? Acrônimo de PHP: Hipertext Language PostProcessor Inicialmente escrita para o desenvolvimento de aplicações Web Facilidade para iniciantes e recursos poderosos para programadores profissionais

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO

.: NAPRO :. NÚCLEO DE APOIO APRENDIZAGEM DE PROGRAMAÇÃO Software Visualg 2.0 Bruno Tonet ELABORADO POR BRUNO TONET Sumário 1 - VISUALG - EDITOR E INTERPRETADOR DE ALGORITMOS... 3 1.1. OBJETIVOS... 3 2 - INSTALAÇÃO E REQUERIMENTOS DE HARDWARE... 4 3 - A TELA

Leia mais

- Aula 1 - ARQUITETURA DE COMPUTADORES

- Aula 1 - ARQUITETURA DE COMPUTADORES - Aula 1 - ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Estruturas de Dados Pilhas, Filas e Deques

Estruturas de Dados Pilhas, Filas e Deques Estruturas de Dados Pilhas, Filas e Deques Prof. Eduardo Alchieri Estruturas de Dados Pilhas Pilhas Lista LIFO (Last In, First Out) Os elementos são colocados na estrutura (pilha) e retirados em ordem

Leia mais

e à Linguagem de Programação Python

e à Linguagem de Programação Python Introdução a Algoritmos, Computação Algébrica e à Linguagem de Programação Python Curso de Números Inteiros e Criptografia Prof. Luis Menasché Schechter Departamento de Ciência da Computação UFRJ Agosto

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C Waldemar Celes e Roberto Ierusalimschy 29 de Fevereiro de 2012 1 Ciclo de desenvolvimento O modelo hipotético de computador utilizado no capítulo anterior, embora muito

Leia mais

Introdução aos cálculos de datas

Introdução aos cálculos de datas Page 1 of 7 Windows SharePoint Services Introdução aos cálculos de datas Aplica-se a: Microsoft Office SharePoint Server 2007 Ocultar tudo Você pode usar fórmulas e funções em listas ou bibliotecas para

Leia mais

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias Departamento de Engenharia Rural Centro de Ciências Agrárias Programação I Prof. Bruno Vilela Oliveira bruno@cca.ufes.br http://www.brunovilela.webnode.com.br Programas e Linguagens Para executar uma tarefa

Leia mais

Linguagens de programação

Linguagens de programação Prof. André Backes Linguagens de programação Linguagem de Máquina Computador entende apenas pulsos elétricos Presença ou não de pulso 1 ou 0 Tudo no computador deve ser descrito em termos de 1 s ou 0 s

Leia mais

Sintaxe e Semântica. Fases da Compilação. programa fonte

Sintaxe e Semântica. Fases da Compilação. programa fonte Sintaxe e Semântica mleal@inf.puc-rio.br Fases da Compilação programa fonte tokens parse tree árvore anotada ou outra forma intermediária código intermediário código objeto código objeto otimizado scanner

Leia mais

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++ Profª ª Danielle Casillo COMPILADORES Toda linguagem de programação

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

ESTUDO COMPARATIVO DE BIBLIOTECAS GRÁFICAS I TEGRADAS COM OPE GL

ESTUDO COMPARATIVO DE BIBLIOTECAS GRÁFICAS I TEGRADAS COM OPE GL ESTUDO COMPARATIVO DE BIBLIOTECAS GRÁFICAS I TEGRADAS COM OPE GL Francisco Tiago Avelar, Vitor Conrado F. Gomes, Cesar Tadeu Pozzer Universidade Federal de Santa Maria UFSM Curso de Ciência da Computação

Leia mais

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h ULA- Unidade Lógica Aritmética. Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Sumário Unidade Lógica Aritmetrica Registradores Unidade Lógica Operações da ULA Unidade de Ponto Flutuante Representação

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO Geração de código Ivan Ricarte 2008 Sumário Geração de código intermediário Código de três endereços Notação pós-fixa Otimização de código Heurísticas de otimização Geração de código em linguagem simbólica

Leia mais

INFORMAÇÕES SOBRE O MATERIAL UTILIZADO NA OBTENÇÃO E NA ANÁLISE DOS VÍDEOS

INFORMAÇÕES SOBRE O MATERIAL UTILIZADO NA OBTENÇÃO E NA ANÁLISE DOS VÍDEOS INFORMAÇÕES SOBRE O MATERIAL UTILIZADO NA OBTENÇÃO E NA ANÁLISE DOS VÍDEOS 1 Material utilizado 1.1 Tracker: um programa de análise de imagens Para a execução da proposta foi utilizado o programa livre

Leia mais

Introdução. A verificação de tipos pode ser estática e dinâmica

Introdução. A verificação de tipos pode ser estática e dinâmica Análise Semântica 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 Além disso,

Leia mais

Paradigmas de Programação

Paradigmas de Programação Paradigmas de Programação Tipos de Dados Aula 5 Prof.: Edilberto M. Silva http://www.edilms.eti.br Prof. Edilberto Silva / edilms.eti.br Tipos de Dados Sistema de tipos Tipos de Dados e Domínios Métodos

Leia mais

Engenharia de Software I

Engenharia de Software I Engenharia de Software I Rogério Eduardo Garcia (rogerio@fct.unesp.br) Bacharelado em Ciência da Computação Aula 05 Material preparado por Fernanda Madeiral Delfim Tópicos Aula 5 Contextualização UML Astah

Leia mais

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

Compiladores. Análise léxica. Plano da aula. Vocabulário básico. Motivação para análise léxica. Estrutura de um compilador Estrutura de um compilador Compiladores Análise lexical (1) Expressões Regulares 1 2 Plano da aula 1. Motivação do uso de E.R. e definições Linguagens, tokens, lexemas... 2. Regras de formação e exemplos

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Manual do Cantor. Alexander Rieder Tradução: Marcus Gama

Manual do Cantor. Alexander Rieder Tradução: Marcus Gama Alexander Rieder Tradução: Marcus Gama 2 Conteúdo 1 Introdução 5 2 Usando o Cantor 6 2.1 Recursos do Cantor..................................... 6 2.2 As infraestruturas do Cantor...............................

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

Compressão de Imagens

Compressão de Imagens Compressão de Imagens Compressão de Imagens Geradas por Computador (Gráficos) Armazenamento (e transmissão) como um conjunto de instruções (formato de programa) que geram a imagem Utilização de algum esquema

Leia mais

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos Almir Joaquim de Sousa 1, Fábio Silveira Vidal 1, Fredson Vieira Costa 1, Ranildo Costa Santana 1 Curso de Bacharelado em Ciência da Computação

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

APOSTILA PHP PARTE 1

APOSTILA PHP PARTE 1 APOSTILA PHP PARTE 1 1. Introdução O que é PHP? PHP significa: PHP Hypertext Preprocessor. Realmente, o produto foi originalmente chamado de Personal Home Page Tools ; mas como se expandiu em escopo, um

Leia mais

Introdução à Programação de Computadores

Introdução à Programação de Computadores 1. Objetivos Introdução à Programação de Computadores Nesta seção, vamos discutir os componentes básicos de um computador, tanto em relação a hardware como a software. Também veremos uma pequena introdução

Leia mais

FEN- 06723 Processamento Digital de Imagens. Projeto 2 Utilização de máscaras laplacianas

FEN- 06723 Processamento Digital de Imagens. Projeto 2 Utilização de máscaras laplacianas FEN- 06723 Processamento Digital de Imagens Projeto 2 Utilização de máscaras laplacianas Marcelo Musci Mestrado Geomática/UERJ-2004 Abstract The Laplacian is also called as second difference function,

Leia mais

Thales Trigo. Formatos de arquivos digitais

Thales Trigo. Formatos de arquivos digitais Esse artigo sobre Formatos de Arquivos Digitais é parte da Tese de Doutoramento do autor apresentada para a obtenção do titulo de Doutor em Engenharia Elétrica pela Escola Politécnica da USP. Thales Trigo

Leia mais

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM 71 Introdução Difere dos níveis inferiores por ser implementado por tradução A tradução é usada quando um processador está disponível para uma mensagem fonte mas

Leia mais

Primeiro programa em Java (compilação e execução)

Primeiro programa em Java (compilação e execução) Universidade Federal do ABC Disciplina: Linguagens de Programação (BC-0501) Assunto: Primeiro programa em Java (compilação e execução) Primeiro programa em Java (compilação e execução) Introdução Este

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

Manual de utilização do programa

Manual de utilização do programa PCIToGCode Manual de utilização do programa PCIToGCode O PCITOGCODE é um aplicativo desenvolvido para converter imagem de uma placa de circuito impresso em um arquivo de códigos G. Com o arquivo de códigos

Leia mais

Primitivas Gráficas. Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com. Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof.

Primitivas Gráficas. Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com. Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof. Primitivas Gráficas Prof. Márcio Bueno {cgtarde,cgnoite}@marciobueno.com Fonte: Material do Prof. Robson Pequeno de Sousa e do Prof. Robson Lins Traçado de Primitivas em Dispositivos Matriciais Conversão

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

Figura 13.1: Um exemplo de árvore de diretório.

Figura 13.1: Um exemplo de árvore de diretório. 13. Árvores W. Celes e J. L. Rangel Nos capítulos anteriores examinamos as estruturas de dados que podem ser chamadas de unidimensionais ou lineares, como vetores e listas. A importância dessas estruturas

Leia mais

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo: Disciplina: Tópicos Especiais em TI PHP Este material foi produzido com base nos livros e documentos citados abaixo, que possuem direitos autorais sobre o conteúdo. Favor adquiri-los para dar continuidade

Leia mais

Compiladores Aula 1. Celso Olivete Júnior. olivete@fct.unesp.br

Compiladores Aula 1. Celso Olivete Júnior. olivete@fct.unesp.br Aula 1 Celso Olivete Júnior olivete@fct.unesp.br Tópicos da disciplina Introdução à compilação Analisador léxico Analisador sintático descendente Analisador sintático ascendente Análise semântica Geração

Leia mais

Desenvolvendo e Integrando Serviços Multiplataforma de TV Digital Interativa

Desenvolvendo e Integrando Serviços Multiplataforma de TV Digital Interativa Desenvolvendo e Integrando Serviços Multiplataforma de TV Digital Interativa Agenda Introdução Aplicações interativas de TV Digital Desafios de layout e usabilidade Laboratório de usabilidade Desafios

Leia mais

Introdução ao Processamento de Imagens Digitais em Java com Aplicações em Ciências Espaciais

Introdução ao Processamento de Imagens Digitais em Java com Aplicações em Ciências Espaciais Introdução ao Processamento de Imagens Digitais em Java com Aplicações em Ciências Espaciais Escola de Verão do Laboratório Associado de Computação e Matemática Aplicada Rafael Santos Dia 2: 1 /26 Programa

Leia mais

BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL

BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL Deinf/Dine4 Versão 1.3 20/05/2013 Histórico de Revisão Data Versão Descrição Autor 06/11/2007 1.0 Elaboração da primeira versão

Leia mais

DESENVOLVIMENTO DE ALGORITMO PARA FUNÇÃO MULTILÍNGUE DO SOFTWARE TROPLUX

DESENVOLVIMENTO DE ALGORITMO PARA FUNÇÃO MULTILÍNGUE DO SOFTWARE TROPLUX DESENVOLVIMENTO DE ALGORITMO PARA FUNÇÃO MULTILÍNGUE DO SOFTWARE TROPLUX Pedro Vítor Sousa Ribeiro Universidade Federal de Alagoas pedrovsribeiro@gmail.com Ricardo Carvalho Cabús Universidade federal de

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

AVISO. Treinamento GVcollege Módulo Ficha Complementar

AVISO. Treinamento GVcollege Módulo Ficha Complementar AVISO O conteúdo deste documento é de propriedade intelectual exclusiva da GVDASA Sistemas e está sujeito a alterações sem aviso prévio. Nenhuma parte desta publicação pode ser reproduzida nem transmitida

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Sintaxe Básica de Java Parte 1

Sintaxe Básica de Java Parte 1 Sintaxe Básica de Java Parte 1 Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marcioubeno.com Fonte: Material da Profª Karina Oliveira Estrutura de Programa Um programa

Leia mais

Comparação entre a Máscara de Nitidez Cúbica e o Laplaciano para Realce de Imagens Digitais

Comparação entre a Máscara de Nitidez Cúbica e o Laplaciano para Realce de Imagens Digitais Comparação entre a Máscara de Nitidez Cúbica e o Laplaciano para Realce de Imagens Digitais Wesley B. Dourado, Renata N. Imada, Programa de Pós-Graduação em Matemática Aplicada e Computacional, FCT, UNESP,

Leia mais

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br Java - Introdução Professor: Vilson Heck Junior vilson.junior@ifsc.edu.br Agenda O que é Java? Sun / Oracle. IDE - NetBeans. Linguagem Java; Maquina Virtual; Atividade Prática. Identificando Elementos

Leia mais

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura UFPI CCN DIE Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: 2010-1 Prof. Dr. Raimundo Moura O projeto Desenvolver um compilador de um subconjunto básico da linguagem PORTUGOL.

Leia mais

Programação Elementar de Computadores Jurandy Soares

Programação Elementar de Computadores Jurandy Soares Programação Elementar de Computadores Jurandy Soares Básico de Computadores Computador: dispositivos físicos + programas Dispositivos físicos: hardware Programas: as instruções que dizem aos dispositivos

Leia mais

FBV - Linguagem de Programação II. Um pouco sobre Java

FBV - Linguagem de Programação II. Um pouco sobre Java FBV - Linguagem de Programação II Um pouco sobre Java História 1992: um grupo de engenheiros da Sun Microsystems desenvolve uma linguagem para pequenos dispositivos, batizada de Oak Desenvolvida com base

Leia mais

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos?

Análise semântica. Análise Semântica. Estrutura de um compilador. Anotação da árvore sintática. Tipos de comunicação de atributos? Estrutura de um compilador Análise semântica Tradução orientada pela sintaxe 1 2 Análise Semântica Anotação da árvore sintática Análise semântica: Tipos (& Declarações) Escopo Checagens estáticas: Idéia:

Leia mais

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7 Serviço Nacional de Aprendizagem Comercial do Rio Grande do Sul Informação e Comunicação: Habilitação Técnica de Nível Médio Técnico em Informática Programação Android na IDE Eclipse PROGRAMANDO ANDROID

Leia mais

Scanners da série i4000

Scanners da série i4000 Scanners da série i4000 Guia de Configuração de digitalização para aplicativos TWAIN A-61653_pt-br Usando a fonte de dados TWAIN Iniciando a Ferramenta de validação de scanner (SVT)... 2 Caixa de diálogo

Leia mais

Chapter 2 Guia de referência rápida 2-

Chapter 2 Guia de referência rápida 2- Chapter 2 Guia de referência rápida 2- Este capítulo descreve como descompactar e exibir imagens de maneira rápida com o kit de desenvolvimento de software (SDK) para captura de imagens.net RasterMaster.

Leia mais

Normalização Espacial de Imagens Frontais de Face

Normalização Espacial de Imagens Frontais de Face Normalização Espacial de Imagens Frontais de Face Vagner do Amaral 1 e Carlos Eduardo Thomaz 2 Relatório Técnico: 2008/01 1 Coordenadoria Geral de Informática Centro Universitário da FEI São Bernardo do

Leia mais

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos:

Sistemas Operacionais Cap 3 Estruturas de Sistemas Operacionais. Podemos analisar um sistema operacional sob diversos aspectos: Estruturas de Sistemas Operacionais Podemos analisar um sistema operacional sob diversos aspectos: Os serviços que o sistema operacional oferece. A interface que o sistema operacional torna disponível

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

Suporte à Engenharia Reversa para o ambiente SEA Otavio Pereira Suporte à Engenharia Reversa para o ambiente SEA Orientador: Ricardo Pereira e Silva Universidade Federal de Santa Catarina - UFSC Departamento de Informática e Estatística - INE Florianópolis

Leia mais