Sweet.js:在令牌之前定位变量的宏?

时间:2014-10-13 07:28:12

标签: javascript macros sweet.js

我的TODO列表中的一个项目是创建一种有趣的编码语言,以便编译'到JavaScript。我想为此尝试Sweet.js,但我想知道是否可以编写针对之前规则的关键字的规则?

举个例子,我们假设你想创建一个Yoda风格的JavaScript。源代码行可能如下所示:

six var is;

将映射到

var six;

使用Sweet.js可以吗?

1 个答案:

答案 0 :(得分:3)

是的,您想要使用infix宏:

let var = macro {
    rule infix { $x:ident | is } => {
        var $x;
    }
}

six var is

如果您希望is成为宏而不是var,那么显而易见的事情就是:

let is = macro {
    rule infix { $x:ident var | } => {
        var $x;
    }
}

但这实际上并不奏效。它不起作用的原因是var是......特别的。基本上,由于var创建了一个新的绑定器,因此不会在var的标识符位置扩展宏。因此,当扩展器看到var is时,它会尝试创建一个名为is的新绑定变量,而不是展开is宏。

使用中缀var宏应该适合你。