TODO列表中的一项内容是创建一种有趣的编码语言,将其“编译”到JavaScript。为此,我想尝试一下Sweet.js,但我想知道是否有可能在之前编写一个以为目标的规则?
例如,假设您希望创建一个Yoda样式的JavaScript。源行可以如下所示:
six var is;将被映射到
var six;这有可能使用Sweet.js吗?
发布于 2014-10-13 22:19:59
是的,您需要使用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 is...special。基本上,由于var创建了一个新的绑定器,所以宏不会在var的标识符位置中展开。因此,当扩展程序看到var is时,它尝试创建一个名为is的新绑定变量,而不是展开is宏。
不过,使用infix var宏应该对您有效。
https://stackoverflow.com/questions/26334861
复制相似问题