有没有一种从文本文件生成代码的简单方法?

时间:2010-03-10 19:15:28

标签: .net code-generation

我目前正在开发一个使用大量硬编码内存位置访问硬件的项目。这些位置可能会根据电气工程师的心血来潮而改变,所以我希望从工程师的记忆图中生成代码。假设地图是一个简单的文本文件,如:

Name, Type, Address, Description
Foo, int, A001, Foo integer variable
Bar, float, A002, Bar float variable

我想自动生成类似于:

的代码(不是IL)
class MachineMap
{
  /// <summary>
  /// Foo integer variable
  /// </summary>
  public readonly Addressable<int> Foo = new Addressable<int>("A001");
  /// <summary>
  /// Bar float variable
  /// </summary>
  public readonly Addressable<float> Bar = new Addressable<float>("A002");
}

有没有人对可以使这项任务变得简单或容易的工具有所了解?

4 个答案:

答案 0 :(得分:4)

看一下名为T4的Visual Studio的内置代码生成功能。 或者其他选项可能是商业产品,例如CodeSmith

看看Scott Hanselman的这篇文章:
T4 (Text Template Transformation Toolkit) Code Generation - Best Kept Visual Studio Secret

答案 1 :(得分:3)

使用这样的正则表达式(使用gvimvim):

:%s/\(.*\), \(.*\), \(.*\), \(.*\)/public readonly Addressable<\2> \1 = new Addressable<\2>("\3")/g

这解决了主要的解析部分。然后,您将内容与页眉和页脚文件连接起来:

type header.txt converted.txt footer.txt > source.c

如果地图更复杂,则使用用于语法分析的工具。否则,如果真的那么简单,请避免使用水箱做这么小的指甲。

答案 2 :(得分:0)

您可以制作自己选择的DSL,然后使用M Grammar(奥斯陆的一部分)来解析它。

答案 3 :(得分:0)

与Nick的Oslo建议类似,StringTemplate是另一种从定义良好的语法创建基于模板的源代码的方法。它有一个C#端口,因此很容易从.NET中使用。