我已经使用几种不同的解析工具创建了几种完整的编程语言。但是,有人如何创建一个在 .Net 框架下运行的编程语言呢?我需要输出 .Net IL 并编译它吗,还是有更高级别的抽象层次?
另外,有没有一种简单的方法让该语言在 Visual Studio 中工作?
我已经使用几种不同的解析工具创建了几种完整的编程语言。但是,有人如何创建一个在 .Net 框架下运行的编程语言呢?我需要输出 .Net IL 并编译它吗,还是有更高级别的抽象层次?
另外,有没有一种简单的方法让该语言在 Visual Studio 中工作?
这里有一个使用C#编写的LOLCode编译器,可能是一个不错的起点。
http://code.google.com/p/lolcode-dot-net/
至于在Visual Studio中实现,有一个名为Spark的开源视图引擎(http://www.sparkviewengine.com/)曾经尝试使智能感知工作。虽然语境不同,但教训相同,实现起来很困难,而且没有很好的文档说明。
不确定这是否是您需要的内容,但是在我在SO上提问后,我创建了一个Brainf **k的.NET编译器作为练习(第6部分包含实际的编译器源代码,并且也可以在GitHub上找到)。
本质上,实际的编译器可以用任何.NET语言编写,并使用System.Reflection.Emit命名空间来创建程序集、类、方法等,并将IL发射到其中。
创建一种新语言的实际工作显然涉及编写解析器/词法分析器/分析器/诸如此类的工具,可以将您的程序分解成类并“喂”给您的编译器-抱歉,我没有此方面的经验,但请参阅此资源列表以了解如何编写编译器。
您确实想要阅读ECMA-335以了解CLI的工作原理:它支持哪些数据类型以及实际执行哪些命令。
您的编译器负责将收到的代码转换为ILCode。 ILCode是任何.NET语言编译的通用语言。此代码由JIT编译器在运行时解释。当然,如果您例如使用C#编写编译器,它可以依赖于框架中的CodeDom类来完成此操作。
你的编译器可以输出CIL汇编语言或者一个程序集文件(.dll
/.exe
)。
请查看CLI(公共语言基础设施)标准,该标准描述了CLI(目标平台)、CIL(汇编语言)以及程序集的二进制文件格式。
顺便提一下,这个标准也可以作为一本带注释的书籍获得。
还是有更高层次的抽象?
为了完整起见,您可以输出C#或VB.NET。这两个编译器都是运行时的一部分。
不过,这是否是一个“真正”的编译器还存在争议。