Ale*_*kin 4 .net codedom reflection.emit mono.cecil roslyn
我只是在毕业项目的开始,应该持续6个月.该项目的目标是为一种脚本语言实现.Net编译器.我将编译器构造作为课程的主题,并且知道如何实现编译器的基本步骤,但我们使用Bison和简单的编译器和GCC作为后端,因此我对实现编译器知之甚少在.Net平台上.
在对这个主题进行了一些研究后,我发现了以下用于代码生成的替代解决方案(我不是在讨论编译器的其他基本部分,比如解析器 - 它超出了范围):
我的项目的主要目标是深入研究.Net的内容,学习编译器构建并为我的工作取得好成绩.第二个目标是提出一个编译器实现,以后可以在许可的开源许可下向社区开放.
那么,这里最有趣,教育性,娱乐性和前景最好的方法是什么?如果我有更多的时间,我肯定会尝试所有这些,但我需要在6个月内提交我的工作以获得积极的成绩......
亚历山大,提前谢谢你.
如果您想要更简单的方法并且您的语言可以合理地翻译成C#,我建议您生成C#代码(或类似代码)并进行编译.罗斯林可能是最好的.显然,CCI也可以使用CCI Code做到这一点,但我从未使用过.我不推荐CodeDOM,因为它不支持静态类或扩展方法等功能.
如果您想要更多控制,或者如果想要进入低级别,可以使用Reflection.Emit直接生成CIL.但它会(更多)更多的工作,特别是如果你不熟悉CIL.我认为Cecil可以以相同的方式使用,但它的目的是用于其他东西,我认为它没有提供任何优于Reflection.Emit的优势.
正如其全名所示,DLR意味着动态语言.Expression它使用的s可用于代码生成,但我认为它们最适合在运行时生成相对简单的方法.当然,如果您的语言是动态的,DLR本身就非常有用.
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |