1. Autores Interface gráfica para compiladores gratuitos baseados em linha de comando disponíveis na internet Luciano Eugênio de Castro Barbosa Flavio Barbieri Gonzaga 2. Resumo O custo de licenciamento de ferramentas de desenvolvimento de sistemas pode ser caro. A utilização de opções gratuitas da internet pode ser uma solução, porém tais ferramentas apresentam o inconveniente de serem de difícil utilização, por não possuírem uma interface gráfica. Este trabalho propõe o desenvolvimento de editores de código-fonte em interface gráfica, que funcionam em conjunto com compiladores subjacentes baseados em linha de comando. Apresenta-se o desenvolvimento de um protótipo de um editor para a linguagem C/C++, que faz uso de um compilador gratuito disponível na internet. 3. Corpo do Trabalho 3.1. Introdução A aquisição de ferramentas de desenvolvimento de software por instituições de ensino superior e nível técnico da área de computação tem se tornado difícil, se forem levados em conta fatores tais como custo e políticas de licenciamento de software por parte dos fabricantes mais famosos. O problema se agrava quando, inadvertidamente, instalam-se cópias ilegais de softwares de desenvolvimento em computadores dos laboratórios destas instituições. A alternativa para este problema pode ser a obtenção através da rede de compiladores gratuitos, que para fins acadêmicos são satisfatórios. Um outro inconveniente gerado é a grande dificuldade de instalação e operação desta categoria de compiladores. É necessário seguir uma seqüência meticulosa de instalação, e após isso devem ser decorados uma série de comandos não tão fáceis de serem assimilados, por serem mnemônicos de operações do compilador. Como exemplo. Este trabalho propõe a criação de um editor de textos específico a uma linguagem de programação, e que seja capaz de interagir com o compilador gratuito baseado em linha de comando. Por ser de interface gráfica, apresenta as vantagens óbvias, no que diz respeito à assimilação de uso do compilador. A interface proposta possui não apenas uma descrição mais amigável dos comandos do compilador, como também oferece um destaque das palavras-chave da linguagem de programação específica, à medida que o programador digita o programa. A seguir, será apresentada uma exemplificação das dificuldades que podem ser sentidas usando-se um compilador baseado em linha de comando. O capítulo após esta revisão exibe mais detalhes do protótipo desenvolvido por este grupo de pesquisa. Depois serão discutidos tópicos conclusivos a respeito do trabalho, e as fontes bibliográficas serão indicadas.
3.2. Revisão Bibliográfica Tomando-se como exemplo a linguagem C++, alguns compiladores gratuitos foram analisados [1]. As palavras-chave foram consultadas [2]. 3.2.1. Compiladores C++ para Windows 3.2.1.1. Ming (da GNU) O compilador Ming é gratuito, baseado no compilador da GNU e funciona em DOS (também em Windows). A página web desse compilador é mostrada abaixo. http://www.xraylith.wisc.edu/~khan/software/gnu-win32/ 3.2.1.2. djgpp A página do djgpp é www.delorie.com/djgpp/. Nessa página, há todas as informações necessárias para copiar, instalar e usar esse compilador. Abaixo há um resumo das informações de instalação. O uso do djgpp é muito parecido com o do g++ do unix. É necessário pegar, num dos servidores ftp listados, no diretório v2gnu, os arquivos abaixo (pequenas variações nas versões dos arquivos em princípio são aceitas). As descrições do significado desses arquivos estão disponíveis na página do djgpp. bnu2951b.zip djdev203.zip gcc2953b.zip gpp2953b.zip txi40b.zip Todos esses arquivos devem ser descompactados para um diretório de instalação. Digamos que o nome desse diretório seja c:\winap\djgpp. Para simplificar, se quiser, crie um arquivo chamado djgpp.bat com o conteúdo abaixo. @echo off set PATH=C:\winap\DJGPP\BIN;%PATH% set DJGPP=c:/winap/djgpp/djgpp.env echo DJGPP enviromnent installed (SBVB) 3.2.2. g++ (do unix) O compilador geralmente é chamado de cc, ou de gcc ou de g++. Cada usuário deve verificar como é no seu sistema. A menos que se comande de forma diferente, o arquivo executável resultante é a.out. Deve-se lembrar que em unix qualquer arquivo pode ser executável e não apenas os que tem extensão *.exe ou *.com.
Para ver a versão do compilador sendo utilizada, é necessário digitar como mostrado abaixo. Uma das últimas versões disponíveis é 2.95. g++ -v Para compilar e linkar g++ main.cpp // programa com 1 só arquivo fonte g++ main.cpp file1.cpp file2.cpp // programa com 3 arquivos fonte Caso se modifique apenas o main.cpp, pode-se compilar apenas esse arquivo e linkar com os demais com g++ main.cpp file1.o file2.o Ensina-se o compilador a procurar arquivos include em mais um diretório com a opção -I<diretório>. No Exemplo abaixo acrescenta-se o diretório./include na busca para includes. G++ -I./include main.cpp file1.cpp file2.cpp 3.2.2.1. Usando o Help O help do g++ em unix é em grande parte baseado no comando man (manual), que adicionalmente dá ajuda em todo o sistema operacional unix. Por exemplo: para saber ajuda sobre a função chamada printf, na linha de comando, deve-se digitar como abaixo. man printf Esta breve revisão de alguns compiladores gratuitos ilustra o tempo que pode ser gasto para que alunos de cursos de graduação em computação ou áreas de aplicação assimilem a grande diversidade de comandos que tem que ser digitados a partir do teclado. 3.3. Protótipo O protótipo desenvolvido por este grupo de pesquisa apresenta as seguintes características: Feito para o Ambiente Windows; Funciona com o compilador gratuito Borland c++ 5.5 (linha de comando); Foi denominado Interfa_C Interface gráfica para compilador C e C++ ; Possui arquivo de Ajuda próprio; Conta com a função de destaque de palavras-chave da linguagem. O Interfa_C torna mais simples ações como compilar, executar e debugar um projeto, bem como dá acesso a help no formato de hipertexto. Esta facilidade a mais é obtida com a interface gráfica, onde todas as funções do compilador podem ser acessadas por cliques do mouse.
3.3.1. Destaque de Características Básicas Dentre as funções presentes no protótipo, foram selecionadas algumas para serem detalhadas. Para iniciar um novo projeto, no menu Arquivo clique no comando Novo, conforme ilustrado na Figura 1. Figura 1 Iniciando um novo projeto no Interfa_C. Uma nova janela de texto será aberta, onde poderá ser digitado o código fonte. O código terá destaque nas palavras-chave da linguagem (sintax highlight), conforme mostrado na Figura 2. Figura 2 Código fonte de um projeto simples, digitado no Interfa_C. Para compilar um projeto, o comando Compilar, do menu Projeto pode ser utilizado. Também é possível iniciar uma compilação utilizando um atalho: as teclas CTRL+F9. Para executar um projeto compilado, pode-se clicar no menu Projeto, e selecionar a opção Executar, ou então utilizar o atalho provido pela tecla F9. Para encontrar os erros de compilação, uma poderosa ferramenta foi implementada: a linha que contém o erro pode ser rapidamente encontrada, dando-se um clique duplo na lista de erros, exibida nos resultados da compilação. A Figura 3 dá uma idéia deste recurso.
Figura 3 Localizando uma linha que contém erro de compilação. O protótipo possui também um sistema de help on-line, onde o programador pode consultar ajuda a respeito tanto de tópicos específicos sobre o compilador subjacente, como também ajuda sobre o próprio uso do programa. A instalação é bastante simples: bastam ser copiados alguns arquivos de configuração, bem como o próprio executável do Interfa_C, no diretório /bin do referido compilador gratuito. 3.3.2. Detalhando as Funções Avançadas 3.3.2.1. O Destaque de Palavras Chave Para o reconhecimento de palavras-chave da linguagem (ver Figura 5.), foi desenvolvido um algoritmo próprio pelo grupo de pesquisa, que obteve a listagem de quais palavras chave reconhecer através do livro [2]. Tal algoritmo apresenta ainda a vantagem de poder ser facilmente remodelado para outras linguagens, o que agiliza consideravelmente futuros projetos de API s para compiladores de linguagens distintas. Várias alterações de código permitiram ao protótipo a vantagem de possuir um bom desempenho no destaque do código fonte digitado, além de fazer o tratamento de casos onde a execução do algoritmo não se faz necessária (por exemplo ao movimentar o cursor sem que ocorra a alteração do conteúdo digitado). Situações de digitação de palavras seguidas de caracteres especiais também foram previstas pelo projeto. Por exemplo, ao se digitar scanf(a), a string obtida e analisada pelo algoritmo deve ser apenas scanf, e não scanf(a). Logo, o destaque de sintaxe deve ser realizado apenas na palavra scanf. A Figura 4 ilustra a situação tratada de forma correta.
Figura 4 Exibindo palavras reservadas seguidas de parênteses. A função de sintax highlight implementada faz uso ainda da distinção de cores de acordo com a categoria da palavra reservada encontrada, o que torna mais confortável o trabalho do programador (ver Figura 5.). 3.3.2.2. Arquivo de Help Figura 5 Distinção de cores por categoria de palavras. O projeto visando ainda o apoio aos usuários do Interfa_C, conta com um arquivo de Help desenvolvido com a função de explicar as facilidades da API, bem como de sanar qualquer dúvida restante. A tela inicial do arquivo de ajuda pode ser vista através da Figura 6. Figura 6 Tela inicial do arquivo de Help.
Funções da API Win32 também foram utilizadas para possibilitar a utilização dos recursos comuns aos arquivos de Help do Windows, tais como busca de palavras e índices pelo arquivo de ajuda. A Figura 7 mostra tais recursos. Figura 7 Recursos do arquivo Help. O acesso ao arquivo do próprio compilador (em inglês) também pode ser realizado pelo programa, conforme a Figura 8. 4. Conclusões Figura 8 Acessando o arquivo de Help do Compilador. Como protótipo do projeto aqui descrito, apresentou-se o acima, que já vem sendo usado com sucesso por dois anos em uma faculdade de Ciência da Computação. Alguns ajustes ainda precisam ser feitos, como por exemplo o suporte a projetos envolvendo mais de um arquivo. O Interfa_C já se encontra disponível gratuitamente para Download nos principais sites de download. O projeto continua avançando no sentido de se obter generalidade no suporte com interface gráfica a compiladores gratuitos. Planeja-se construir um próximo protótipo que permita trabalhar com qualquer compilador, para qualquer linguagem. Isto pode ser obtido utilizando-se um módulo de configurações no software, que permita ao programador ajustar aspectos como o caminho onde se encontra instalado o compilador subjacente, funcionando em linha de comando. Em seguida, um arquivo externo contendo uma lista de palavras-chave da linguagem pode resolver o problema do destaque nas palavras reservadas (sintax highlight).
5. Bibliografia [1]VILAS-BOAS, Sergio Barbosa. C++ e Orientação a Objetos em Ambiente Multiplataforma [http://www.del.ufrj.br/~villas/livro_c++.html] 20/02/2003. [2]SCHILDT, Herbert. Borland C++: Completo e Total. São Paulo, Makron, 1997.