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.
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.
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.
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.
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
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.
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.
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.
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.
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.
PROGRAMA DE TESTES PORTUGOL 2.0
PROGRAMA DE TESTES HELP BIPIDE 4.0