我使用了一些可用的解析工具创建了一些不同的完整编程语言。但是,有人会如何创建运行.Net框架的编程语言?我是否必须输出.Net IL并编译它或是否有更高级别的抽象?
此外,是否有一种简单的方法可以在Visual Studio中使用该语言?
答案 0 :(得分:13)
您需要查看Microsoft Research Common Compiler Infrastructure (CCI)项目。它提供了生成元数据所需的一切,以及程序集的MSIL。调试.pdb文件对你的语言来说非常重要。
有一个姐妹项目,CCI代码模型和AST,它可能也很有用,取决于你有多远。
答案 1 :(得分:10)
有一个用C#构建的LOLCode编译器可能是一个很好的起点。
http://code.google.com/p/lolcode-dot-net/
至于在Visual Studio中实现,有一个名为Spark(http://www.sparkviewengine.com/)的开源视图引擎,它可以帮助智能感知工作。背景是不同的,但是教训是一样的,很难,而且这个过程并不是很好。
答案 2 :(得分:6)
您的编译器负责将其获取的代码转换为ILCode。 ILCode是所有.net语言编译的通用语言。此代码在运行时由JIT-Compiler解释。当然,如果你用C#编写编译器,它可以依赖框架中的CodeDom类来实现它。
答案 3 :(得分:5)
不确定这是否是您要查找的内容,但在我had a Question on SO之后我创建了.net Compiler for Brainf**k作为excersize(Part 6包含实际的编译器源代码,并且还on GitHub)
实际上,实际的编译器可以用任何.net语言编写,并使用System.Reflection.Emit命名空间来创建程序集,类,方法等,并将IL放入其中。
创建一种新语言的实际工作显然包括编写一个解析器/词法分析器/分析器/可以将你的程序分解成类并“喂”你的编译器的任何东西 - 抱歉,我没有经验,但检查{{3关于如何编写编译器。
您确实希望阅读this list of resources以了解CLI的工作原理:它支持哪些数据类型以及它实际执行的命令。
答案 4 :(得分:4)
您的编译器可以输出CIL汇编语言或汇编(.dll
/ .exe
)文件。
查看the CLI (Common Language Infrastructure) standard,其中描述了CLI(目标平台),CIL(汇编语言)和程序集的二进制文件格式。
顺便说一下,标准也是available as a book with annotations。
答案 5 :(得分:2)
将自己的语言集成到Visual Studio中的一个很好的例子是Lua Language Support项目。
答案 6 :(得分:1)
还是有更高级别的抽象?
为了完成,您可以输出C#或VB.NET。两个编译器都是运行时的一部分。
如果那是一个“真正的”编译器,则有争议。