我刚刚开始我的毕业项目,该项目应该持续 6 个月。该项目的目标是为一种脚本语言实现一个 .Net 编译器。我在课程中将编译器构造作为一个主题,并且知道如何实现编译器的基本步骤,但是我们使用 Bison 和简单的编译器以及 GCC 作为后端,因此我对实现编译器知之甚少在.Net平台上。
在对这个主题进行了一些研究之后,我发现了以下代码生成的替代解决方案(我不是在谈论编译器的其他重要部分,比如解析器——它超出了这里的范围):
- 使用Reflection.Emit直接生成代码。
- 在 Reflection.Emit 上使用通用编译器接口抽象来自动化某些代码生成。
- 在运行时使用CodeDOM进行 C# 和 VB 编译。
- 有一个新出现的 C#“编译器即服务”,称为Roslyn,现在可作为 CTP 使用。
- DLR提供对动态代码生成的支持,并具有一些用于通过表达式树等生成运行时代码的接口。
- Mono 附带Mono.Cecil库,该库似乎也具有一些代码生成功能。
我项目的主要目标是更深入地研究 .Net,学习编译器构造并为我的工作取得好成绩。第二个目标是提出一个编译器实现,以后可以在许可的开源许可下向社区开放。
那么,什么是最有趣、最有教育意义、最有趣和最有前途的方法呢?如果我有更多时间,我肯定会尝试所有这些,但我需要在 6 个月内提交我的工作以获得积极的成绩......
提前谢谢你,亚历山大。