网上有个软件,可以把C#写的程序源码和VB.net之间来回转,我现在要写一个类似的东西,把sql server 的sql文件转成mysqL可以用的,以前我有过写文本处理程序的经验,但是那基本就是替换关键字就行了,但是现在这种要把一种编程语言的源码改成另外一种,需要判断一段结构,比如一整段函数语句,一整段选择结构或循环结构,这个让我非常头疼,想知道业界在这个问题上采取的是什么方法?

解决方案 »

  1.   

    http://baike.baidu.com/link?url=Vk3EYwTuvb6ygPFoKRruWfjoye0t_Gn9jhNy2KbaLT86IN3meNCOan_ukLuPC7QM
    http://baike.baidu.com/link?url=OE2tJTEqzD4643CJwzD2ur6DtiPGXBMkPRYoFOZZwO3YaluWCkIlLMa1t4htya8v
    建议你好好看看编译原理,就知道怎么做了。
      

  2.   

    我完全无法理解,把一种sql方言改写成另外一种看样子是很复杂的事情?还要编译系统?这太笼统了你问的问题本来就笼统。
    我只是想把一种sql方言改写成另外一种,靠机器分析自动生成
      

  3.   

    我完全无法理解,把一种sql方言改写成另外一种看样子是很复杂的事情?还要编译系统?这太笼统了你问的问题本来就笼统。
    我只是想把一种sql方言改写成另外一种,靠机器分析自动生成你需要可靠性么?你需要通用性么?你见过那些靠字符串替换做成的语法转换有靠谱的么?
      

  4.   

    可靠性当然是需要的,通用性目前没想太远,就局限在两种sql方言之间,我就是意识到这种东西似乎不是靠单纯做字符串替换实现的,所以才来论坛询问思路,目前看这个东西似乎和编译器确实有点关系,那么我问具体一点,一个编译器在编译源码前,肯定首先要差错,查错的前提就是它能读懂代码,那么,它到底是如何读的:一行行读?还是一个字符一个字符的读,如果一个字符的读的话,是不是要挨个识别单词,如何判断一段结构的范围,这到底是什么领域的知识,我该去找什么资料
      

  5.   

    其实这两种语句的框架大体是相同的,但还是用用内空来填充目标框架做法比较好,再根据两者之间的差异,建议建立差异维护作业,如
    SqlServer []
    MySql ``SqlServer 直接用 +
    MySql concat()
    这些,在转换过程中你只要去维护表中找,不需要在代码中写,程式修改灵活!不要写死,所以我觉得这样的转换分析并不难写
      

  6.   

    antlr 相比其他的还是比较简单的 
    看看这个 http://www.cnblogs.com/RicCC/archive/2010/05/23/antlr-sql-parser.html
    http://antlr.org/