2010-10-04 105 views
33

我已经使用一些可用的各种分析工具创建了几种不同的完整编程语言。但是,如何创建一个运行.Net框架的编程语言?我需要输出.Net IL并编译它,还是需要更高级别的抽象?如何创建.Net编程语言?

另外,有没有一种简单的方法来获得在Visual Studio中工作的语言?

+2

您将输出.NET IL。 .NET运行时会处理编译和运行该代码。不知道其他部分。 – 2010-10-04 17:47:28

+1

相似[资源学习如何创建一个编译器解释器为网](http://stackoverflow.com/questions/1448643/resources-to-learn-how-to-编译器 - 解释器 - 网络 - 框架) – nawfal 2014-07-21 13:02:04

回答

13

你会想看看Microsoft Research Common Compiler Infrastructure (CCI)项目。它提供了为装配生成元数据和MSIL所需的一切。调试.pdb文件对于让你的语言进行起来非常重要。

有一个姊妹项目,CCI代码模型和AST,也可能有用,取决于你有多远。

+1

Roslyn是否已经弃用了它,还是它仍然相关? – 2014-10-11 23:16:09

+0

CCI有助于创建任何*语言,Roslyn只针对C#和VB.NET – 2014-10-11 23:34:06

6

您的编译器负责将其获取的代码转换为ILCode。 ILCode是任何和所有.net语言编译的通用语言。该代码在运行时由JIT-Compiler解释。当然,如果你用C#编写编译器,它可以依靠框架中的CodeDom类来实现它。

+1

请阅读MSDN杂志中关于在C#中为给定语言实现编译器的文章:http://msdn.microsoft.com/en-us/magazine /cc136756.aspx – 2010-10-04 17:58:38

+0

链接已死亡。这是一个archive.org快照:https://web.archive.org/web/20150111033016/http://msdn.microsoft.com/en-us/magazine/cc136756.aspx – IInspectable 2017-08-25 07:49:05

10

在C#中有一个LOLCode编译器,可能是一个很好的起点。

http://code.google.com/p/lolcode-dot-net/

至于在Visual Studio中实施,有一个开源的视图引擎叫做火花(http://www.sparkviewengine.com/)是做了一些工作,让智能感知工作。背景是不同的,但教训是一样的,这很难,而且它不是一个很好的记录过程。

+0

Spark的声音很有趣。 :) – Telavian 2010-10-04 19:01:51

1

或者是否有更高级别的抽象?

只是要完成,你可以输出C#或VB.NET。两种编译器都是运行时的一部分。

虽然这是一个“真正的”编译器,但有争议。

+3

编译器是任何从一种形式转换到另一种形式。 – Telavian 2010-10-04 19:03:21

2

将您自己的语言集成到Visual Studio中的一个很好的示例是Lua Language Support项目。

5

不知道这是否就是你要找的东西,但我had a Question on SO后,我创建了一个.net Compiler for Brainf**k作为练习吧(Part 6包含实际的编译器源代码,也是on GitHub

从本质上讲,实际编译器可以用任何.net语言编写,并使用命名空间来创建程序集,类,方法等,并将IL发送到它们中。

创建新语言的实际工作显然涉及编写一个解析器/词法分析器/分析器/任何可以将您的程序解析为类并“喂”你的编译器的东西 - 抱歉,我没有这方面的经验,但请检查this list of resources如何编写一个编译器。

你确实想阅读ECMA-335了解CLI的工作原理:它支持哪些数据类型以及它实际执行什么命令。