Ferramentas para Gerar Wrappers Managed para Classes C++ Unmanaged

Com a intenção de iniciar o projeto de geração dos wrappers managed para classes C++ unmanaged comecei a pesquisar que tipo de ferramenta iria me ajudar nessa tarefa. Esse é o tipo de coisa em que eu posso escolher a linguagem de implementação e absolutamente sempre que eu posso fazer essa escolha eu escolho Python.

Então fui atrás de módulos Python que pudessem me ajudar a alcançar meu objetivo. Os passos que eu gostaria de executar seriam os seguintes:
  1. Fazer o parsing de um header C++
  2. Para cada classe encontrada no header capturar a lista de métodos e atributos públicos
  3. Preencher alguns templates de classe managed a partir dos dados lidos do header C++

Como a tarefa envolve fazer parsing de código C++ era simplesmente essencial encontrar um módulo que já fizesse isso. Se eu fosse escrever meu próprio parser C++ sozinho eu iria, provavelmente, levar a minha vida inteira e mesmo assim ele não chegaria perto de ser bom. Ainda bem que algumas pessoas já pensaram nisso e criaram o GCC-XML. A idéia do projeto é usar o parsing já altamente refinado e debugado do compilador GCC para gerar uma saída XML que pode ser facilmente interpretada por outros programas.

Outra vantagem de usar o GCC-XML para a tarefa é que já existe um módulo pygccxml que lê arquivos XML gerados pela ferramenta e já cria estruturas de dados apropriadas em Python com a capacidade de fazer queries sobre várias informações do código lido.

Por último, a geração de código eu pretendo fazer usando um velho conhecido meu, o Cheetah Template. É um módulo de templates muito bom e fácil de usar. Ele tem uma linguagem de marcação simples de escrever e funções para preencher templates escritos com essas marcações com dados de entrada de um programa Python. Já usei ele para escrever trechos repetitivos de Pascal em um programa Delphi automaticamente para mim, baseado em uns poucos parâmetros de entrada.

Desse trio de ferramentas estou familiar somente com a última, então vou levar algum tempo para aprender a usar as duas primeiras. Mesmo assim acredito que será um excelente investimento de tempo e, no final, os geradores poderam vir a ser úteis para mais pessoas além de mim.

Last edited Nov 24, 2008 at 4:56 PM by kcfelix, version 3

Comments

No comments yet.