我的 TODO 列表中的一项是创建一种有趣的编码语言,它可以“编译”为 JavaScript。我想为此尝试Sweet.js,但我想知道是否可以编写一个针对规则之前的关键字的规则?
例如,假设您想要创建一个 Yoda 风格的 JavaScript。源代码行可能如下所示:
six var is;
将映射到
var six;
这可能使用 Sweet.js 吗?
我的 TODO 列表中的一项是创建一种有趣的编码语言,它可以“编译”为 JavaScript。我想为此尝试Sweet.js,但我想知道是否可以编写一个针对规则之前的关键字的规则?
例如,假设您想要创建一个 Yoda 风格的 JavaScript。源代码行可能如下所示:
six var is;
将映射到
var six;
这可能使用 Sweet.js 吗?
是的,你会想要使用中缀宏:
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
宏应该对您有用。