![]() |
1
2
现在还不清楚您在做什么,但似乎很清楚的是您有一些基线代码,并且基于它的一些属性,您希望生成更多的代码。 所以这里的关键问题是,给定基线代码,如何提取有趣的属性,以及如何从这些属性生成代码?
事实上,可以从中提取真正任意代码属性的唯一工件是将源代码作为字符串(否则怎么回答呢,变量名中间的add运算符和T之间的字符数是质数?)。实际上,从字符串中获得的属性通常不是很有用(请参见我刚才给出的示例:)。
他们已经确定了一些相对标准的“编译器数据结构”:抽象语法树(AST)、符号表(ST)、控制流图(CFG)、数据流事实(DFF)、程序三元组、庞特分析等。 现在,在确定了感兴趣的属性之后,如何生成代码?在这里,编译人员一直非常关注机器代码的生成,以至于他们没有提供标准答案。这样做的人是程序转换社区( http://en.wikipedia.org/wiki/Program_transformation )。这里的想法是将程序的至少一种表示形式保留为AST,并为匹配源代码语法提供特殊支持(通过从感兴趣的代码片段构造模式匹配AST),并提供“重写”规则,有效地说,“当您看到此模式时,然后在此条件下用该模式替换它”。 通过将条件与编译器人员提供的各种属性提取机制相连接,您可以相对轻松地说出您希望得到的50年经验的支持。这种程序转换系统能够读入源代码, 对于代码生成任务,您需要将基线代码读入AST,应用分析确定感兴趣的属性,使用转换生成新的AST,然后给出答案。 为了使这样一个系统变得有用,它还必须能够解析和预打印各种源代码语言,以便C#爱好者以外的人也能从代码分析和生成中获益。 这些想法都具体化了 DMS Software Reengineering Toolkit
|
![]() |
2
2
本教程似乎以数据库为中心,但可能会给您一些提示: http://www.olegsych.com/2008/09/t4-tutorial-creatating-your-first-code-generator/ 此外,T4上最近出现了一个Hanselminutes: http://www.hanselminutes.com/default.aspx?showID=170 编辑:另一个好地方是StackOverflow上的T4标签: https://stackoverflow.com/questions/tagged/t4 编辑:(由asker撰写,新发展) 从VS2012开始,T4现在支持在单个步骤中对活动项目进行反射。这意味着您可以对代码进行更改,T4模板的编译输出将反映最新版本,而无需执行第二个反映/构建步骤。有了这个功能,我把它标记为可接受的答案。 |
![]() |
3
1
CodeDom ,这样您只需构建一次。 首先,我会阅读 this CodeProject article 确保不使用反射就无法支持特定于语言的功能。 |
![]() |
4
0
据我所知,您可以使用公共编译器基础结构之类的东西( http://ccimetadata.codeplex.com/ )以编程方式分析现有的c#源代码。
|
![]() |
5
0
我不确定最好的方法,但你可以这样做
|
![]() |
Brannon · matlab编译为C:检测slbuild与编码器 7 年前 |
|
user1804599 · 如何使用funset_avltree库? 8 年前 |
![]() |
Å»ubrówka · 更改COM对象的行为 9 年前 |
![]() |
user1698814 · 如何打印手写AST? 10 年前 |
![]() |
sobek · MATLAB编码器动态调整结构数组大小 10 年前 |