我目前正在开发一个使用大量硬编码内存位置访问硬件的项目。这些位置可能会根据电气工程师的心血来潮而改变,所以我希望从工程师的记忆图中生成代码。假设地图是一个简单的文本文件,如:
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");
}
有没有人对可以使这项任务变得简单或容易的工具有所了解?
答案 0 :(得分:4)
看一下名为T4的Visual Studio的内置代码生成功能。 或者其他选项可能是商业产品,例如CodeSmith。
看看Scott Hanselman的这篇文章:
T4 (Text Template Transformation Toolkit) Code Generation - Best Kept Visual Studio Secret
答案 1 :(得分:3)
使用这样的正则表达式(使用gvim
或vim
):
:%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中使用。