编程语言间的隔阂虽然不如人类语言间的隔阂那么大,但确实是比较困挠程序员的一个问题。如果能通过某种方法实现象Delphi->c之类的转换,将是一件引人注目的事情,但这也许并不能使人们花大量的时间来实现这样的转换。我们来看,如果你是一个Delphi或C++Builder的高手,你一定做过这两者间的转换吧。每天都有大量的人做这类事的事情将带来多么大的浪费呀。而且,如果真的有可能实现的话,无疑会为开发智能编程机器积累技术和经验,给象国产的易语言这类生僻的编程语言更大的生机。为此,我作了一些思考。
  首先,我们应当慢慢来。我假设所要面对的是普通的Windows GUI程序,为使用更多的先进技术(大部分的商业软件就是如此)。因为Windows编程几乎全部基于Windows API中的函数。所以,有比较好的共性。在选择转换技术上我选择了XML。因为它得到了广泛的支持,且有很强的扩展性。主题思想如下图:
V  B
||
\  /
\/
XML(面向具体的编程语言,仅仅考虑完善的描述不考虑通用性。
||
\  /
\/
Delphi =====>> XML(同上)====>>>XPML(我瞎编的,一种通用性的程序描述格式,使用XML)…………
/
/  
||
||
XML(同上)
/
/  
||
||
C++Builder
这种花瓣形的互译模式,可以减少许多过程。转换时面对的都是统一的标准格式XPML。简明可操作。
  然后要着手是使编程语言到描述其的XML语言的转换。我已经坐了一小步,定了一个描述delphi语言源文件的XML格式,描述了dpr,pas,dfm文件。如下:
<?XML version="1.0" encoding="gb2312"?>
<delphi>
  <project>
    <program>Project1
    </program>
    <uses><name>Forms</name>
    </uses>
    <uses><name>Unit1</name><path>Unit1.pas</path><comment>Form1</comment> 
    </uses>
    <res>
    </res>
    <Initialize>
    <exp><Application><Initialize></Initialize></Application></exp>
    <exp><Application><CreateForm><param>TForm1</param><param>Form1</param></CreateForm></Application></exp>
    <exp><Application><Run></Run></Application></exp>
    </Initialize>  
  </project>
  <description>
    <Unit1>
    <Form1 source='TForm1'>
      <attribute>
        <Left>192</Left>
        <Top>107</Top>
        <Width>544</Width>
        <Height>375</Height>
        <Caption>'Hello World'</Caption>
        <Color>clBtnFace</Color>
        <Font>
          <Charset>DEFAULT_CHARSET</Charset>
          <Color>clWindowText</Color>
          <Height>-11</Height>
          <Name>'MS Sans Serif'</Name>
          <Style>[]</Style>   
        </Font>
        <OldCreateOrder>False</OldCreateOrder>
        <PixelsPerInch>96</PixelsPerInch>
        <TextHeight>13</TextHeight>
      </attribute>  
    </Form1>
    </Unit1>
  </description>
  <source>
    <Unit1>
      <interface>
        <uses>Windows
        </uses>
        <uses>Messages
        </uses>
        <uses>SysUtils
        </uses>
        <uses>Classes
        </uses>
        <uses>Graphics
        </uses>
        <uses>Controls
        </uses>
        <uses>Forms
        </uses>
        <uses>Dialogs
        </uses>       
      </interface>
      <implementation>
      </implementation>
    </Unit1>
  </source>
</delphi>
然后编出具体的代码,实现这一步的转换,我也坐了一小步,实现了dpr->XML的一部分,即转换工程名,Uses段和资源段,初始化段上为实施。如下,程序使用Windows Scripting Host写的,很业余,运行请保存为*.js双击即可。
// Windows Script Host to convert delphi's project file into XML file
//
// ------------------------------------------------------------------------
//               Copyright (C) 2001 hcstudio
//
// You have a royalty-free right