Definição Modular da Sintaxe de AspectJ usando Parsing Expression Grammar
|
|
- Geraldo Álvares Mendonça
- 8 Há anos
- Visualizações:
Transcrição
1 Definição Modular da Sintaxe de AspectJ usando Parsing Expression Grammar Luís Eduardo de Souza Amorim, Vladimir Oliveira Di Iorio, Giorgio P. F. Guimarães Torres, Felipe da Silva Pinheiro Departamento de Informática Universidade Federal de Viçosa Leonardo Vieira dos Santos Reis Departamento de Ciências Exatas e Aplicadas Universidade Federal de Ouro Preto leo@decea.ufop.br Resumo Propostas de novos recursos para linguagens orientadas a aspectos são objeto de muita pesquisa. Sendo AspectJ a linguagem orientada a aspectos mais utilizada, boa parte dessa pesquisa envolve a extensão de AspectJ. Para facilitar o desenvolvimento e teste de novos recursos, é desejável se ter uma especificação da linguagem AspectJ que seja construída de forma modular e que ofereça facilidades para extensão. Este trabalho apresenta uma definição da sintaxe de AspectJ usando o formalismo conhecido como Parsing Expression Grammar (PEG). Um analisador sintático é gerado utilizando a ferramenta Rats!, que inclui recursos para construir especificações com alta modularidade e para facilitar a extensibilidade. São apresentados testes comparativos que mostram que esse analisador apresenta desempenho superior a outros analisadores com características similares. I. INTRODUÇÃO A linguagem AspectJ, desde sua criação, tem sido a linguagem orientada a aspectos mais estudada e utilizada. Muitos trabalhos desenvolvidos no sentido de propor novos recursos e características para linguagens orientadas a aspectos são implementados como extensões para AspectJ, frequentemente envolvendo extensão da sintaxe concreta [1], [2]. Para facilitar a especificação e testes de novos recursos para AspectJ, é necessário, primeiramente, dispor de uma definição sintática da linguagem que permita uma composição modular de extensões. Novas construções propostas devem poder ser combinadas sem que haja conflitos com as já existentes. Ferramentas devem estar disponíveis para automaticamente construir, a partir dessas definições, analisadores sintáticos cujo desempenho não seja comprometido pelas extensões. Este artigo apresenta uma definição sintática para a linguagem AspectJ com o objetivo de facilitar a criação de extensões, de maneira modular. A sintaxe é definida usando o formalismo Parsing Expression Grammars (PEG) [3]. Um analisador sintático é construído com a ferramenta Rats! [4], que fornece os recursos necessários para construção de analisadores sintáticos rápidos, extensíveis e modulares. Testes mostram que essa combinação pode alcançar resultados superiores nos quesitos de facilidade para criação de extensões e eficiência dos analisadores, quando comparada com trabalhos similiares. O texto está estruturado da seguinte maneira. Na Seção II, apresentamos alguns trabalhos relacionados, em que também foram propostas definições sintáticas para AspectJ. A Seção III apresenta o formalismo de PEG e a Seção IV lista recursos da ferramenta Rats!. Na Seção V, detalhes sobre a definição de AspectJ usando PEG e Rats! são discutidos. A definição construída é comparada com trabalhos relacionados, na Seção VI. Para a comparação, são avaliadas as facilidades para extensibilidade e recursos de modularidade, e ainda o desempenho dos analisadores sintáticos gerados. Finalmente, a Seção VII apresenta conclusões e possíveis trabalhos futuros. II. TRABALHOS RELACIONADOS Esta seção discute diferentes especificações para a sintaxe de AspectJ, usadas para implementar analisadores sintáticos para a linguagem. Oferecimento de recursos para extensibilidade é uma preocupação de alguns trabalhos, pois foram desenvolvidos com o objetivo de proporcionar facilidades para pesquisa sobre possível evolução de AspectJ. A ferramenta ajc [5] consiste de um compilador completo para AspectJ, projetado de modo a ter geração de código e execução eficientes. É o compilador original para AspectJ, atualmente desenvolvido e suportado pelo projeto AspectJ Eclipse. Não são oferecidas facilidades para extensibilidade, uma vez que isso não fez parte dos objetivos principais do projeto. O projeto AspectBench Compiler (abc) [6] também oferece um compilador completo para a linguagem AspectJ. Esse compilador foi projetado de modo a permitir uma maior facilidade para extensão de seus componentes, especialmente o analisador sintático. No abc, a sintaxe de AspectJ é especificada por uma gramática livre de contexto LALR(1). Um analisador sintático é construído automaticamente, a partir dessa gramática, usando
2 a ferramenta Polyglot [7], que oferece recursos para extensibilidade da sintaxe. Produções podem ser estendidas, eliminadas e inseridas na gramática. O analisador léxico do abc é dividido em estados, que permitem que suas palavras-chave sejam sensíveis ao contexto, isto é, dependendentes do contexto onde são utilizadas. Diferente da sintaxe, há poucos recursos para extensão dos componentes léxicos da linguagem. Outra definição para a gramática de AspectJ é baseada no formalismo SDF [8], que oferece suporte à extensibilidade e recursos para especificações de forma modular. Analisadores sintáticos gerados com SDF são scannerless [9], isto é, reconhecem construções léxicas ao mesmo tempo em que realizam a análise sintática. A definição de AspectJ com SDF pode seguir um dos três modelos: AJF, que é a definição mais liberal, onde somente ambiguidades reais são resolvidas, por exemplo, reservando palavras-chave em pontos específicos. AJC, que adiciona restrições à linguagem para ser mais compatível com o compilador oficial de AspectJ. As restrições adicionais são em maioria relacionadas a conflitos shift-reduce no analisador sintático LALR de ajc. ABC, que usa palavras-chave sensíveis ao contexto. Define a linguagem suportada pelo compilador abc. Este trabalho apresenta uma especificação da sintaxe de AspectJ utilizando o formalismo conhecido como Parsing Expression Grammar (PEG), que é discutido na Seção III. Até onde vai nosso conhecimento, esta é a primeira descrição completa de AspectJ usando PEG. III. PARSING EXPRESSION GRAMMARS O sistema generativo de Chomsky, particularmente gramáticas livres de contexto (CFG, do inglês, Context Free Grammars) e expressões regulares, foram, por muito tempo, os formalismos mais utilizados para expressar a sintaxe de linguagens de programação. Parsing Expression Grammars (PEG) [3] é um novo formalismo oferecido para tal propósito. PEGs são parecidas estruturalmente com gramáticas livres de contexto, contendo recursos de expressões regulares e notação Extended Backus-Naur Form. A ideia de PEG está intimamente relacionada à construção de analisadores top-down, que podem ser considerados como uma forma mais natural e compreensível de análise sintática. Sintaticamente, PEGs são similares a CFGs, mas têm uma interpretação diferente, diretamente ligada à implementação de uma análise descendente recursiva (recursive descent parser). Uma diferença chave entre PEG e CFG é a utilização do operador de escolha prioritária (representado pelo símbolo ) que, diferentemente do operador ou (representado por ), leva em consideração a ordem na qual os padrões são definidos. Diferentemente de CFGs, PEGs não são ambíguas, ou seja, se uma palavra é aceita, ela possui somente uma árvore de derivação (parse tree) válida. Isso faz com que PEGs sejam úteis para expressar linguagens de programação, e não linguagens naturais. PEG, assim como SDF, é scannerless, ou seja, não é necessária análise léxica separada. Formalmente, uma PEG pode ser definida como uma tupla (Σ, N, P, e s ) onde: Σ é um conj. finito de terminais. N é um conj. finito de não-terminais. P é um conj. finito de regras (parsing rules) da forma A e onde A N e e é uma parsing expression. e s é uma parsing expression chamada expressão inicial. Uma parsing expression é uma expressão hierárquica similar a uma expressão regular, que é construída conforme o modelo descrito a seguir. Uma parsing expression atômica consiste de: um símbolo terminal; um símbolo não-terminal; ou a palavra vazia λ. Dadas parsing expressions e, e 1, e e 2, uma nova parsing expression pode ser construida usando os operadores mostrados na Tabela I. Aspas simples ou duplas representam uma palavra literal, e abre e fecha colchetes representam uma classe de caracteres. O simbolo. representa qualquer caractere. Operador Tipo Descrição primário String Literal primário String Literal [] primário Classe de Caracteres. primário Qualquer Caracter (e) primário Agrupamento e? sufixo unário Opcional e* sufixo unário Zero ou mais e+ sufixo unário Um ou mais &e prefixo unário Predicado And!e prefixo unário Predicado Not e 1 e 2 binário Sequência e 1 e 2 binário Escolha Priorizada Tabela I OPERADORES PARA CONSTRUÇÃO DE PARSING EXPRESSIONS A sequência de expressões e 1 e 2 procura uma correspondência (match) de e 1 imediatamente seguido por uma correspondência de e 2. Se alguma dessas correspondências falha, a análise volta ao ponto anterior, utilizando backtracking. A expressão de escolha priorizada e 1 e 2 primeiro realiza uma tentativa de correspondência com e 1, e depois com e 2 do mesmo ponto, se e 1 falha. Os operadores?, * e + são os mesmos presentes na sintaxe de expressões regulares. Já os operadores & e! denotam predicados sintáticos, e não consomem valores da entrada quando são avaliados, somente os valores booleanos de correspondência da entrada são utilizados. Uma das implementações de PEG mais eficientes é a proporcionada pela ferramenta Rats!, discutida na seção seguinte. IV. Rats! Conforme discutido na Seção II, ferramentas para definir extensões de linguagens necessitam de suporte a extensibilidade em diversos níveis. Rats! [10] é uma ferramenta para geração de analisadores sintáticos para Java que suporta facilmente sintaxes extensíveis.
3 Gramáticas para construções de analisadores sintáticos para Rats! são escritas em PEG, o que permite uma melhor performance do analisador quando são construídas extensões para gramáticas, visto que PEG não permite ambiguidade. Além disso, gramáticas escritas para Rats! são concisas e facilmente modificáveis. Rats! permite: 1) Usar Parsing Expression Grammars em vez de gramáticas livres de contexto, e integrar análise léxica com análise sintática, isto é, é scannerless; 2) Organizar especificações em módulos; 3) Permitir suporte à geração automática de Árvores de Sintaxe Abstratas (AST, do inglês Abstract Syntax Tree); 4) Prover uma interface bem definida para geração de analisadores sintáticos extensíveis. Outra vantagem de um analisador sintático gerado por essa ferramenta é que Rats! memoriza resultados intermediários, o que garante um tempo linear na presença de lookahead ilimitado e backtracking [11]. Por esse motivo, o analisador sintático gerado pode ser chamado de packrat parser. Apesar das gramáticas para Rats! serem construídas utilizando PEG, sua sintaxe possui algumas diferenças e são mais expressivas do que a descrição de PEG da Seção III. Uma gramática em Rats! consiste em um módulo no nível superior, que é o módulo especificado na linha de comando ao invocar o Rats! e zero ou mais módulos dependentes. Cada módulo pode iniciar com várias declarações: Uma declaração de módulo, que especifica seu nome completo dentro da gramática. Opcionalmente essa declaração pode ter um ou mais parâmetros, que são tratados como nomes de outros módulos e substituidos através do seu corpo. Zero ou mais declarações de dependência que especificam como o módulo atual depende de outros módulos. Rats! permite três tipos de declarações de dependências. Dependências do tipo import fazem não-terminais de outros módulos referenciáveis de dentro do módulo corrente. Dependências do tipo modify fazem as produções de outro módulo disponíveis para modificação no módulo atual. Cada módulo pode ter apenas uma dependência do tipo modify. Além disso, podem haver dependências do tipo instantiate que instanciam outros módulos (normalmente módulos que possuem argumentos) e tornam seus nomes disponíveis para uso em outras dependências. Esses são recursos fundamentais para aumentar a modularidade e extensibilidade das especificações. Após as declarações, seguem as produções. Uma produção escrita segundo a especificação de Rats! é da forma: Atributos Tipo Não-Terminal = e ; onde os Atributos são uma lista, separada por espaço, de zero ou mais atributos da produção, Tipo é o Tipo em Java do valor semântico, Não-terminal é o nome do não-terminal, e e é a expressão a ser analisada. Além disso, uma expressão pode ser rotulada com um nome, que possibilita sua modificação por outro módulo. Expressões podem ser construídas utilizando os elementos da Tabela I juntamente com os elementos da Tabela II, que são operadores específicos de Rats!. O operador é semelhante ao operador de qualquer caracter de PEG. Já o operador { } define uma ação semântica, semelhante às ações definidas para gramática livres de contexto. Os outros operadores são usados na construção de expressões. id : e constrói uma amarração entre e, fazendo-o ser do tipo id. É possível também amarrar uma expressão a um String, utilizando o operador : e, e além disso, podemos marcar uma produção utilizando o operador < nome >, onde nome é o nome da marcação. Operador Tipo Descrição primário Qualquer Caracter { } primário Ação Semântica id : e prefixo unário Amarração : e prefixo unário Combinação de String void : e prefixo unário Valor void <nome> e 1... e 2 binário Sequência Tabela II OPERADORES PARA CONTRUÇÃO DE EXPRESSIONS EM Rats! Em uma produção, é opcional a definição de uma ação semântica visto que Rats! constrói automaticamente a árvore de sintaxe abstrata. Uma produção sem ação semântica deve ser declarada do tipo genérico. Conforme dito anteriormente, um módulo pode modificar produções de outro módulo através da declaração modify. Produções que adicionam novas opções a produções de outro módulo podem ser escritas utilizando o operador +=, e definindo a posição onde ela acrescenta a nova alternativa. Pode-se também remover opções de uma produção através do operador -=. Finalmente, é possível substituir todas as alternativas através do operador de sobreescrever, :=. Boa parte dos recursos de extensibilidade e facilidades para especificações de forma modular de Rats! foram utilizadas na definição de AspectJ que é discutida na Seção V. V. DEFINIÇÃO DE ASPECTJ Como AspectJ é uma extensão da linguagem Java, sua definição tem como base a gramática de Java. A definição proposta neste artigo segue os moldes da gramática construída pelo compilador abc [6] para Java 4. A. Análise Léxica A análise léxica de AspectJ é complicada pelo fato de que existem três linguagens diferentes sendo analisadas: o código Java normal, as declarações de aspectos e as definições de pointcut. O compilador abc divide o contexto da linguagem nessas três linguagens e faz com que as palavras-chave sejam sensíveis a sua localidade. Porém, ao utilizarmos PEG, que é uma linguagem scannerless, optamos por implementar a análise léxica seguindo a definição AJC vista na Seção II, por ser uma definição mais liberal e compatível com essa característica. Sendo assim, neste trabalho, a análise léxica é feita juntamente com a análise sintática, com palavras-chave empregadas em pontos específicos da gramática.
4 B. Análise Sintática Vimos, na Seção IV, que Rats! é uma ferramenta para geração de analisadores sintáticos que permite extensibilidade e modularidade. Essas características foram essenciais para a escolha dessa ferramenta para a construção da gramática de AspectJ utilizando PEG. A gramática de Java, base de AspectJ, que foi implementada originalmente por Robert Grimm [10], possui a modularidade necessária para implementação da extensão. A gramática de AspectJ segue praticamente o mesmo esquema de modularidade da gramática de Java, estendendo-a em alguns módulos. Os módulos para as gramáticas de Java e AspectJ foram esquematizados conforme a Figura 1. Figura 1. Módulos contidos na Gramática de AspectJ A figura mostra uma separação completa entre AspectJ e Java. Cada identificador representa um módulo. Todas as dependências são tratadas com modificações de módulo (modify) ou passagem de módulos como parâmetro para os novos módulos de AspectJ. Os módulos principais instanciam vários módulos (instantiate) para que seus nomes possam ser utilizados como parâmetro. O módulo principal é identificado com o nome AspectJ. Ele instancia vários módulos e modifica o módulo AspectJCore. Ao fazer isso, todas as produções existentes em AspectJCore são executadas a partir deste módulo. Os módulos instanciados são os parâmetros necessários a AspectJCore. Spacing é um módulo para análise léxica que contém produções para definir o espaçamento entre cada token do programa. Além disso, define também como se dão os comentários na linguagem. Como, nesse caso, comentários e espaçamento de AspectJ são idênticos aos de Java, esse módulo não é modificado. Symbol também é um módulo que contém uma gramática para análise léxica que contém os símbolos e operadores necessário para JavaSymbol. AspectJSymbol o recebe como parâmetro e o modifica, acrescentando o símbolo... AspectJIdentifier é um módulo contendo os identificadores específicos de AspectJ. Ele recebe como parâmetro AspectJSymbol e Spacing para modificar o módulo JavaIdentifier e contém as produções necessárias para definir alguns identificadores em AspectJ, que podem possuir o símbolo *. JavaConstant e JavaType são módulos necessários para AspectJCore, e só se modificam em virtude dos parâmetros AspectJSymbol, AspectJIdentifier e Spacing passados a eles. AspectJPatterns é um módulo acrescentado à hierarquia de AspectJ, que define as construções de patterns dentro de um aspecto. Patterns são padrões de nomes de métodos, classes, tipos e expressões que são usados na definição de pointcuts dentro de um programa em AspectJ. Eles permitem, por exemplo que identificadores contenham caracteres especiais para definição de hierarquia de classes, ou contenham métodos, classes ou tipos que comecem, terminem ou possuam alguma sequência de caracteres. O módulo AspectJCore modifica o módulo JavaCore, incluindo assim a definição de todas as construções presentes em Java. Este módulo garante a extensibilidade entre Java e AspectJ e possui como parâmetro os módulos instanciados anteriormente. Através do operador +=, esse módulo acrescenta a opção de se construir um aspecto, adicionando AspectDeclaration ao não-terminal TypeDeclaration. Além disso, esse módulo também modifica o não-terminal Declaration, dando a possibilidade de se definir pointcuts e outros aspectos dentro de uma construção (classe, interface ou aspecto). A última modificação feita nas produções de Java consiste em adicionar a possibilidade de se chamar o método proceed(). Isso é feito adicionando essa possibilidade ao não-terminal PrimaryExpression. As produções vistas na Figura 2 ilustram as modificações descritas neste parágrafo. No mais, o módulo AspectJCore define como se dá a estrutura sintática em AspectJ, de maneira semelhante à estrutura definida pela gramática LALR(1) do compilador abc. Em se tratando da tradução da gramática em si, foram feitas poucas modificações à gramática do abc, eliminando somente casos de recursividade à esquerda, pois PEG não permite esse tipo de recursividade. C. Testes Um analisador sintático foi gerado usando a ferramenta Rats!. O analisador consiste em uma classe Java que recebe um programa de entrada e o analisa. Caso o programa esteja sintaticamente correto, uma representação por meio de uma AST é construída. Para testarmos o analisador com diversas instâncias, foi utilizado o framework JUnit [12]. Os programas de teste são os exemplos de aspectos definidos no endereço Todos os testes foram corretamente processados pelo analisador. Um único problema encontrado no conjunto de testes foi a definição de um pointcut, num dos aspectos. A definição execution(object!cloneable+.clone());
5 Node TypeDeclaration += <Interface>... <Aspect> AspectDeclaration ; Node Declaration += <Class>... <Aspect> AspectDeclaration <Pointcut> PointCutDeclaration ; Node PrimaryExpression += <Proceed> ProceedExpression <Call>... ; Figura 2. Produções que estendem a Gramática de Java não é aceita pelo analisador construído, nem pela gramática do compilador abc. Porém, ao substituirmos essa definição por execution(object (!Cloneable+).clone()); a definição passa a ser aceita. Isso ocorre, principalmente pelo fato da linguagem AspectJ não possuir um padrão. As diferenças entre os modelos apresentados na Seção II, mais especificamente, entre o AJC e o ABC, fazem com que ocorra esse erro de sintaxe. Foram também construídos exemplos que continham propositalmente erros sintáticos, introduzidos arbitrariamente no conjunto descrito acima. Todos os testes com esses exemplos apresentaram o resultado esperado. VI. COMPARAÇÃO COM TRABALHOS SIMILARES Este trabalho tem como objetivo apresentar uma especificação de AspectJ que facilite a construção de extensões, para permitir experimentos com a linguagem. Dessa forma, não pode ser comparado adequadamente com o compilador ajc [5], que não tem objetivo de extensibilidade e não oferece recursos para isso. A gramática usada no compilador abc [6] serviu de modelo para a definição apresentada na SeçãoV. Mas este trabalho não apresenta um compilador completo como o abc. Comparando as duas abordagens, pode-se concluir que a extensibilidade é mais facilitada com a especificação deste trabalho, pois extensões são definidas sem a geração de conflitos que o analisador LR do Polyglot pode gerar. Além disso, os recursos para extensibilidade do analisador léxico do abc são muito restritos. A especificação de uma gramática apresentada em [8], escrita em SDF, é a que pode ser melhor comparada com a deste trabalho. A SDF facilita extensibilidade, sem gerar conflitos entre as gramáticas e ainda oferece recursos para especificações modulares. Testes de desempenho foram realizados para avaliar a velocidade e o consumo de memória, comparando o analisador sintático apresentado em [8] e o analisador produzido neste trabalho. Os testes foram realizados no ambiente do Eclipse Helios, instalado na arquitetura descrita a seguir: Processador AMD Athlon(tm), modelo P320, Dual-core, 2100Mhz Memória total instalada 4 Gigabytes Sistema Operacional Microsoft Windows 7 de 32 bits Como o Rats! gera um analisador na linguagem Java, o analisador sintático gerado a partir da descrição em SDF deveria também estar escrito em Java, para que o teste ficasse mais justo. Assim foi usado o gerador JSGLR, que faz parte da ferramenta Spoofax [13] e atende aos requisitos desejados. Enquanto analisadores sintáticos produzidos pelo Rats! não necessitam nenhuma atividade prévia à análise, o JSGLR precisa carregar uma tabela que descreve a gramática desejada, antes de iniciar a análise dos programas. O tempo transcorrido e o gasto de memória para a carga dessa tabela não foram computados nos testes comparativos. A Tabela III apresenta resultados da comparação. Os programas em AspectJ cuja sintaxe é analisada são os mesmos programas usados nos testes da Seção V-C. Os casos de teste que vão do 11 ao 14 consistem em replicação de partes do código do programa de número 8, com o objetivo de testar arquivos mais extensos. Nenhum desses casos apresentam erro de sintaxe, pois o objetivo é testar a performance durante toda a análise. Número Tamanho do Tempo de Memória do Arquivo de Teste Parser Análise Gasta na Análise teste (kbytes) (ms) (kbytes) ,444 JSGLR Rats! ,662 JSGLR Rats! ,884 JSGLR Rats! ,86 JSGLR Rats! Tabela III TABELA DE COMPARAÇÃO DE DESEMPENHO A Tabela III apresenta o tempo transcorrido na execução dos analisadores sintáticos quando os programas de teste são processados, bem como a memória utilizada. Os valores são uma média de 5 execuções. O analisador apresentado neste trabalho foi superior ao gerado pelo JSGLR, em todos os casos de testes, tanto em tempo de processamento quanto em memória consumida. É possível notar uma falta de linearidade entre os valores de tempo de procesamento e de consumo de memória, quando se comparam os testes 8 e 10. O teste 8 é uma classe em Java que contém grande quantidade de comandos complexos. Já o teste 10 é um aspecto que contém apenas uma grande quantidade
6 de pointcuts. Os analisadores consomem mais recursos em um programa complexo em Java, do que em um aspecto contendo apenas pointcuts. Essa discrepância é ainda mais evidente no analisador gerado com Rats!. Através dos resultados dos testes, pode-se concluir que o analisador sintático apresentado neste traballho é muito mais eficiente que o apresentado em [8], quando gerado com JSGLR. VII. CONCLUSÃO E TRABALHOS FUTUROS Este trabalho apresentou uma especificação e implementação de um analisador sintático para AspectJ. Para esse analisador, foram destacadas características esperadas, como modularidade, facilidade para extensibilidade e eficiência na execução. A sintaxe do analisador foi baseada na especificação utilizada no projeto abc. Foi utilizado o formalismo PEG para descrever a especificação e a ferramenta Rats! para gerar automaticamente um analisador sintático. O trabalho foi comparado com abordagens semelhantes. A definição de AspectJ encontrada que mais se aproximava do modelo proposto foi uma especificação em SDF, que procura reunir qualidades de alta modularidade e oferecimento de facilidades para construção de extensões. Comparando o analisador apresentado neste trabalho com um analisador gerado a partir da especificação em SDF, foi possível observar uma grande diferença de desempenho. O analisador proposto apresentou resultados muito superiores em tempo de processamento e gasto de memória. Dessa forma, concluímos que o objetivo do trabalho foi satisfatoriamente cumprido. A gramática descrita neste trabalho pode ser obtida no endereço dentro de um projeto Eclipse. O projeto inclui ainda todos os testes de validação e os testes comparativos, permitindo reproduzir os resultados discutidos na Seção VI. A modularidade da especificação proposta não foi devidamente avaliada neste trabalho. Uma definição modular pode tornar mais fácil reaproveitar suas partes, e facilitar também a construção de extensões. Para realizar uma avaliação do trabalho nesses quesitos, faz parte dos planos futuros a elaboração de diversas extensões de AspectJ baseadas na especificação proposta, avaliando o processo de construção, de modo similar ao realizado em [8]. É importante lembrar, que apesar de não avaliar a extensibilidade, o próprio trabalho se trata da implementação de uma extensão de uma linguagem, da linguagem AspectJ estendida da linguagem Java, e conforme vimos na Seção V, não houve conflitos para sua implementação de maneira modular. Outra tarefa que faz parte dos planos futuros é produzir uma nova definição que englobe as características de AspectJ 5, incluindo funcionalidades como anotações e generics. Na questão de desempenho, outra possibilidade é fazer uma comparação com o analisador sintático do compilador ajc, visto que ele é um benchmark, ou seja, possui o melhor desempenho dentre os trabalhos similares. AGRADECIMENTOS Por bolsas de iniciação científica que foram usadas por dois dos autores deste trabalho, agradecemos à Fapemig e ao CNPq. REFERÊNCIAS [1] J. Aldrich, Open Modules: Modular Reasoning About Advice, in ECOOP Object Oriented Programming: 19th European Conference, Glasgow, UK, July 25-29, Proceedings, ser. Lecture Notes in Computer Science, A. P. Black, Ed., vol Springer, 2005, pp [2] Éric Tanter, K. Gybels, M. Denker, and A. Bergel, Context-aware aspects, in Software Composition, 5th International Symposium, SC 2006, Vienna, Austria, March 25-26, 2006, Revised Papers, ser. Lecture Notes in Computer Science, W. Löwe and M. Südholt, Eds., vol Springer, 2006, pp [3] B. Ford, Parsing expression grammars: a recognitionbased syntactic foundation. in POPL, N. D. Jones and X. Leroy, Eds. ACM, 2004, pp [Online]. Available: bafordpackratpopl04 [4] R. Grimm, Better extensibility through modular syntax, in PLDI 06: Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation. New York, NY, USA: ACM, 2006, pp [5] The AspectJ Compiler, avaliable from URL: [6] P. Avgustinov, A. S. Christensen, L. Hendren, S. Kuzins, J. Lhoták, O. Lhoták, O. de Moor, D. Sereni, G. Sittampalam, and J. Tibble, abc: an extensible aspectj compiler, in AOSD 05: Proceedings of the 4th international conference on Aspect-oriented software development. New York, NY, USA: ACM, 2005, pp [7] N. Nystrom, M. R. Clarkson, and A. C. Myers, Polyglot: An extensible compiler framework for java, in In 12th International Conference on Compiler Construction. Springer-Verlag, 2003, pp [8] M. Bravenboer, E. Tanter, and E. Visser, Declarative, formal, and extensible syntax definition for AspectJ. A case for scannerless generalizedlr parsing, in Proceedings of the 21th ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA 06), W. R. Cook, Ed. Portland, Oregon, USA: ACM Press, October 2006, pp [9] D. J. Salomon and G. V. Cormack, Scannerless nslr(1) parsing of programming languages, in Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation, ser. PLDI 89. New York, NY, USA: ACM, 1989, pp [Online]. Available: [10] R. Grimm, Better extensibility through modular syntax, in Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation, ser. PLDI 06. New York, NY, USA: ACM, 2006, pp [Online]. Available: [11] M. G. J. van den Brand, J. Scheerder, J. J. Vinju, and E. Visser, Disambiguation filters for scannerless generalized lr parsers, in Proceedings of the 11th International Conference on Compiler Construction, ser. CC 02. London, UK: Springer-Verlag, 2002, pp [Online]. Available: [12] JUnit test tool, [13] L. C. L. Kats and E. Visser, The Spoofax language workbench. Rules for declarative specification of languages and IDEs, in Proceedings of the 25th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2010, October 17-21, 2010, Reno, NV, USA, M. Rinard, Ed., 2010, pp
3 Parsing Expression Grammars
3 Parsing Expression Grammars Parsing Expression Grammars (PEG) são um formalismo que descreve reconhecedores de linguagens (For04). PEGs são uma alternativa para gramáticas livres de contexto (CFGs) e
Leia maisAná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 maisTabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008
Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,
Leia maisOrientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Leia maisSintaxe 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 mais2 Desenvolvimento de Software Orientado a Aspectos
2 Desenvolvimento de Software Orientado a Aspectos Separação de concerns é um princípio bem estabelecido da engenharia de software que diz que, para se dominar a complexidade do desenvolvimento de software,
Leia maisAMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário
Leia mais3. O NIVEL DA LINGUAGEM DE MONTAGEM
3. O NIVEL DA LINGUAGEM DE MONTAGEM Nas aulas anteriores tivemos a oportunidade de discutir dois diferentes níveis presentes na maioria dos computadores atuais. Nesta aula dedica-se a outro nível que também
Leia maisAula 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 mais1.1. Organização de um Sistema Computacional
1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes
Leia maisA 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 maisCurso: 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 maisCAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES
CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:
Leia maisCurso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:
Trabalho elaborado por: Carlos Palma nº5608 Curso de Eng. Informática Linguagens de Programação C Sharp University Data Processing (C Sharp Universidade de Processamento de Dados) Docente: José Jasnau
Leia maisAnálise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem
Leia maisEspecificação do 3º Trabalho
Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,
Leia maisCasos de teste semânticos. Casos de teste valorados. Determinar resultados esperados. Gerar script de teste automatizado.
1 Introdução Testes são importantes técnicas de controle da qualidade do software. Entretanto, testes tendem a ser pouco eficazes devido à inadequação das ferramentas de teste existentes [NIST, 2002].
Leia maisDesenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA
Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA RESUMO Ricardo Della Libera Marzochi A introdução ao Service Component Architecture (SCA) diz respeito ao estudo dos principais fundamentos
Leia maisConstruçã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[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]
Instruções de uso do montador DAEDALUS (baseadas em texto extraído da monografia apresentada como trabalho de diplomação no curso de Bacharelado em Ciência da Computação por Luís Ricardo Schwengber, sob
Leia maisOrientação a Objetos
Orientação a Objetos 1. Sobrecarga (Overloading) Os clientes dos bancos costumam consultar periodicamente informações relativas às suas contas. Geralmente, essas informações são obtidas através de extratos.
Leia maisAlgoritmos e Estrutura de Dados III. Árvores
Algoritmos e Estrutura de Dados III Árvores Uma das mais importantes classes de estruturas de dados em computação são as árvores. Aproveitando-se de sua organização hierárquica, muitas aplicações são realizadas
Leia maisMicrosoft Office PowerPoint 2007
INTRODUÇÃO AO MICROSOFT POWERPOINT 2007 O Microsoft Office PowerPoint 2007 é um programa destinado à criação de apresentação através de Slides. A apresentação é um conjunto de Sides que são exibidos em
Leia maisApostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi
Apostila de Fundamentos de Programação I Prof: André Luiz Montevecchi Introdução O mundo atual é dependente da tecnologia O uso intenso de diversos aparatos tecnológicos é parte integrante do nosso dia-a-dia
Leia maisGeração de código intermediário. Novembro 2006
Geração de código intermediário Novembro 2006 Introdução Vamos agora explorar as questões envolvidas na transformação do código fonte em uma possível representação intermediária Como vimos, nas ações semânticas
Leia maisSISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária
SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária Cascavel Novembro de 2009 Pedro Patitucci Finamore Daniel Bordignon Cassanelli Marco Antonio da Rosa DIAGRAMAS DE CLASSE E SEQUÊNCIA
Leia maisFrameworks. Pasteur Ottoni de Miranda Junior
Frameworks Pasteur Ottoni de Miranda Junior 1-Definição Apesar do avanço das técnicas de desenvolvimento de software, a construção de software ainda é um processo extremamente complexo.a reutilização tem
Leia maisCOMPILADORES 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 maisEsta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi
5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem
Leia maisO que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador.
O que é um programa? Programa é uma lista de instruções que descrevem uma tarefa a ser realizada pelo computador. Linguagem de Programação Uma linguagem de programação é um método padronizado para expressar
Leia maisAlgoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br
(Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Leia maisIntroduçã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 maisDadas a base e a altura de um triangulo, determinar sua área.
Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares
Leia mais3.1 Definições Uma classe é a descrição de um tipo de objeto.
Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Classes Autoria:Aristófanes Corrêa Silva Adaptação:
Leia maisPersistência e Banco de Dados em Jogos Digitais
Persistência e Banco de Dados em Jogos Digitais Prof. Marcos Francisco Pereira da Silva Especialista em Engenharia de Software Jogos Digitais - Computação Gráfica 1 Agenda Vantagens de usar a abordagem
Leia maisAplicação Prática de Lua para Web
Aplicação Prática de Lua para Web Aluno: Diego Malone Orientador: Sérgio Lifschitz Introdução A linguagem Lua vem sendo desenvolvida desde 1993 por pesquisadores do Departamento de Informática da PUC-Rio
Leia maisFramework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#
Linguagem de Programação 3 Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C# Prof. Mauro Lopes 1-31 35 Objetivos Nesta aula iremos apresentar a tecnologia.net, o ambiente de desenvolvimento
Leia maisPROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br
- Aula 5 - O NÍVEL DA LINGUAGEM DE MONTAGEM 1. INTRODUÇÃO É relativamente fácil compreender os fundamentos da programação de computadores, sob o ponto de vista da inteligibilidade dos comandos de alto
Leia maisAlgoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)
Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados) Os algoritmos são descritos em uma linguagem chamada pseudocódigo. Este nome é uma alusão à posterior implementação
Leia maisUniversidade de São Paulo São Carlos, SP Instituto de Ciências Matemáticas e de Computação. SSC0206 1/2010 Introdução à Compilação
Universidade de São Paulo São Carlos, SP Instituto de Ciências Matemáticas e de Computação SSC0206 1/2010 Introdução à Compilação Trabalho 3: Analisador Semântico e Gerador de Código Prof. Dr. Thiago A.
Leia maisOrganização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br
Organização de programas em Python Vanessa Braganholo vanessa@ic.uff.br Vamos programar em Python! Mas... } Como um programa é organizado? } Quais são os tipos de dados disponíveis? } Como variáveis podem
Leia maisConteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo
Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de
Leia maisAspect-Oriented Programming AOP. Comentários Sérgio Crespo
Aspect-Oriented Programming AOP Comentários Sérgio Crespo Separation of Concerns O princípio de Separation of Concerns já é utilizado por engenheiros de software para o gerenciar a complexidade de sistemas
Leia maisBarra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas
Microsoft Power Point 2003 No Microsoft PowerPoint 2003, você cria sua apresentação usando apenas um arquivo, ele contém tudo o que você precisa uma estrutura para sua apresentação, os slides, o material
Leia maisAplusixEditor: o editor para Aplusix 3 Manual de utilização
AplusixEditor: o editor para Aplusix 3 Manual de utilização Novembro 2010 Documento redigido com epsilonwriter Tradução em português por Marilena Bittar 1. Introdução 1.1. Osexercícios 1.2. Os problemas
Leia maisFeature-Driven Development
FDD Feature-Driven Development Descrição dos Processos Requisitos Concepção e Planejamento Mais forma que conteúdo Desenvolver um Modelo Abrangente Construir a Lista de Features Planejar por
Leia maisDiagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.
1 Diagrama de Classes Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes. Um dos objetivos do diagrama de classes é definir a base para
Leia maisIntroduçã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 maisAula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.
Aula 2 Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4. Conceitos O software controla os computadores(freqüentemente conhecido
Leia maiswww.f2b.com.br 18/04/2006 Micropagamento F2b Web Services Web rev 00
www.f2b.com.br 18/04/2006 Micropagamento F2b Web Services Web rev 00 Controle de Revisões Micropagamento F2b Web Services/Web 18/04/2006 Revisão Data Descrição 00 17/04/2006 Emissão inicial. www.f2b.com.br
Leia maisResolução de problemas e desenvolvimento de algoritmos
SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de
Leia maisALGORITMOS PARTE 01. Fabricio de Sousa Pinto
ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3
Leia maisCompiladores - Análise Preditiva
Compiladores - Análise Preditiva Fabio Mascarenhas - 203. http://www.dcc.ufrj.br/~fabiom/comp Wednesday, May 8, 3 Retrocesso Local Podemos definir o processo de construção de um parser recursivo com retrocesso
Leia mais1.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 maisEngenharia de Software III
Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf (flavio.ceci@unisul.br) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,
Leia maisJSP - 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 maisManual SAGe Versão 1.2 (a partir da versão 12.08.01)
Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação
Leia maisCompiladores. 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 mais6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto
Capítulo 6. Autômatos com Pilha 6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto Nos exemplos da seção anterior, vimos que os autômatos com pilha existem para
Leia maisPráticas de Programação em Lógica. José Romildo Malaquias
Práticas de Programação em Lógica José Romildo Malaquias 9 de março de 2010 2 Sumário 1 Execução de programas em Prolog 1-1 1.1 Objetivos........................................ 1-1 1.2 Conceitos........................................
Leia maisBanco de Dados Aula 1 Introdução a Banco de Dados Introdução Sistema Gerenciador de Banco de Dados
Banco de Dados Aula 1 Introdução a Banco de Dados Introdução Um Sistema Gerenciador de Banco de Dados (SGBD) é constituído por um conjunto de dados associados a um conjunto de programas para acesso a esses
Leia maisANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007
ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007 CURITIBA 2015 2 SUMÁRIO INTRODUÇÃO AO MICROSOFT POWERPOINT 2007... 3 JANELA PRINCIPAL... 3 1 - BOTÃO OFFICE... 4 2 - FERRAMENTAS DE ACESSO
Leia maisTópicos em Engenharia de Software (Optativa III) AULA 2. Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619
Tópicos em Engenharia de Software (Optativa III) AULA 2 Prof. Andrêza Leite andreza.lba@gmail.com (81 )9801-6619 Engenharia de Software Objetivo da aula Depois desta aula você terá uma revisão sobre o
Leia maisGeração e Otimização de Código
Geração e Otimização de Código Representação de código intermediária Código de três endereços, P-código Técnicas para geração de código Otimização de código Prof. Thiago A. S. Pardo 1 Estrutura geral de
Leia maisLinguagem algorítmica: Portugol
Programação de Computadores I Aula 03 Linguagem algorítmica: Portugol José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2011-1 1/34 Introdução I Lógica A lógica é usada
Leia maisARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.
Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto
Leia maisIntrodução ao Paradigma Orientado a Objetos. Principais conceitos
Introdução ao Paradigma Orientado a Objetos Principais conceitos Paradigmas de Programação PROGRAMAÇÃO ESTRUTURADA X PROGRAMAÇÃO ORIENTADA A OBJETOS Paradigma Programação estruturada Na programação estrutura
Leia maisINTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO
Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele
Leia maisALP Algoritmos e Programação. . Linguagens para Computadores
ALP Algoritmos e Programação Iniciação aos computadores. Linguagens para Computadores. Compiladores, Interpretadores. Ambientes de Programação 1 Linguagens para Computadores. Linguagem binária: Dispositivos
Leia maisESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE
ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE Fabiana Gomes Marinho Faculdade Lourenço Filho Resumo: Na UML, a modelagem conceitual dos dados é descrita pelo diagrama de classes, que através
Leia maisProgramação Funcional. Capítulo 1. Introdução. José Romildo Malaquias. Departamento de Computação Universidade Federal de Ouro Preto 2015.
Programação Funcional Capítulo 1 Introdução José Romildo Malaquias Departamento de Computação Universidade Federal de Ouro Preto 2015.1 1/13 1 Paradigmas de programação 2 Programação funcional 3 A Crise
Leia maisIntrodução a Java. Hélder Nunes
Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais
Leia maisCapítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho
20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam
Leia maisProcessamento de dados XML
Processamento de dados XML César Vittori cvittori@inf.ufrgs.br Outubro de 2000 Resumo Considerações no desenvolvimento de software para processar dados XML. Processamento de uma DTD para interpretar marcação
Leia maisConceitos básicos de programação
O QUE É UM PROGRAMA? Para executar uma dada tarefa é geralmente necessário entender o sistema onde ela é realizada. Por exemplo, para fazer um bolo temos um sistema composto por: Ingredientes Cozinheiro
Leia maisBARRAMENTO DO SISTEMA
BARRAMENTO DO SISTEMA Memória Principal Processador Barramento local Memória cachê/ ponte Barramento de sistema SCSI FireWire Dispositivo gráfico Controlador de vídeo Rede Local Barramento de alta velocidade
Leia maisAMBIENTE DE PROGRAMAÇÃO PYTHON
Computadores e Programação Engª Biomédica Departamento de Física Faculdade de Ciências e Tecnologia da Universidade de Coimbra Ano Lectivo 2003/2004 FICHA 1 AMBIENTE DE PROGRAMAÇÃO PYTHON 1.1. Objectivos
Leia mais7 Trabalhos Relacionados A idéia é tentar dar todas as informações que ajudem os outros a julgar o valor da sua contribuição; não apenas as informações que levem o julgamento a uma direção em particular.
Leia maisConteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos
Universidade Federal do Espírito Santo Centro Tecnológico Departamento de Informática Disciplina: INF 02810 Prof.: (monalessa@inf.ufes.br) Conteúdo 1. Introdução 2. Processo de Software 3. Gerência de
Leia maisRock In Rio - Lisboa
Curso de Engenharia Informática Industrial Rock In Rio - Lisboa Elaborado por: Ano Lectivo: 2004/05 Tiago Costa N.º 4917 Turma: C Gustavo Graça Patrício N.º 4757 Turma: C Docente: Professora Maria Estalagem
Leia maisIntrodução. à Linguagem JAVA. Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação. Laboratório de Visão Computacional
Introdução à Linguagem JAVA Prof. Dr. Jesus, Edison O. Instituto de Matemática e Computação Laboratório de Visão Computacional Vantagens do Java Independência de plataforma; Sintaxe semelhante às linguagens
Leia maisGereComSaber. Desenvolvimento de Sistemas de Software. Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática
Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática Desenvolvimento de Sistemas de Software Ano Lectivo de 2009/10 GereComSaber Ana Duarte, André Guedes, Eduardo
Leia maisDescrição do Produto. Altus S. A. 1
Descrição do Produto O software MasterTool IEC é um ambiente completo de desenvolvimento de aplicações para os controladores programáveis da Série Duo. Esta ferramenta permite a programação e a configuração
Leia maisEngenharia de Software. Parte I. Introdução. Metodologias para o Desenvolvimento de Sistemas DAS 5312 1
Engenharia de Software Parte I Introdução Metodologias para o Desenvolvimento de Sistemas DAS 5312 1 Mitos do Desenvolvimento de Software A declaração de objetivos é suficiente para se construir um software.
Leia maisUNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA
Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais
Leia maisArquitetura de Rede de Computadores
TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador
Leia maisAcadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos
Acadêmicos: Luís Fernando Martins Nagata Gustavo Rezende Vinícius Rezende Santos Pilhas de Dispositivos Drivers no Windows Vista podem fazer todo trabalho sozinho; Uma requisição pode passar por uma seqüência
Leia maisPROGRAMAÇÃO II 4. ÁRVORE
4. ÁRVORE PROGRAMAÇÃO II Prof. Jean Eduardo Glazar Uma árvore impõe uma estrutura hierárquica em uma coleção de itens. Um exemplo familiar é a árvore genealógica. Árvores despontam de forma natural em
Leia mais3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio
32 3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio Este capítulo apresenta o framework orientado a aspectos para monitoramento e análise de processos de negócio
Leia mais)HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR
6LPXODomR GH6LVWHPDV )HUUDPHQWDV &RPSXWDFLRQDLV SDUD 6LPXODomR #5,6. Simulador voltado para análise de risco financeiro 3RQWRV IRUWHV Fácil de usar. Funciona integrado a ferramentas já bastante conhecidas,
Leia maisCAPÍ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 maisSolitaire Interglobal
Solitaire Interglobal POWERLINUX OU WINDOWS PARA IMPLANTAÇÃO SAP Escolher entre as plataformas concorrentes de sistema operacional Linux e Windows para SAP pode ser uma tarefa confusa para as organizações.
Leia maisXML e Banco de Dados de Internet. Tópicos Especiais em Tecnologia da Informação Profa. Késsia R. C. Marchi
XML e Banco de Dados de Internet Tópicos Especiais em Tecnologia da Informação Profa. Késsia R. C. Marchi Motivação Diversas aplicações Web utilizam Fontes de Dados (BD); Arquitetura Cliente-Servidor (2
Leia maisBanco de Dados. Microsoft Access
Banco de Dados Microsoft Access PARTE 01 edição 2007 Índice 01-) Conceito... 2 02) Sistema Gerenciador de Banco de Dados Relacional (SGBDR)... 3 03) Access... 3 04) Etapas para elaboração de um Banco de
Leia maisNoções de. Microsoft SQL Server. Microsoft SQL Server
Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados
Leia maisIntrodução a Informática. Prof.: Roberto Franciscatto
Introdução a Informática Prof.: Roberto Franciscatto APRESENTAÇÃO Os computadores chegaram aos diversos níveis das organizações Nestes contexto: Que linguagem entendem? Que produtos podem usar? Dúvidas
Leia maisIntrodução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis
Ciência da Computação Arq. e Org. de Computadores Máquinas Multiníveis Prof. Sergio Ribeiro Computador digital máquina que resolve problemas executando uma série de instruções. Programa conjunto de instruções
Leia maisPesquisa e organização de informação
Pesquisa e organização de informação Capítulo 3 A capacidade e a variedade de dispositivos de armazenamento que qualquer computador atual possui, tornam a pesquisa de informação um desafio cada vez maior
Leia mais