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