PROJAVA: Um Tradutor de Prolog para Java

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

Download "PROJAVA: Um Tradutor de Prolog para Java"

Transcrição

1 UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE CIÊNCIA DA COMPUTAÇÃO PROJAVA: Um Tradutor de Prolog para Java por AUGUSTO MECKING CARINGI Projeto de Graduação submetido como requisito parcial à obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. Jorge L. V. Barbosa Co-Orientadores: Prof. Adenauer C. Yamin Prof. Luiz A. M. Palazzo Pelotas, Novembro de 2002

2 2 Dedico, in memoriam, à minha avó, Noemi de Assumpção Osorio Caringi.

3 3 Quem, de três milênios, Não é capaz de se dar conta Vive na ignorância, na sombra, À mercê dos dias, do tempo. Johann Wolfgang von Goethe

4 4 SUMÁRIO LISTA DE FIGURAS 6 LISTA DE TABELAS 7 RESUMO 8 ABSTRACT 9 1 INTRODUÇÃO O Contexto do Trabalho Principais Contribuições do Autor Estrutura do Texto HOLOPARADIGMA Contexto e Motivação Hololinguagem Holojava PROLOG Origens Implementação O Modelo de Execução Prolog WAM: Warren Abstract Machine Técnica de Binarização Sistemas Prolog em Java jprolog Prolog Café PROJAVA Visão Geral Estrutura de um Tradutor JavaCC

5 5 4.4 JJTree Definição da Gramática Prolog Árvore de Sintaxe Abstrata IMPLEMENTAÇÃO Ambiente de Execução do Prolog Café Indexação de Cláusulas Funcionamento Estrutura do Código Traduzido Benchmarks Limitações CONCLUSÕES 40 7 REFERÊNCIAS BIBLIOGRÁFICAS 42 A Gramática Prolog para o JavaCC 45 B Programas Prolog usados nos benchmarks 49 B.1 Árvore Genealógica B.2 Série de Fibonacci B.3 Manipulação de Listas B.4 Torres de Hanói C Exemplo de Código Traduzido: Fibonacci 51 D Exemplo de Holoprograma 55

6 6 LISTA DE FIGURAS FIGURA 1 Política de Conversão de Holo para Java FIGURA 2 Gerenciamento de Arquivos na Conversão de Holo para Java 18 FIGURA 3 Módulos do Prolog Café FIGURA 4 Diagrama de Execução FIGURA 5 Diagrama de Geração do Parser FIGURA 6 Gramática Prolog FIGURA 7 Exemplo de Árvore de Sintaxe Abstrata FIGURA 8 Funcionamento Interno do PROJAVA FIGURA 9 Diagrama de Tradução de Prolog para Java

7 7 LISTA DE TABELAS TABELA 1 Principais Opções do JavaCC TABELA 2 Tipo de Produções do JavaCC TABELA 3 Classes Java que modelam os termos Prolog TABELA 4 Benchmarks

8 8 RESUMO O Holoparadigma foi desenvolvido com as seguintes motivações: exploração do paralelismo implícito, atuar sobre arquiteturas distribuídas, trabalhar com múltiplos paradigmas e explorar a execução dos múltiplos paradigmas de forma paralela e distribuída. Com o objetivo de validar o modelo no menor prazo de tempo possível, foi implementada uma ferramenta para tradução de código Holo para código Java. Algumas abstrações da Hololinguagem podem ser traduzidas diretamente para Java; outras, entretanto, necessitam de programas adicionais. Este trabalho se enquadra nesse contexto e contribuirá para integração da programação em lógica ao Holoparadigma. Seu objetivo é a implementação de um módulo para tradução de Prolog para Java. Este módulo será responsável pela tradução das ações modulares lógicas da Hololinguagem em código Java, substituindo o módulo utilizado anteriormente, o qual apresenta sérios problemas de desempenho. Palavras-chave: Holoparadigma, Holojava, Prolog, Técnicas de tradução Prolog, Programação Multiparadigma

9 9 ABSTRACT Holoparadigm was developed with the following motivations: to exploit the implicit parallelism, to be run in distributed architectures, to work with multiple paradigms and to explore the execution of multiple paradigms in a parallel and distributed manner. With the goal of validating the model in the shortest time possible, was implemented a tool for the translation of Holo code to Java. Some abstractions of Hololanguage could be translated direct to Java, others however need additional programs. This work is fit in this context and will contribute to the integration of logic programming to Holoparadigm. Its goal is the implementation of a module to translate Prolog to Java. This module will be responsible for the translation of Hololanguage s modular logic actions to Java code, replacing the previously used module which have serious performance problems. Keywords: Holoparadigm, Holojava, Prolog, Prolog translation techniques, Multiparadigm Programming

10 10 1 INTRODUÇÃO Maior produtividade na programação pode ser obtida através da escolha do paradigma de programação mais apropriado ao tratamento do problema, entretanto, no desenvolvimento de sistemas de software complexos, muitas vezes, um único paradigma não é suficiente. Nesses casos, a melhor abordagem é a programação multiparadigma (HORSPOOL 1996). Linguagens de programação tradicionais (baseadas no paradigma imperativo) são criticadas por não possuírem embasamento matemático, pela dificuldade que elas trazem ao desenvolvimento de software, por não possuirem clareza e por forçarem o programador a pensar de maneira seqüencial. Por outro lado, quase a totalidade de sistemas implementados para uso industrial e comercial são desenvolvidos em linguagens imperativas, ficando os paradigmas alternativos restritos ao meio acadêmico. Provavelmente isso se atribua ao fato de que a transição-de-estados, conceito fundamental da programação imperativa, seja, na verdade, um paradigma muito útil para resolver problemas práticos. Contudo, torna-se claro que certos tipos de problemas são resolvidos de muito melhor forma através de paradigmas não-imperativos. Resolvidos de muito melhor forma significa que a solução é mais clara, mais legível, mais concisa e que ele modela de uma maneira muito melhor o problema tratado (HORSPOOL 1996). Um dos principais representantes dos paradigmas não-convencionais é o paradigma da programação em lógica, paradigma este que tem como modelo computacional a lógica do cálculo de predicados; conforme COLMERAUER (1992), o termo programação em lógica é devido a Robert Kowalski, que vislumbrou a possibilidade de utilização da lógica como linguagem de programação. Prolog, por sua vez, é a linguagem pioneira e principal representante do paradigma da programação em lógica. De acordo com COLMERAUER (1992), Prolog, que é a abreviação de PROgrammation en LOGique, foi desenvolvida no início da década de 70 por ele e seus colegas, na Universidade de Marselha. Desde

11 11 então, a linguagem foi alvo de intensas pesquisas e, entre as suas principais áreas de aplicação, destacam-se: Sistemas baseados em conhecimento; Sistemas de bases de dados; Sistemas especialistas; Processamento da linguagem natural; Engenharia de software; Prova automática de teoremas; Construção de compiladores; Computação simbólica. Segundo STERLING (1994), um programa lógico é um conjunto de axiomas, ou regras, que definem relações entre objetos. A computação de um programa lógico é uma dedução de conseqüências do programa. Um programa define um conjunto de conseqüências, que são seu significado. A arte da programação em lógica consiste em construir programas concisos e elegantes que apresentem o significado desejado. Umas das principais idéias da programação em lógica é de que um algoritmo é constituído por dois elementos disjuntos: a lógica e o controle. O componente lógico corresponde à definição do que deve ser solucionado, enquanto o componente de controle estabelece como a solução pode ser obtida. O programador precisa somente descrever o componente lógico de um algoritmo, deixando o controle da execução a cargo do sistema computacional. Isto possibilita que o programador simplesmente especifique o problema, ao invés de ter que descrever o procedimento para solucioná-lo (PALAZZO, 1997). Este alto poder de expressão, aliado à capacidade de exploração do paralelismo implícito da linguagem Prolog, a torna umas das peçaschave do Holoparadigma. HORSPOOL (1996) e BARBOSA (2002) analisam as diferentes técnicas de programação multiparadigma. A Hololinguagem é classificada como uma linguagem

12 12 multiparadigma de unificação total, porém, com o objetivo de testar os holoprogramas no menor espaço de tempo possível, foi desenvolvida uma ferramenta que traduz código Holo para código Java, neste caso, a abordagem utilizada para fins de execução consiste na programação multiparadigma baseada em tradução, posto que os diferentes paradigmas que compõem o Holo são traduzidos para o paradigma imperativo/orientado a objetos da linguagem Java. A ferramenta Holojava, a qual tem seu funcionamento detalhado no capítulo 2, realiza a tradução dos holoprogramas para Java através de um mapeamento das construções Holo para construções Java. Entretanto, alguns aspectos não possuem equivalentes em Java; nesses casos, são utilizadas ferramentas adicionais, Tratandose especificamente do código Prolog, a ferramenta utilizada até então para tradução era o Prolog Café, contudo, o baixo desempenho deste software, bem como a necessidade do domínio desta tecnologia de tradução, foram os fatores motivadores do presente trabalho. 1.1 O Contexto do Trabalho O Holoparadigma (BARBOSA, 2001) foi desenvolvido com as seguintes motivações: exploração do paralelismo implícito, atuar sobre arquiteturas distribuídas, trabalhar com múltiplos paradigmas e explorar a execução destes de forma paralela e distribuída. Este trabalho se enquadra neste contexto e tem por objetivo central a implementação de um novo tradutor de código fonte Prolog para código fonte Java, com o intuito de substituir o utilizado anteriormente, o qual possui sérios problemas de desempenho. O foco do trabalho é a integração do paradigma da programação em lógica ao Holoparadigma, através do novo tradutor.

13 1.2 Principais Contribuições do Autor 13 Além de participar de discussões sobre os aspectos relativos à integração do paradigma da programação em lógica ao Holoparadigma, destaca-se a atuação do autor nos seguintes aspectos do trabalho: Identificação da origem do problema de desempenho do tradutor utilizado posteriormente; Definição da melhor abordagem para sanar o gargalo de desempenho; Identificação da necessidade de aproveitamento do ambiente de execução do Prolog Café; Implementação do novo tradutor. 1.3 Estrutura do Texto O presente trabalho está dividido em seis capítulos, de forma a introduzir o leitor gradativamente no tema proposto. O primeiro capítulo é a introdução, onde foram apresentados os objetivos, o contexto do do trabalho e também as contribuições do autor. No segundo capítulo, são introduzidos conceitos referentes ao Holoparadigma e tecnologias relacionadas, incluindo Holojava, a ferramenta de tradução de Holo para Java. O terceiro capítulo trata da linguagem Prolog, sua história, suas principais características, fundamentos e técnicas de implementação, além do tradutor atualmente utilizado na Holojava: Prolog Café. Nos capítulo quatro e cinco, são descritos respectivamente, o modelo proposto para o novo tradutor e sua implementação e, no sexto, estão as conclusões deste trabalho.

14 14 A gramática Prolog no formato da ferramenta JavaCC utilizada no desenvolvimento do tradutor PROJAVA está no anexo A. No anexo B, por sua vez, estão os programas em Prolog utilizados nos testes de tradução e benchmarks. A listagem completa do programa que calcula Fibonacci traduzido para Java pode ser encontrada no anexo C e, finalmente, o anexo D contém um exemplo de programa na Hololinguagem.

15 15 2 HOLOPARADIGMA 2.1 Contexto e Motivação Conforme BARBOSA (2002), o Holoparadigma (de forma abreviada, Holo) é um modelo multiparadigma que possui uma semântica simples e distribuída. Através dessa semântica, o modelo estimula a exploração automática da distribuição (distribuição implícita). O estímulo à distribuição implícita é seu principal objetivo. O paralelismo implícito propõe a detecção automática do paralelismo e sua exploração através de mecanismos inseridos no software básico dos sistemas computacionais. Por sua vez, nos últimos anos, os sistemas distribuídos têm recebido cada vez mais atenção, tanto dos centros de pesquisa quanto das empresas. Nesse contexto, torna-se interessante a integração dos temas paralelismo implícito e sistemas distribuídos em um tópico de pesquisa denominado distribuição implícita (BARBOSA, 2002). O Holoparadigma possui como unidade de modelagem os entes e, como unidade de informação, os símbolos. Um ente elementar é organizado em três partes: interface, comportamento e história. Um ente composto possui a mesma organização de um ente elementar, no entanto, suporta a existência de outros entes na sua composição (entes componentes). Cada ente possui uma história. A história fica encapsulada no ente e, no caso dos entes compostos, é compartilhada pelos entes componentes. De acordo com BARBOSA (2002), um ente elementar assemelha-se a um objeto do paradigma orientado a objetos. Do ponto de vista estrutural, a principal diferença consiste na história, a qual atua como uma forma alternativa de comunicação e sincronização. Um ente composto assemelha-se a um grupo. Neste caso, a história atua como um espaço compartilhado vinculado ao grupo.

16 Hololinguagem Conforme BARBOSA (2002), a Hololinguagem (de forma abreviada Holo), implementa os conceitos propostos pelo Holoparadigma. Suas principais características são: multiparadigma: Holo integra múltiplos paradigmas básicos. Atualmente, estão integrados os paradigmas imperativo, em lógica e orientado a objetos; sem tipos e orientada ao processamento simbólico: o símbolo é a unidade de informação do Holoparadigma. A Hololinguagem é baseada no processamento de símbolos e não possui tipos de dados; integração da atribuição e unificação: as variáveis lógicas são manipuladas através da unificação (paradigma em lógica), mas também existe suporte para atribuição; programação de alta ordem: Holo suporta programação de alta ordem, isto significa que símbolos representandos entes e suas partes podem ser manipulados através de variáveis; blackboard hierárquico: exite suporte a vários níveis de blackboard; suporte à Holoclonagem: Holo implementa a clonagem múltipla e seletiva como proposto no Holoparadigma; mobilidade: a mobilidade lógica é suportada explicitamente, já a mobilidade física fica a cargo do ambiente de execução; suporte à concorrência: existe suporte à concorrência entre ações e entre entes; sintaxe lógica compatível com Prolog: os aspectos lógicos da sintaxe da linguagem são compatíveis com a linguagem Prolog; sintaxe imperativa baseada no Pascal: os aspectos imperativos da sintaxe são baseados no Pascal, pela sua simplicidade e algumas semelhanças sintáticas com Prolog.

17 17 Um holoprograma é formado por descrições de entes (entes estáticos), as quais são formadas por Cabeça e Corpo. A cabeça contém o nome de um ente, seus argumentos e uma descrição de sua clonagem. O corpo é formado por duas partes: Comportamento e História. A história é um blackboard que pode ser acessado pelas ações, pelos entes componentes ou pela própria história. O comportamento é constituído por um conjunto de ações que implementam a funcionalidade, existindo cinco tipos diferentes: Ação Lógica (Logic Action - LA): ação formada por um único predicado lógico (uma ou mais cláusulas com mesmo nome e aridade); Ação Imperativa (Imperativa Action - IA): ação formada por uma função imperativa; Ação Modular Lógica (Modular Logic Action - MLA): ação formada por um módulo que encapsula ações lógicas; Ação Modular Imperativa (Modular Imperative Action - MIA): ação formada por um módulo que encapsula ações imperativas; Ação Multiparadigma (Multiparadigm Action - MA): ação que suporta o encapsulamento de LAs e IAs. 2.3 Holojava De acordo com BARBOSA (2001), visando à realização de testes de Holoprogramas (programas em Holo) no menor espaço de tempo possível, foi criada uma ferramenta de conversão de programas, denominada HoloJava. Esta ferramenta converte programas em Holo (linguagem origem) para programas em Java (linguagem destino). Esta técnica é bastante usada na avaliação de novas linguagens, pois a utilização de uma linguagem destino que possua uma plataforma (compilação e execução) já disponível antecipa a realização de testes e a difusão de resultados da pesquisa. Diversos estudos indicam que Java pode ser utilizada como linguagem intermediária na construção de compiladores. Java suporta diretamente várias abstrações

18 18 do Holoparadigma (ações imperativas, concorrência, etc). No entanto, algumas características de Holo não são suportadas (ações lógicas, blackboard e mobilidade). Por outro lado, existem bibliotecas que complementam a plataforma Java e podem ser utilizadas para implementação dos aspectos não suportados. Por exemplo, ações lógicas em Prolog Café (BANBARA, 1999), história em Jada ou JavaSpaces e mobilidade física em Voyager ou Horb. A figura 1 mostra detalhadamente esta política de conversão. Holo Java Ente estático Clonagem de Transição suportando concorrência inter ente (ação clone) Mobilidade lógica (ação move) Ação Imperativa (IA) Ação Modular Lógica (MLA) Invocação explícita História Afirmação para a história (símbolo "!") Pergunta não destrutiva bloqueante para a história (símbolo ".") Pergunta destrutiva bloqueante para a história (símbolo "#") Pergunta não bloqueante e não destrutiva para a história (símbolo "?") Pergunta não bloqueante destrutiva para a história (símbolo "?#") Classe Criação de um objeto (comando new) encapsulado em uma thread e atualização da HoloTree Reorganização da HoloTree e controle de membership nos entes envolvidos Método Classes em Java (Prolog Café) Mensagem Espaço de objetos em Jada Inserção de um fato no espaço Jada (método "out") Obtenção de um fato no espaço Jada (método "read") Obtenção de um fato no espaço Jada (método "in") Obtenção de um fato no espaço Jada (método "read_nb") Obtenção de um fato no espaço Jada (método "in_nb") FIGURA 1: Política de Conversão de Holo para Java A figura 2 ilustra como é feito o gerenciamento dos arquivos na conversão de Holo para Java. É utilizado no exemplo o programa datamining.holo, o qual é composto de 3 entes e uma ação modular lógica (MLA); a listagem completa do

19 19 programa está no anexo D. datamining.holo HoloJava 1 Ente Ente Ente MLA holo mine miner fib holo.java mine.java miner.java fib.pl 2 Prolog Café Predicado fib/2 3 Compilador Java PRED_fib_2.java holo.class + *.class 4 JVM FIGURA 2: Gerenciamento de Arquivos na Conversão de Holo para Java Através de benchmarks realizados em BARBOSA (2001a), foi possível constatar o baixo desempenho do Prolog Café. Em um programa Holo de 73 linhas, das quais apenas 12 compondo uma MLA, 98,93% do tempo total de conversão foi gasto pelo Prolog Café na tradução da MLA, e os resultados se repetiram em diferentes programas, a conversão de um programa sem MLAs chegou a ser 105 vezes mais rápida se comparada a um programa com MLAs. Baseado em tal fato, a utilização das ações modulares lógicas foi considerada um ponto crítico no desempenho da conversão.

20 20 3 PROLOG 3.1 Origens O nome Prolog, abreviação de PROgrammation en LOGique, foi inventado em Marselha no ano de 1972, ele foi escolhido por Philippe Roussel para designar um software projetado para implementar um sistema de comunicação homemmáquina em linguagem natural (COLMERAUER, 1992). A idéia chave por trás da programação em lógica é que, computação pode ser expressa como dedução controlada. 3.2 Implementação A implementação de Prolog tem uma longa história. Os primeiros sistemas foram implementados pelo grupo em torno de Colmerauer, em Marselha, sendo que o primeiro interpretador foi escrito em 1972, em Algol. Se, por um lado, foi demonstrado que era possível a implementação de uma linguagem baseada na lógica do cálculo de predicados, por outro, foi constatado que o principal problema era o baixo desempenho. O primeiro compilador Prolog foi escrito por David Warren em conjunto com Fernando e Luís Pereira em Esse compilador provou que era possível executar Prolog com desempenho semelhante ao das linguagens imperativas tradicionais e contribuiu muito para o sucesso da linguagem Prolog. 3.3 O Modelo de Execução Prolog As duas partes básicas de um interpretador Prolog são a parte de unificação e a de resolução. A resolução é bastante simples, ela consiste em um mecanismo de resolução-sld simplificado, que procura as cláusulas de cima para baixo e avalia os objetivos da esquerda para a direita. Esta estratégia leva ao mecanismo de retrocesso (backtracking) e ao layout usual das áreas de dados e pilha. A resolução manipula a

21 21 pilha de alocação, chamada de procedimentos, e o backtracking. Unificação em Prolog é definida como a seguir: duas constantes unificam se elas são iguais; duas estruturas unificam se seus functores (nome e aridade) são iguais e todos os argumentos unificarem; duas variáveis livres unificam e são amarradas juntas; uma variável livre e uma constante ou estrutura unificam e a constante ou estrutura é amarrada à variável. 3.4 WAM: Warren Abstract Machine Seis anos após o desenvolvimento de seu compilador, David Warren apresentou um novo conjunto de instruções abstratas Prolog. Este novo Prolog Engine veio a se tornar muito popular com o nome Warren Abstract Machine (WAM). Desde então, ele tem sido a base para praticamente todas as implementações Prolog a partir do ano de O Objetivo da WAM é de servir como um modelo simples e eficiente de implementação para interpretadores de byte code, bem como geradores de código nativo. GRUNE et al. (2001) analisam o fato de que enquanto poucos códigos intermediários para linguagens imperativas alcançaram mais que fama local, o código WAM se tornou um padrão de fato, e isso pode refletir a complexidade da tarefa de compilar Prolog. O modelo de execução da WAM é mais semelhante ao das linguagens imperativas do que qualquer outro modelo. A principal idéia é a divisão da unificação em duas partes, a cópia dos argumentos do objetivo chamador para registradores de argumentos e então a unificação destes registradores de argumentos com a cabeça da cláusula chamada. Isto é muito semelhante à passagem de parâmetros para funções em linguagens imperativas como C.

22 22 De acordo com GRUNE et al. (2001), as instruções da WAM lidam com itens como a seleção da cláusula adequada a usar na dedução de um fato, unificação sob várias circunstâncias e backtracking. Além disso, a WAM faz toda a alocação de memória, empregando, para isso, cinco pilhas. 3.5 Técnica de Binarização Conforme LINDGREN (1994), um problema fundamental em executar Prolog, consiste em como mapear eficientemente o controle (incluindo recursão e backtracking) para um hardware convencional. A solução tradicional para este problema, é traduzir código Prolog em instruções para uma máquina abstrata que gerencie as estruturas de controle da linguagem Prolog. Tipicamente isso é realizado através da WAM ou uma variante dela, outra abordagem, entretanto, é a técnica de binarização. A idéia chave do Prolog Binário é a transformação das cláusulas convencionais em cláusulas binárias utilizando Continuation Passing Style (CPS). A essência da técnica de CPS consiste em inserir um argumento adicional em cada predicado, que representa o próximo predicado a ser executado em caso de sucesso. Pesquisas na área de linguagens funcionais demonstraram que a técnica de CPS pode expressar o controle de uma computação de uma maneira muito semelhante ao que os gráficos de controle de fluxo fazem para as linguagens imperativas (LINDGREN, 1994). BinProlog, um sistema Prolog muito eficiente desenvolvido por Paul Tarau (TARAU, 1990) demonstrou as vantagens e desvantagens desta abordagem de implementação. Em Prolog Binário, uma cláusula tem no máximo um subobjetivo, dessa forma, a regra de controle da resolução-sld que era implícita, tornase explícita. O código a seguir ilustra como uma cláusula normal pode ser transformada em uma cláusula binária. nrev([],[]). nrev([h T],R) :- nrev(t,l), append(l,[h],r).

23 23 nrev([],[],cont) :- call(cont). nrev([h T],R,Cont) :- nrev(t,l, append(l,[h],r,cont)). KRALL (2002) também analisa os prós e contras deste método de implementação, o qual é motivado pelas simplificações que se tornam possíveis no sistema de execução. BinProlog, por exemplo, utiliza uma versão muito simplificada da WAM, entretanto, algumas desvantagens, como maior consumo de memória, se tornam presentes. 3.6 Sistemas Prolog em Java A implementação de sistemas eficientes Prolog em Java é atualmente alvo de pesquisas (BANBARA, 1999). O número de sistemas deste tipo cresce a cada dia: BirdLand s Prolog in Java, CKI Prolog, DGKS Prolog, JavaLog, Jinni, JP, jprolog, LL, MINERVA, W-Prolog e Prolog Café. Destes, apenas jprolog e Prolog Café são tradutores, os outros são interpretadores jprolog jprolog foi o primeiro conversor de Prolog para Java, desenvolvido em 1996 por Bart Demoen e Paul Tarau, ele se baseia na técnica binarização (TARAU, 1990). O sistema consiste em um conjunto de classes Java que dão suporte à execução, incluindo uma série de predicados built-in e um tradutor escrito em Prolog. O tradutor não suporta o bootstraping de forma que é necessário um sistema Prolog (SICSTus por exemplo) para realizar a conversão. Para executar o código, uma vez que ele tenha sido traduzido, basta uma máquina virtual Java. Conforme informações obtidas no site do projeto, JPROLOG (2002), o tradutor foi escrito em Prolog por dois motivos: a falta de um gerador de parsers em Java eficiente na época do projeto (1996), e as facilidades oferecidas pela linguagem Prolog para tal tipo de tarefa, incluíndo a extensão DCG (Gramática de Cláusulas Definidas).

24 Prolog Café Conforme BANBARA (1999), Prolog Café é uma ferramenta que traduz código fonte de um superconjunto de Prolog, chamado LLP (Linear Logic Programming Language), para código fonte Java. O programa foi desenvolvido por Mutsunori Banbara e Naoyuki Tamura, tendo por base o jprolog. Benchmarks também realizados por BANBARA (1999) demonstram que o código gerado é 2,2 vezes mais rápido se comparado ao código do jprolog. Além do tradutor, o programa consiste de um ambiente de execução para o código traduzido, o qual é fortemente inspirado na WAM e um conjunto de predicados built-in alguns escritos diretamente em Java e outros traduzidos a partir do Prolog. A figura 3 ilustra os módulos da ferramenta, e a figura 4, por sua vez, mostra como é feita a execução. O sistema possui duas versões do mesmo tradutor, ambos com a mesma funcionalidade, um implementado em Prolog e outro em Java, este último sendo obtido através da técnica de bootstraping, isto é, o tradutor em Prolog é usado como entrada para ele próprio, obtendo como saída um tradutor em Java. De acordo com AHO (1995), bootstraping consiste em utilizar as facilidades oferecidas por uma linguagem para compilar a si mesma. Prolog Café Ambiente de Execução para o código traduzido Tradutor de Prolog para Java escrito em Prolog (acompanha versão bootstrapped) Classes que dão suporte a execução (termos, algoritmo de unificação, etc.) Predicados Built in escritos em Java FIGURA 3: Módulos do Prolog Café

25 25 Código Traduzido de Prolog para Java Ambiente de Execução Conjunto de classes Java que dão suporte a execução do código traduzido Máquina Virtual Java (JVM) Sistema Operacional FIGURA 4: Diagrama de Execução

26 26 4 PROJAVA 4.1 Visão Geral Uma vez identificado que o baixo desempenho da ferramenta Prolog Café deve-se ao fato de o tradutor ser bootstrapped, e reconhecendo que o ambiente de execução da mesma é fruto de muitos anos de pesquisa relacionada à tradução de Prolog para linguagens imperativas, chegou-se à conclusão que a melhor abordagem seria reescrever o tradutor, a partir do zero, totalmente em Java, porém aproveitando as classes que dão suporte à execução do código traduzido. Para que isto seja possível, basta que o novo tradutor seja capaz de gerar um código compatível com o run-time environment já existente. Além disso, tal abordagem minimiza o impacto de adaptação à Holojava de um módulo de tradução de Prolog para Java totalmente diferente do que já vinha sendo utilizado. 4.2 Estrutura de um Tradutor O trabalho de um tradutor pode ser dividido basicamente em três partes: 1. Análise léxica 2. Análise Sintática 3. Geração do Código As primeiras duas fases compõem o núcleo do sistema e envolvem o entendimento do programa fonte e a verificação da correção léxica e sintática. A esse processo damos o nome de parsing. A função do analisador léxico é obter e dividir os tokens no programa fonte. Um token é uma peça significativa do fonte, como uma palavra chave, pontuação ou literais como números ou strings, trechos que são descartados incluem espaços em

27 27 branco e comentários. A análise sintática consiste em obter uma cadeia de tokens provenientes do analisador léxico e verificar se a mesma atende às especificações sintáticas da gramática da linguagem. Conforme AHO (1995) existem três tipos gerais de analisadores sintáticos: método universal, top-down e bottom-up. Através do método universal é possível trabalhar com qualquer gramática, analisadores de tal classe são muito ineficientes. Os do tipo top-down e bottom-up, bem mais eficientes, trabalham somente com determinadas subclasses das gramáticas, mas que são, contudo, suficientemente expressivas para descrever as construções sintáticas das linguagens de programação. Para implementação, duas abordagens podem ser utilizadas, escrever o analisador léxico e o analisador sintático manualmente ou fazer uso de ferramentas que realizam a geração automática de tais tipos de software a partir de determinadas regras. Na década de 50, com o advento dos primeiros compiladores, a construção de analisadores, especialmente os sintáticos, era considerada uma tarefa árdua. Desde então, muita teoria foi desenvolvida na área, com grande destaque para a Teoria das Linguagens Formais, de modo que, atualmente, a construção manual é desconsiderada na maior parte dos casos, deixando-se tal tarefa para ferramentas automatizadas. Existe uma série de ferramentas deste tipo, sendo as mais conhecidas, os tradicionais lex (gerador de analisadores léxicos) e yacc (gerador de analisadores sintáticos) que advêm do mundo Unix; tais programas, porém, não geram código em Java. Dentro da gama de ferramentas que geram código Java, uma destacou-se como padrão: JavaCC (Java Compiler Compiler). É interessante observar que tal classe de software também é conhecida como Compilador de Compiladores. Outro fator que determinou a adoção do JavaCC foi a prévia utilização do mesmo no projeto Holoparadigma, posto que o parser da Hololinguagem é gerado através dele. Tendo o processo de parsing sido executado com sucesso e não gerado nenhum erro, o sistema terá uma representação interna do programa a qual pode ser facilmente manipulada pelo último estágio do tradutor: o gerador de código, que, ao contrário do parser, precisa ser escrito manualmente a fim de se obter o compor-

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

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

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

Leia mais

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

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

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

Leia mais

Breve Tutorial de JavaCC

Breve Tutorial de JavaCC Breve Tutorial de JavaCC O que é? Instalação: http://javacc.dev.java.net Exemplos usados de: http://w3.msi.vxu.se/users/jonasl/javacc http://www.cs.nmsu.edu/~rth/cs/cs471/interpretersjavacc.html http://www.engr.mun.ca/~theo/javacc-tutorial/javacc-tutorial.pdf

Leia mais

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

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

Leia mais

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

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

Leia mais

4 Conversor EDTV Raw. 4.1 Arquitetura

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

Leia mais

Suporte à Engenharia Reversa para o ambiente SEA

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

Leia mais

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

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

Leia mais

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

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

Leia mais

Java Como Programar, 8/E

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

Leia mais

3. PARADIGMA ORIENTADO A OBJETOS

3. PARADIGMA ORIENTADO A OBJETOS Paradigmas de Linguagens I 1 3. PARADIGMA ORIENTADO A OBJETOS Este paradigma é o que mais reflete os problemas atuais. Linguagens orientada a objetos (OO) são projetadas para implementar diretamente a

Leia mais

Como construir um compilador utilizando ferramentas Java

Como construir um compilador utilizando ferramentas Java Como construir um compilador utilizando ferramentas Java p. 1/3 Como construir um compilador utilizando ferramentas Java Aula 5 Análise Léxica com JavaCC Prof. Márcio Delamaro delamaro@icmc.usp.br Como

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

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

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

Leia mais

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas)

ENIAC. Introdução aos Computadores e à Programação (Noções Básicas) ENIAC Introdução aos Computadores e à ção (Noções Básicas) Introdução aos Computadores e à ção (Noções Básicas) 1 Introdução aos Computadores e à ção (Noções Básicas) 2 O transistor foi inventado em 1947

Leia mais

Paradigmas de Programação

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

Leia mais

Programação Elementar de Computadores Jurandy Soares

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

Leia mais

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

RAFF Um Compilador para Facilitar o Aprendizado de Algoritmos

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

Leia mais

Paradigmas e Histórico de

Paradigmas e Histórico de Paradigmas e Histórico de Linguagens de Programação Linguagens de Programação Departamento de Computação Universidade Federal de Sergipe Influências sobre o projeto de linguagens Arquitetura do computador

Leia mais

Conceitos de Linguagens de Programação

Conceitos de Linguagens de Programação Conceitos de Linguagens de Programação Aula 07 Nomes, Vinculações, Escopos e Tipos de Dados Edirlei Soares de Lima Introdução Linguagens de programação imperativas são abstrações

Leia mais

Programação Orientada a Objetos em java. Polimorfismo

Programação Orientada a Objetos em java. Polimorfismo Programação Orientada a Objetos em java Polimorfismo Polimorfismo Uma característica muito importante em sistemas orientados a objetos Termo proveniente do grego, e significa muitas formas Em POO, significa

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

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

Leia mais

Linguagens de programação

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

Leia mais

Parte II Introdução a Linguagens de Programação

Parte II Introdução a Linguagens de Programação Programação de Computadores III Aula 1 Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2011.1/tcc-03.063 Roteiro da Aula

Leia mais

PROGRAMAÇÃO JAVA. Parte 1

PROGRAMAÇÃO JAVA. Parte 1 PROGRAMAÇÃO JAVA Parte 1 O que é um programa? Um algoritmo (sequência de operações elementares - instruções) convertido para uma linguagem que possa ser executada por um computador Programa = Algoritmos

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

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

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS João Gabriel Ganem Barbosa Sumário Motivação História Linha do Tempo Divisão Conceitos Paradigmas Geração Tipos de Dados Operadores Estruturada vs

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 6 - ALGORÍTIMOS PARALELOS MPI - Parallel Virtual Machine e PVM - Parallel Virtual Machine 1. INTRODUÇÃO Inicialmente é necessário conceber alguns conceitos para entendimento dos algoritmos paralelos:

Leia mais

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti ESTRUTURAS DE DADOS I Notas de Aula 1 SUMÁRIO 1. INTRODUÇÃO... 2 1.1 Array (vetores)... 2 2. BUSCA DE ELEMENTOS... 3 2.1 Busca Seqüencial... 3 2.2 Busca Binária... 3 2.3 Busca Indexada... 3 2.4 Busca Hash...

Leia mais

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

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

Leia mais

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: Introdução à Programação Carga horária total: 60 Carga horária teórica: 0 Carga horária prática: 60 Código da Disciplina: CCMP0041 Período de oferta: 2010.2 Turma: CA

Leia mais

Curso Técnico em Redes

Curso Técnico em Redes Curso Técnico em Redes Prof. Airton Ribeiro - 2012 Histórico das Linguagens de Programação O que é? É um método padronizado para expressar instruções para um computador. É um conjunto de regras sintáticas

Leia mais

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

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

Leia mais

Módulo 06 Desenho de Classes

Módulo 06 Desenho de Classes Módulo 06 Desenho de Classes Última Atualização: 13/06/2010 1 Objetivos Definir os conceitos de herança, polimorfismo, sobrecarga (overloading), sobreescrita(overriding) e invocação virtual de métodos.

Leia mais

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com

Sistemas Operacionais 2014 Introdução. Alexandre Augusto Giron alexandre.a.giron@gmail.com Sistemas Operacionais 2014 Introdução Alexandre Augusto Giron alexandre.a.giron@gmail.com Roteiro Sistemas Operacionais Histórico Estrutura de SO Principais Funções do SO Interrupções Chamadas de Sistema

Leia mais

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

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO -

FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO - FAP - Faculdade de Apucarana Curso de Sistemas de Informação RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO RESUMO EXPANDIDO DE TRABALHO DE CONCLUSÃO DE CURSO - PLATAFORMA ARES: UMA PLATAFORMA VIRTUAL

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

Paradigmas de Linguagens de Programação. Aspectos Preliminares

Paradigmas de Linguagens de Programação. Aspectos Preliminares Aspectos Preliminares Cristiano Lehrer Motivação (1/6) Aumento da capacidade de expressar idéias: Difícil conceituar estruturas quando não se pode descreve-las. Programadores são limitados pelas linguagens.

Leia mais

Criando documentação com javadoc

Criando documentação com javadoc H Criando documentação com javadoc H.1 Introdução Neste apêndice, fornecemos uma introdução a javadoc ferramenta utilizada para criar arquivos HTML que documentam o código Java. Essa ferramenta é usada

Leia mais

Introdução a Threads Java

Introdução a Threads Java Introdução a Threads Java Prof. Gerson Geraldo Homrich Cavalheiro Universidade Federal de Pelotas Departamento de Informática Instituto de Física e Matemática Pelotas RS Brasil http://gersonc.anahy.org

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente

Um compilador é um programa que lê um programa escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num programa equivalente Capítulo 1 Introdução Um compilador é um que lê um escrito numa dada linguagem, a linguagem objecto (fonte), e a traduz num equivalente numa outra linguagem, a linguagem destino Como parte importante neste

Leia mais

Interpretação e Compilação de Linguagens de Programação

Interpretação e Compilação de Linguagens de Programação Interpretação e Compilação de Linguagens de Programação 28 de Fevereiro de 2013 Esta unidade curricular pretende transmitir ao longo de um semestre as noções fundamentais sobre o desenho e implementação

Leia mais

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

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

Leia mais

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

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

Leia mais

Introdução. Paradigmas de Linguagens de Programação. Heloisa de Arruda Camargo. Motivos para estudar os conceitos de linguagens de programação

Introdução. Paradigmas de Linguagens de Programação. Heloisa de Arruda Camargo. Motivos para estudar os conceitos de linguagens de programação Paradigmas de Linguagens de Programação Heloisa de Arruda Camargo Introdução Motivos para estudar os conceitos de linguagens de programação Aumento da capacidade de expressar idéias É difícil para as pessoas

Leia mais

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Introdução a Linguagens de Programação Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

TABELA DE EQUIVALÊNCIA FECOMP Curso de Engenharia de Computação

TABELA DE EQUIVALÊNCIA FECOMP Curso de Engenharia de Computação TABELA DE EQUIVALÊNCIA FECOMP Curso de Engenharia de Computação Disciplina A Disciplina B Código Disciplina C/H Curso Disciplina C/H Código Curso Ano do Currículo 66303 ESTRUTURA DE DADOS I 68/0 ENG. DE

Leia mais

O que significa programar e a razão da sua importância. os sistemas informáticos dependem da interacção de inúmeros programas

O que significa programar e a razão da sua importância. os sistemas informáticos dependem da interacção de inúmeros programas Capítulo 1 Introdução Enquadramento da disciplina O que significa programar e a razão da sua importância basilar em qualquer curso de computação os sistemas informáticos dependem da interacção de inúmeros

Leia mais

Engenharia de Software I

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

Leia mais

ALGOL 68 FUNDAMENTOS DA LINGUAGEM

ALGOL 68 FUNDAMENTOS DA LINGUAGEM ALGOL 68 FUNDAMENTOS DA LINGUAGEM Aldo Ventura da Silva 1 RESUMO Na década de 60, as linguagens estruturadas imperativas de certa forma atendiam às necessidades da época. Com o tempo e a evolução tecnológica,

Leia mais

Mobilidade e Blackboards

Mobilidade e Blackboards Uma Máquina Virtual com Suporte à Concorrência, Mobilidade e Blackboards Alex Sandro Garzão, Jorge Luis Victória Barbosa Universidade do Vale do Rio dos Sinos (Unisinos) São Leopoldo, RS, Brasil alexgarzao@bol.com.br,

Leia mais

UFRPE Prof. Gustavo Callou gcallou@gmail.com

UFRPE Prof. Gustavo Callou gcallou@gmail.com UFRPE Prof. Gustavo Callou gcallou@gmail.com 1 Algoritmos Representação Exercícios Linguagens de Programação Compilador Interpretador Ambiente de Desenvolvimento Python Característica Para que serve Onde

Leia mais

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes

Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Modelagem e Implementação de Aquário de Peixes- por Jorge Fernandes - Página 1 Modelagem e Implementação (Incremental de um Software para Controle) de Aquário de Peixes Jorge Fernandes Natal, Agosto de

Leia mais

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

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

Leia mais

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário

Síntese. Compiladores. Geração de código intermediário. Linguagens Intermediárias. Modelo Clássico. Linguagens Intermediárias. Código intermediário Síntese Compiladores Código intermediário 1 Os assuntos apresentados trazem respostas às perguntas seguintes: 1. Pode a memória ser alocada dinamicamente? 2. Pode a memória ser liberada explicitamente?

Leia mais

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java.

O uso de exceções permite separar a detecção da ocorrência de uma situação excepcional do seu tratamento, ao se programar um método em Java. Exceções em Java Miguel Jonathan DCC/IM/UFRJ (rev. abril de 2011) Resumo dos conceitos e regras gerais do uso de exceções em Java O uso de exceções permite separar a detecção da ocorrência de uma situação

Leia mais

Breve Histórico & Conceitos Básicos

Breve Histórico & Conceitos Básicos Breve Histórico & Conceitos Básicos compiladores interpretadores montadores filtros pré-processadores carregadores linkers compilador cruzado (cross-compiler) auto-compilável (bootstraping) auto-residente

Leia mais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Curso Adonai QUESTÕES Disciplina Linguagem JAVA 1) Qual será o valor da string c, caso o programa rode com a seguinte linha de comando? > java Teste um dois tres public class Teste { public static void main(string[] args) { String a = args[0]; String

Leia mais

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

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

Leia mais

PROGRAMA DE DISCIPLINA

PROGRAMA DE DISCIPLINA PROGRAMA DE DISCIPLINA Disciplina: INTRODUÇÃO À PROGRAMAÇÃO Carga horária total: 60 h Carga horária teórica: 30 h Carga horária prática: 30 h Código da Disciplina: CCMP0041 Período de oferta: 2015.2 Turma:

Leia mais

Compiladores INTRODUÇÃO. www.pedrofreire.com

Compiladores INTRODUÇÃO. www.pedrofreire.com Compiladores INTRODUÇÃO www.pedrofreire.com Este documento tem alguns direitos reservados: Atribuição-Uso Não-Comercial-Não a Obras Derivadas 2.5 Portugal http://creativecommons.org/licenses/by-nc-nd/2.5/pt/

Leia mais

4 Avaliação do Código Gerado

4 Avaliação do Código Gerado Referencial Teórico 4 Avaliação do Código Gerado Nós fizemos alguns exemplos para avaliar a eficiência da especificação proposta, tanto em termos de velocidade de execução quanto de diminuição do tamanho

Leia mais

Web site. Objetivos gerais. Introdução. http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados. Profa. Patrícia Dockhorn Costa

Web site. Objetivos gerais. Introdução. http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados. Profa. Patrícia Dockhorn Costa Web site http://www.inf.ufes.br/~pdcosta/ensino/2009-1-estruturas-de-dados Estruturas de Dados Aula 1: Introdução e conceitos básicos Profa. Patrícia Dockhorn Costa Email: pdcosta@inf.ufes.br 01/03/2010

Leia mais

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1

Remote Procedure Call. Programação distribuída e paralela (C. Geyer) RPC 1 Remote Procedure Call Programação distribuída e paralela (C. Geyer) RPC 1 Autoria Autores C. Geyer Local II-UFRGS Versão V11.4 2014-2 Disciplinas SOII Programação distribuída e paralela (C. Geyer) RPC

Leia mais

Professora Isabel Harb Manssour Paradigmas de Linguagens I 1 1. INTRODUÇÃO

Professora Isabel Harb Manssour Paradigmas de Linguagens I 1 1. INTRODUÇÃO Paradigmas de Linguagens I 1 1. INTRODUÇÃO A primeira Linguagem de Programação (LP) de alto nível foi projetada durante a década de 50. Desde então, LP têm sido uma área de estudo fascinante e produtiva.

Leia mais

Programação online em Java

Programação online em Java Universidade Federal do ABC Disciplina: Processamento da Informação Assunto: Programação online em Java Programação online em Java Conteúdo Conteúdo...1 Introdução... 1 1.1.Programas necessários... 1 1.2.Visão

Leia mais

2 Auto-sintonia de Bancos de Dados e Agentes de Software

2 Auto-sintonia de Bancos de Dados e Agentes de Software 2 Auto-sintonia de Bancos de Dados e Agentes de Software A uso da abordagem de agentes de software 1 pode trazer benefícios a áreas de aplicação em que é necessário construir sistemas autônomos, ou seja,

Leia mais

Implementação de um analisador léxico: a primeira etapa na construção do compilador Marvel

Implementação de um analisador léxico: a primeira etapa na construção do compilador Marvel Implementação de um analisador léxico: a primeira etapa na construção do compilador Marvel Cláudio Lopes (peso 0.3), Gildo Leonel (peso 0.3), Sérgio Rossini (peso 0.3) 1. Visão Geral Departamento de Ciência

Leia mais

Parser para Fórmulas da Lógica Quantificacional Armazenadas em XML

Parser para Fórmulas da Lógica Quantificacional Armazenadas em XML Parser para Fórmulas da Lógica Quantificacional Armazenadas em XML Bruno Vilar 1, Parcilene Fernandes de Brito 1 1 Curso de Sistemas de Informação Centro Universitário Luterano de Palmas (CEULP/ULBRA)

Leia mais

JAVA VIRTUAL MACHINE (JVM)

JAVA VIRTUAL MACHINE (JVM) JAVA VIRTUAL MACHINE (JVM) Por Leandro Baptista, Marlon Palangani e Tiago Deoldoto, 11 de Abril de 2009 A linguagem de programação Java proporciona o desenvolvimento aplicações que podem ser executadas

Leia mais

Universidade do Estado da Bahia UNEB Departamento de Ciências Exatas e da Terra - Campus I

Universidade do Estado da Bahia UNEB Departamento de Ciências Exatas e da Terra - Campus I Metodologia de Desenvolvimento de Sistemas II/CPD025 Conceitos orientação a objetos. Evolução das técnicas de modelagem orientadas a objetos. Estrutura da linguagem UML. Conceito de processo interativo

Leia mais

GUILHERME STUTZ TÖWS ANIMAÇÃO DE ALGORITMOS

GUILHERME STUTZ TÖWS ANIMAÇÃO DE ALGORITMOS GUILHERME STUTZ TÖWS ANIMAÇÃO DE ALGORITMOS Trabalho de graduação do Curso de Ciência da Computação do Setor de Ciências Exatas da Universidade Federal do Paraná. Professor: André Luiz Pires Guedes CURITIBA

Leia mais

UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO

UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO UNIVERSIDADE CATÓLICA DE PELOTAS ESCOLA DE INFORMÁTICA CURSO DE ANÁLISE DE SISTEMAS E CIÊNCIA DA COMPUTAÇÃO Automação Hospitalar aplicando a Computação Móvel com a utilização do Holoparadigma por Eduardo

Leia mais

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal

Leia mais

XML. 1. XML: Conceitos Básicos. 2. Aplicação XML: XHTML 3. Folhas de Estilo em Cascata XML

XML. 1. XML: Conceitos Básicos. 2. Aplicação XML: XHTML 3. Folhas de Estilo em Cascata XML 1 1. : Conceitos Básicos 2. Aplicação : XHTML 3. Folhas de Estilo em Cascata 2 é um acrônimo para EXtensible Markup Language é uma linguagem de marcação muito parecida com HTML foi designada para descrever

Leia mais

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas

Arquitetura de Sistemas Operacionais Machado/Maia. Arquitetura de Sistemas Arquitetura de Sistemas Operacionais Capítulo 4 Estrutura do Sistema Operacional Cap. 4 Estrutura do Sistema 1 Sistemas Operacionais Pitágoras Fadom Divinópolis Material Utilizado na disciplina Sistemas

Leia mais

e à Linguagem de Programação Python

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

Leia mais

ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS

ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS ESPECIFICAÇÃO DO AMBIENTE EXPSEE SEGUNDO O MÉTODO CATALYSIS RESUMO Este artigo apresenta a especificação de um sistema gerenciador de workflow, o ExPSEE, de acordo com a abordagem de desenvolvimento baseado

Leia mais

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática Folha 1-1 Introdução à Linguagem de Programação JAVA 1 Usando o editor do ambiente de desenvolvimento JBUILDER pretende-se construir e executar o programa abaixo. class Primeiro { public static void main(string[]

Leia mais

Introdução à Linguagem Java

Introdução à Linguagem Java Introdução à Linguagem Java Histórico: Início da década de 90. Pequeno grupo de projetos da Sun Microsystems, denominado Green. Criar uma nova geração de computadores portáveis, capazes de se comunicar

Leia mais

GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código

GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código GeCA: Uma Ferramenta de Engenharia Reversa e Geração Automática de Código Igor Steinmacher 1, Éderson Fernando Amorim 1, Flávio Luiz Schiavoni 1, Elisa Hatsue Moriya Huzita 1 1 Departamento de Informática

Leia mais

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica

Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica Interpretação e Compilação de Linguagens de Programação Sintaxe e Semântica 28 de Fevereiro de 2013 Nesta aula apresentam-se dois dos aspetos fundamentais das linguagens de programação, sintaxe e semântica.

Leia mais

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

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

Leia mais

Programando em C# Orientado a Objetos. By: Maromo

Programando em C# Orientado a Objetos. By: Maromo Programando em C# Orientado a Objetos By: Maromo Agenda Módulo 1 Plataforma.Net. Linguagem de Programação C#. Tipos primitivos, comandos de controle. Exercícios de Fixação. Introdução O modelo de programação

Leia mais

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Reuso com Herança a e Composiçã

Reuso com Herança a e Composiçã Java 2 Standard Edition Reuso com Herança a e Composiçã ção Helder da Rocha www.argonavis.com.br 1 Como aumentar as chances de reuso Separar as partes que podem mudar das partes que não mudam. Exemplo:

Leia mais

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl

Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl AVALIAÇÃO DA QUALIDADE DO CÓDIGO FONTE ESCRITO EM PL/SQL Acadêmica: Giselle Mafra Schlosser Orientador: Everaldo Artur Grahl Roteiro Introdução Objetivos do trabalho Fundamentação teórica Desenvolvimento

Leia mais

Implementação de Jogo de Damas em Python Orientado a Objetos e em Python Funcional

Implementação de Jogo de Damas em Python Orientado a Objetos e em Python Funcional Implementação de Jogo de Damas em Python Orientado a Objetos e em Python Funcional Cristiano Medeiros Dalbem - 173362 INF01121 Modelos de Linguagens de Programação Instituto de Informática Universidade

Leia mais

Programação de Computadores

Programação de Computadores Programação de Computadores INTRODUÇÃO AOS ALGORITMOS E À PROGRAMAÇÃO DE COMPUTADORES PARTE 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Programas e Programação

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 01 Orientação a Objetos Edirlei Soares de Lima Paradigmas de Programação Um paradigma de programação consiste na filosofia adotada na

Leia mais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta

Leia mais