自己实现代码生成器 Implement your own code generator(1)
自己实现代码生成器 Implement your own code generator(1)
我对C#语言比较熟悉,由于研究区块链技术的需要,需要学习Python语言。比如Steemit就提供了Python的编程接口。我发现使用Python语言时需要不时的查阅用法,过一段时间就会忘记,需要重新查阅。我就想,我使用到的语言结构都是类似的,能否采用某种方式描述我希望的语言结构,然后自动生成对应的Python脚本,这样就没有学习语言的负担了(也就是只需要学习一次,固化下来,后续就自动生成了)。
我上网搜索了一下开源的代码生成器,感觉都挺复杂的,我就想不如自己实现一个。于是我就用C#语言实现了一个最简易的,下面举例说明。下面的例子是生成C#语言接口框架的,Python脚本的生成后续再补充,原理是类似的。
原理很简单,先把要生成的代码片段以原始字符串的形式表达,如下所示:
string ret = "";
ret += @"using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyLib.〖baseName〗
{
/// <summary>
/// 〖interfaceHelpMsg〗
/// </summary>
public interface 〖interfaceName〗
{
}
[MyService]
class My〖baseName〗 : 〖interfaceName〗
{
}
}";
然后,再把需要替换的部分用变量和特殊的标记符标记出来(为防止重名,采用了一个不常见的Unicode字符〖〗标记),然后用用户设置的真实变量来替换,如下所示:
//命名空间、实现类的名字替换
ret=ret.Replace("〖baseName〗", baseName);
//接口名字替换
ret = ret.Replace("〖interfaceName〗", interfaceName);
//接口的说明
ret = ret.Replace("〖interfaceHelpMsg〗", interfaceHelpMsg);
最后,就可以输出代码框架了。将来,无论学习哪种语言,语言要素是不变的,只要输出不同的语言表达就好了,学习语言就事半功倍了。