2

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

例如,假设您想要创建一个 Yoda 风格的 JavaScript。源代码行可能如下所示:

six var is;

将映射到

var six;

这可能使用 Sweet.js 吗?

4

1 回答 1

3

是的,你会想要使用中宏:

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宏应该对您有用。

于 2014-10-13T22:19:59.763 回答