Antlr与CIL代码的编译器

时间:2012-09-17 13:49:45

标签: c# compiler-construction antlr cil

我正在编写一个用于学习目的的编译器。

它使用针对c#代码生成的 Antlr 工具。

到目前为止,我可以处理gramar。 Lexical,Sintatic,我的测试还可以。

我的目标是生成CIL字节码,我对它很熟悉。

问题是...... 我不知道“输出”代码的好方法。我想要一些建议,例如生成它。

我有一个想法,就是创建一个类“编译器”,其中包含大量与节点相关的方法,并在迭代树时调用该方法。

IDEIA:

Class Compiler
{
   private AppededStrings = "";

   void CreateClass();
   void EndClass();
   void AddParam();
   void setAtributeToTheClass("public");
   ... and so on ...
}

这是一个好方法吗? 我找不到一个特定的话题。

2 个答案:

答案 0 :(得分:1)

页面http://msdn.microsoft.com/en-us/magazine/cc136756.aspx的某些部分适合您:)

答案 1 :(得分:0)

以下是ANTLR 3.x的示例。

从ANTLR获得AST后,根据此问题,下一个任务是将其转换为一组可执行指令。由于作者没有请求汇编作为输出,而是CIL并且正在使用ANTLR,因此网上最好的例子来自ANTLR的作者。在page Ter上讨论了如何使用StringTemplate工具生成成为指令的输出。虽然Ter使用流行的LLVM进行演示,但同样的概念适用于生成CIL作为作者请求。

另一种选择。

当我最初使用Mercury,时,他们生成了CIL代码。在过去的几年中,CIL没有得到维护,但人们仍然希望将Mercury用于.Net世界。因为在.NET世界中,任何.NET语言都编译为CIL,通过生成C#作为Mercury编译器的输出,然后将C#编译为CIL,它们实现了将Mercury编译为CIL的相同结果,但只是通过中间语言。中间语言必须是低级语言的规则。