Definição Modular da Sintaxe de AspectJ usando Parsing Expression Grammar

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

Download "Definição Modular da Sintaxe de AspectJ usando Parsing Expression Grammar"

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 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 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

Tabela 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. 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 mais

Orientação a Objetos

Orientaçã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 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

2 Desenvolvimento de Software Orientado a Aspectos

2 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 mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE 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 mais

3. O NIVEL DA LINGUAGEM DE MONTAGEM

3. 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 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

1.1. Organização de um Sistema Computacional

1.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 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

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

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍ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 mais

Curso de Eng. Informática Linguagens de Programação. C Sharp University Data Processing. (C Sharp Universidade de Processamento de Dados) Docente:

Curso 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 mais

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)

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) 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 mais

Especificação do 3º Trabalho

Especificaçã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 mais

Casos de teste semânticos. Casos de teste valorados. Determinar resultados esperados. Gerar script de teste automatizado.

Casos 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 mais

Desenvolvendo uma Arquitetura de Componentes Orientada a Serviço SCA

Desenvolvendo 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 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

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]

[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 mais

Orientação a Objetos

Orientaçã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 mais

Algoritmos e Estrutura de Dados III. Árvores

Algoritmos 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 mais

Microsoft Office PowerPoint 2007

Microsoft 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 mais

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Apostila 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 mais

Geração de código intermediário. Novembro 2006

Geraçã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 mais

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

SISTEMA 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 mais

Frameworks. Pasteur Ottoni de Miranda Junior

Frameworks. 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 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

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

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 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 mais

O 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. 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 mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos 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 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

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas 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 mais

3.1 Definições Uma classe é a descrição de um tipo de objeto.

3.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 mais

Persistência e Banco de Dados em Jogos Digitais

Persistê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 mais

Aplicação Prática de Lua para Web

Aplicaçã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 mais

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

Framework.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 mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO 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 mais

Algoritmos 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) 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 mais

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

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 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 mais

Organização de programas em Python. Vanessa Braganholo vanessa@ic.uff.br

Organizaçã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 mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos. Centro Tecnológico. Universidade Federal do Espírito Santo

Conteú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 mais

Aspect-Oriented Programming AOP. Comentários Sérgio Crespo

Aspect-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 mais

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Barra 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 mais

AplusixEditor: o editor para Aplusix 3 Manual de utilização

AplusixEditor: 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 mais

Feature-Driven Development

Feature-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 mais

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

Diagrama 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 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

Aula 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. 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 mais

www.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 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 mais

Resolução de problemas e desenvolvimento de algoritmos

Resoluçã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 mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS 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 mais

Compiladores - Análise Preditiva

Compiladores - 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 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

Engenharia de Software III

Engenharia 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 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

Manual 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) 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 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

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

6.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 mais

Práticas de Programação em Lógica. José Romildo Malaquias

Prá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 mais

Banco 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 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 mais

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

ANDRÉ 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 mais

Tó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 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 mais

Geração e Otimização de Código

Geraçã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 mais

Linguagem algorítmica: Portugol

Linguagem 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 mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. 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 mais

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

Introduçã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 mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃ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 mais

ALP Algoritmos e Programação. . Linguagens para Computadores

ALP 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 mais

ESTENDENDO A UML PARA REPRESENTAR RESTRIÇÕES DE INTEGRIDADE

ESTENDENDO 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 mais

Programaçã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. 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 mais

Introdução a Java. Hélder Nunes

Introduçã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 mais

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capí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 mais

Processamento de dados XML

Processamento 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 mais

Conceitos básicos de programação

Conceitos 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 mais

BARRAMENTO DO SISTEMA

BARRAMENTO 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 mais

AMBIENTE DE PROGRAMAÇÃO PYTHON

AMBIENTE 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 mais

7 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 mais

Conteúdo. Disciplina: INF 02810 Engenharia de Software. Monalessa Perini Barcellos

Conteú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 mais

Rock In Rio - Lisboa

Rock 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 mais

Introduçã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 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 mais

GereComSaber. Desenvolvimento de Sistemas de Software. Universidade do Minho Conselho de Cursos de Engenharia Licenciatura em Engenharia Informática

GereComSaber. 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 mais

Descrição do Produto. Altus S. A. 1

Descriçã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 mais

Engenharia 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 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 mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

UNIVERSIDADE 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 mais

Arquitetura de Rede de Computadores

Arquitetura 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 mais

Acadê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 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 mais

PROGRAMAÇÃO II 4. ÁRVORE

PROGRAMAÇÃ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 mais

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3 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

)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 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

Solitaire Interglobal

Solitaire 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 mais

XML 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 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 mais

Banco de Dados. Microsoft Access

Banco 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 mais

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noçõ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 mais

Introdução a Informática. Prof.: Roberto Franciscatto

Introduçã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 mais

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Introduçã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 mais

Pesquisa e organização de informação

Pesquisa 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