• Nenhum resultado encontrado

INTEGRAÇÃO DO PORTUGOL CORE COM O BIPIDE

N/A
N/A
Protected

Academic year: 2023

Share "INTEGRAÇÃO DO PORTUGOL CORE COM O BIPIDE "

Copied!
137
0
0

Texto

Para prever as alterações necessárias ao Bipide, foi também realizado um estudo relativamente à organização da implementação, bem como à necessidade de compreender a interface CORBA disponibilizada pelo Portugol Core para integração com ferramentas C#. Foi necessário compreender a interface CORBA disponibilizada pelo Portugol Core para integração com ferramentas C#.

PROBLEMATIZAÇÃO

FORMULAÇÃO DO PROBLEMA

Solução Proposta

Alguns dos artefatos de documentação produzidos por Noschang (2012) foram utilizados para desenvolver a integração. O Manual de Integração do Portugol, que é uma documentação passo a passo para integração do Portugol Core com aplicações C# (leia-se “C sustenido”), foi utilizado e melhorado.

OBJETIVOS

Objetivo Geral

Também foi utilizado um módulo de integração que utiliza a arquitetura CORBA (Common Object Request Broker Architecture), que permite a comunicação entre objetos em diferentes linguagens de programação de forma transparente.

Objetivos Específicos

METODOLOGIA

Avaliação da documentação de integração: Foram estudados os mecanismos de integração disponíveis no Portugol Core, através da documentação existente no GitHub, e através da realização de pesquisas de referência e do trabalho de Noschang (2012) relativo à arquitetura CORBA. O Manual de Integração foi seguido numa situação prática onde foi possível propor melhorias ao mesmo.

ESTRUTURA DO TRABALHO

COMPILADORES

Etapas

Na próxima subseção, a geração de código intermediário é melhor descrita juntamente com uma de suas representações, ASA. Para realizar a geração de código objeto, o gerador de código recebe uma representação intermediária do programa fonte e a mapeia para a linguagem objeto.

Etapa de Geração de código intermediário

Como também diz o autor Aho (et al., 2008), se a linguagem objeto for o código de máquina de alguma arquitetura, devem ser definidos registradores ou locais de memória para cada uma das variáveis ​​utilizadas pelo programa.

ASA (Árvore Sintática Abstrata)

Para implementar um padrão de visitante em uma estrutura existente, primeiro precisamos definir uma interface para visitantes e adicionar métodos accept() à estrutura que chamará o visitante. O padrão Visitor possui sutilezas relacionadas principalmente à possibilidade de formação de ciclos na leitura de uma estrutura.

Figura 4. Árvore Sintática Abstrata  Fonte: Adaptado de Louden (2004)
Figura 4. Árvore Sintática Abstrata Fonte: Adaptado de Louden (2004)

BIPIDE

  • Histórico
  • Recursos
  • Projeto
  • Compilador Portugol
  • Assembly do BIP

O conjunto de instruções BIP I apresentado na Tabela 5 consiste em uma instrução de controle, três instruções de transferência e quatro instruções aritméticas. O BIP III estende a funcionalidade do BIP II adicionando instruções lógicas que se concentram no suporte bit a bit da operação lógica.

Figura 6. Bipide: Módulo de Programação  Fonte: Vieira (2012).
Figura 6. Bipide: Módulo de Programação Fonte: Vieira (2012).

PORTUGOL CORE

  • Histórico
  • Recursos
  • Projeto
  • Implementação da ASA do Portugol
  • Integração / CORBA
  • Documentação

Para responder à necessidade de uma ferramenta com suporte ao Portugol 2.0, foi desenvolvido o PortugolStudio, e para que o núcleo do Portugol 2.0 não ficasse estritamente acoplado à ferramenta, foi criado em paralelo o Portugol Core. Portugol Core é o núcleo do Portugol 2.0, totalmente independente do ambiente de desenvolvimento, dividido entre: analisador sintático, analisador semântico e interpretador (NOSCHANG, 2012). Para apoiar o ensino da pseudolíngua em Portugol e tirar partido das funções do Portugol Core, foi criado o PortugolStudio.

Documentação do código-fonte do Portugol Core: documentação em formato Javadoc, pode ser exportada como HTML. Esta documentação tem a organização interna do Portugol Core, especificando a finalidade e funcionamento de cada classe e pacote através de textos descritivos e exemplos.

Figura 12.  Interface Portugol Studio
Figura 12. Interface Portugol Studio

DISCUSSÃO

Este capítulo tem como objetivo apresentar detalhes das implementações realizadas no Bipide e Portugol Core, a análise semântica realizada e a geração do código Assembly.

COMPILADOR PORTUGOL 2.0

Gramática

Alterações no Portugol 2.0

Duas operações não seguem a mesma estrutura demonstrada na Figura 19, que são os nós: lógico não bit a bit e menos unário. Isso acontece porque NoOperacaoAtribuicao e NoOperacaoLogicaMenor estendem-se de NoOperacao, e essas outras duas operações estendem-se diretamente de NoExpressao. Essas operações não possuem operador esquerdo e direito, mas possuem apenas uma expressão, pois são operadores unários.

Anteriormente estas operações representavam um nó no ASA, esta estrutura foi modificada para que, por exemplo, o incremento "i++" corresponda a um nó de atribuição com uma operação de soma, onde o operando esquerdo é uma referência à variável "i" e o operando da direita é o inteiro 1. Na figura 20 b) é mostrada a estrutura ASA da operação de incremento após alterações na estrutura ASA. Portanto, a operação de incremento na estrutura detalhada anteriormente, quando utilizada dentro de outra atribuição, significa que a geração do código assembly deve ser gerada de forma diferente.

Figura 19. Diferentes Nós Operação e seu código Assembly a) Atribuição b) Menor
Figura 19. Diferentes Nós Operação e seu código Assembly a) Atribuição b) Menor

INTEGRAÇÃO DO COMPILADOR ATRAVÉS DO CORBA

Desenvolvimento lado servidor

Edite o arquivo Portugol.idl que descreve a interface básica para geração da dll a ser utilizada em C#. Execute o comando: “idfj –fall –td ”, onde é onde serão geradas as classes de integração, normalmente: “./src-idl-generated” , e é o local onde está localizado o arquivo idl, neste caso: “./src/br/univali/portugol/integracao/Portugol.idl”. Esses diretórios têm como raiz o diretório da própria localização do projeto, representado pelo ponto.

Compilando o projeto Portugol-Integração Java, na aplicação C# são utilizados os seguintes arquivos .jar: portugol-nucleo.jar e portugol-integracao.jar;. Foi necessário compilar o IIOPNet, e atualizar seu .DLL na geração das classes de integração do Portugol.

Desenvolvimento lado cliente

Alterações sobre o Manual de Integração

MUDANÇA NA IMPLEMENTAÇÃO DO BIPIDE

Versão Original

Desta forma, minimizam-se erros e possíveis obstáculos ao usuário que utilizará o Manual. Em "ucProgramacao" é verificada a linguagem de programação, neste caso é o português, então é chamado ANTLRStringStream, passando como parâmetro o texto do programa escrito no editor. É então gerado: um lexer denominado "PortugolLexer"; e tokens por meio da chamada “CommonTokenStream”.

O Bipide, em sua versão 3.0, contava com os analisadores gramaticais, semânticos e sintáticos do português integrados, além de gerar código assembly para a fase de simulação.

Figura 22. Diagrama Sequencial Ação Compilar
Figura 22. Diagrama Sequencial Ação Compilar

Nova Versão

O módulo de simulação é responsável por demonstrar o algoritmo em português e o resultado da geração do código em Assembly. Execute também a simulação do código assembly usando os botões de controle de simulação no menu.

Figura 24. Interface Módulo Programação
Figura 24. Interface Módulo Programação

ANALISADOR SEMÂNTICO

Versão Original

O Bipide, em sua versão original, contou com uma análise semântica para validar as principais restrições impostas pela arquitetura dos processadores BIP. A Tabela 1 demonstra onze validações semânticas realizadas pelo Bipide, e a conclusão se a validação deve ou não ser mantida na nova versão. É demonstrada a linha de código, em alguns casos o snippet de código, e os ecrãs tanto do Bipide como do PortugolStudio comprovando a existência ou não da respetiva validação através dos testes realizados.

Nova Versão

Outras operações existentes no compilador Portugol 2.0, que não são suportadas pelo BIP, estão listadas na Tabela 4. Este modo é aceito no Portugol 2.0, mas por não ser tratado no Bipide, a restrição foi criada. Expressões e/ou números no comando de leitura: em alguns testes foi identificado que o analisador do Portugol 2.0 atualmente não valida parâmetros para a função de leitura, permitindo expressões ou números, o que torna incorreta a geração do código para o comando de leitura.

Uso de "<-" como token: Foi identificado que o compilador Portugol 2.0 identifica os símbolos: "<" como uma pequena operação lógica, e o símbolo. Desta forma, a mensagem de erro é pesquisada em XAML de acordo com a linguagem escolhida. Este processo ocorre após o resultado da análise do Portugol 2.0 e durante a análise semântica realizada no Bipide.

Tabela 2. Resumo Análise Semântica que devem permanecer no Bipide
Tabela 2. Resumo Análise Semântica que devem permanecer no Bipide

GERADOR DE CÓDIGO

Versão Original

A geração de código é estruturada pelas classes do diagrama da Figura 26: a classe Codigo pode ter uma ou mais classes InstrucaoPortugol, e a classe InstrucaoPortugol pode estar relacionada a nenhuma ou várias classes InstrucaoASM. Essa relação foi demonstrada durante a simulação, onde foram destacadas as instruções correspondentes das duas linguagens. Visualização simplificada das classes onde estão armazenados os Códigos de Programa Fonte: Adaptado de Vieira (2009).

Estas classes foram utilizadas diretamente pela classe PortugolParser.cs que, ao ser realizada a análise sintática, adicionou simultaneamente instruções nas estruturas InstrucaoPortugol e InstrucaoASM ao código analisado. Vale ressaltar que, mesmo que uma linguagem seja escrita diretamente em Assembly, ainda é possível vincular esta estrutura de classes com a classe PortugolParser.cs.

Nova Versão

Foi realizada alteração na geração de código para simulação relacionada a vetores. Quando o código Assembly é gerado, também é detectada a versão BIP (versões I, II, III ou IV) que dá suporte ao código gerado. Devido à utilização do padrão Visitor, foi possível gerar código vetorial customizado para otimizar o código.

A Tabela 15 demonstra um trecho de código-fonte que permite que o código vetorial seja gerado antes da expressão na qual ele é usado. Quando ela estava apenas trabalhando no algoritmo, gerar código era o mesmo que uma tarefa.

Figura 28. Relação de elementos na interface do módulo de simulação  Mudanças no armazenamento de instruções para a Simulação
Figura 28. Relação de elementos na interface do módulo de simulação Mudanças no armazenamento de instruções para a Simulação

TESTES

Testes Automatizados

Também foi feita uma contribuição para o redesenho do ASA para facilitar as visitas aos nós para geração de código, descrito na Seção 3.1. A etapa de geração do código foi realizada utilizando o padrão Portugol Core ASA Node Visitor e o compilador C proposto por Oliveira Junior (2013), que possui ASA no mesmo formato. Além disso, a geração do código foi realizada de acordo com a limitação de cada versão do processador BIP.

Devido a este cenário, foi sugerido para trabalhos futuros, além da avaliação em sala de aula do Bipide versão 4.0, a possibilidade de geração de código em diferentes níveis de otimização. Portanto, torna-se possível utilizar as mesmas ferramentas de integração e geração de código desenvolvidas para a integração de outros compiladores.

TRABALHOS FUTUROS

Trabalho de conclusão de curso técnico-científico (exame de informática) – Universidade do Vale do Itajaí, Itajaí, 2012. Trabalho de conclusão de curso técnico-científico (exame de informática) – Centro de Ciências Tecnológicas da Terra e do Mar, Universidade do Vale do Itajaí, Itajaí, 2013. Trabalho de conclusão de curso (exame em informática) – Centro de Ciências Tecnológicas da Terra e dos Oceanos, Universidade do Vale do Itajaí, Itajaí, 2011.

Trabalho de conclusão de curso – Faculdade de Ciência da Computação, Universidade do Vale do Itajaí, Itajaí, 2011. Trabalho de conclusão de curso – Faculdade de Ciência da Computação, Universidade do Vale do Itajaí, Itajaí, 2009.

VARIÁVEL NÃO DECLARADA

Bipide

Este apêndice apresenta resumidamente a análise semântica realizada associada ao Bipide comparativamente à análise semântica do Portugol Core.

PortugolStudio

Conclusão sobre Variável não declarada

TAMANHO DO VETOR INVÁLIDO

Situação A: Tamanho do vetor igual a -1

  • Bipide
  • PortugolStudio
  • Conclusão sobre Erro Tamanho do vetor inválido ( Situação A)

Situação B: Tamanho do vetor igual a 1024

  • Bipide
  • PortugolStudio
  • Conclusão sobre Erro Tamanho do vetor inválido ( Situação B)

PROCEDIMENTO/FUNÇÃO NÃO DECLARADA

Bipide

PortugolStudio

Conclusão sobre Procedimento/Função não declarada

FUNÇÃO NÃO RETORNA VALOR

Bipide

PortugolStudio

Conclusão sobre Função não retorna valor

PROCEDIMENTO NÃO PODE RETORNAR VALOR

Bipide

PortugolStudio

Conclusão sobre Procedimento não pode retornar valor

NÚMERO INCORRETO DE PARÂMETROS

Bipide

PortugolStudio

Conclusão sobre Número incorreto de parâmetros

RECURSIVIDADE NÃO SUPORTADA

Bipide

PortugolStudio

Conclusão sobre Recursividade não suportada

SUBROTINA JÁ DECLARADA

Bipide

PortugolStudio

Conclusão sobre Subrotina já declarada

TIPO DE SUBROTINA NÃO IDENTIFICADO

Bipide

Conclusão sobre Subrotina já declarada

VARIÁVEL NÃO É VETOR

Bipide

PortugolStudio

Conclusão sobre Variável não é vetor

Este apêndice apresenta um extrato de texto proposto para ser adicionado ao Manual de Integração do Portugol descrito por Noschang (2012) e disponível no repositório GitHub do projeto Portugol da Univali-L2S (GITHUB INC, 2013), localizado no subdiretório Documentation/Developer.

CONFIGURANDO A VARIÁVEL DE AMBIENTE DO JAVA

Clique em “Editar” e adicione o caminho encontrado ao final do valor existente, por exemplo: “.;C:\Arquivos de Programas\Java\jdk1.7.0_13\bin”, sem aspas. A coluna ACC exibe o valor do registrador acumulador que atua como memória auxiliar durante a execução do programa. A coluna Z exibe o valor do flag Z do registrador STATUS, que indica se o resultado da última operação na ALU foi zero ou não.

A coluna N mostra o valor do flag N do registrador STATUS, que indica se o resultado da última operação da ALU foi um número negativo ou não. SUB t_vetor2 BLE FIMSE1 LD i STO $indr vetor LDV STO t_vetor3 STO aux LD j STO $indr vetor LDV STO t_vetor4 LD i.

Figura 71. Variáveis de Ambiente.
Figura 71. Variáveis de Ambiente.

PROGRAMA DE TESTES PORTUGOL 2.0

PROGRAMA DE TESTES HELP BIPIDE 4.0

Imagem

Figura 2. Geração de código sem representação intermediária   Fonte: Adaptado de Walker (2003)
Figura 7. Bipide: Módulo de Simulação.
Figura 8. Bipide: Módulo de Ajuda.
Figura 9. Bipide: Ajuda sensível ao contexto.
+7

Referências

Documentos relacionados

No Capítulo 2, mostraremos algoritmos alternativos para realizar multiplicação de números inteiros que serão de grande utilidade para serem utilizadas em sala de aula, sendo