如何在Nemerle中使用准引用来获取AST?

时间:2012-05-12 20:28:53

标签: macros metaprogramming abstract-syntax-tree quotations nemerle

我尝试使用Nemerle的准引号获取Nemerle中简单代码片段的AST。

这是我尝试过的代码:

def ast() : void {
  System.Console.WriteLine(<["Test"]>)
}

我在IdeOne(ncc 0.9.3)上运行它,我收到了这个错误:

prog.nem:2:30:2:36: error: unbound name `Literal.String'
prog.nem:2:30:2:36: error: unbound name `PExpr.Literal'

我该如何解决这些问题?

2 个答案:

答案 0 :(得分:3)

您只需添加 Nemerle.Compiler.dll 作为项目的参考。此外,一些更复杂的准引号只能在宏中工作。

using Nemerle.Compiler;
using System.Console;

macro Test()
{
    def x = <[ while (true) WriteLine(4) ]>.ToString();
    <[ WriteLine($x) ]>
}

答案 1 :(得分:2)

准引用旨在用于宏。他们需要编译器的上下文。创建一个宏库项目,并在其中使用准引用。