你会考虑使用像CodeSmith这样的代码生成器的代码是什么?

时间:2011-01-18 03:21:00

标签: code-generation codesmith

我使用CodeSmith作为PLINQO模板,从我的DB对象构建我的DAL;它很棒!

我认为这是代码生成器应用程序的主要用途,但我很好奇......你会考虑使用代码生成器的其他代码吗?您是否经常使用任何CodeSmith模板(如果有,它会做什么)?

1 个答案:

答案 0 :(得分:3)

我没有使用CodeSmith,但我已经完成了相当多的代码生成。值得注意的是,我为WiMAX系统编写了大部分配置管理(CM)系统,其中CM代码是为3个不同的平台生成的。唯一的区别是每个平台的CM模型。

该模型采用自定义域特定语言(DSL),我们构建了一个解析器。该语言是一种基本的容器/元素样式,容器可以嵌套并具有标识符,元素是预定义的类型。文档是元素和容器的属性。您可以将Lua片段添加到元素和容器定义中以进行语义验证(例如,值在正确的范围内,如果它的IP地址是在其他地方定义的CIDR范围内等)。

解析器生成了一个语法树,然后我们将其推送到模板。模板语言是StringTemplate的部分C实现。我们用它来生成:

  • 应用程序可以调用以获取配置值的特定于模型的C API,
  • 收集的Lua代码,用于验证模型并提供有用的错误消息,
  • 用于管理内存中的值(用于临时操作模型)和数据库系统(用于在进程之间共享)的API的两个“后端”,
  • 配置文件解析器和编写器,
  • HTML文档和
  • 用于交互式查看和更改配置的命令行界面(CLI)实现。

回想起来,我应该直接使用Lua作为DSL。它会更加冗长,但是解析器已经存在并且可以使用很多Lua模板选项可以节省大量的开发工作。

对于具有重复结构和明确规则的事物,这些事情需要做的事情,代码生成可能是一件很棒的事情。