Sweet.js:错误:ASSERT:enforest假设有令牌可供使用

时间:2014-01-23 19:27:55

标签: javascript sweet.js

我正在创建我的宏,并且有一个错误而不是随机弹出(从我的角度来看):

ASSERT: enforest assumes there are tokens to work with

我不确定这是什么意思,但我尽力将这个问题封装起来,并以此代码结尾:

macro foo {
  rule { $bar:expr ? } => { $bar }
  rule { $bar:expr } => { $bar }
}

如果我在括号之间调用foo宏并在最后添加?,则会抛出此错误:

(foo test ?)
// produces ASSERT: enforest assumes there are tokens to work with

但如果我删除括号或?它只是工作

foo test ?
// produces: test
(foo test)
// produces: test

你可以看到它失败了:

http://sweetjs.org/browser/editor.html#macro%20foo%20%7B%0A%20%20rule%20%7B%20$bar:expr%20?%20%7D%20=%3E%20%7B%20$bar%20%7D%0A%20%20rule%20%7B%20$bar:expr%20%7D%20=%3E%20%7B%20$bar%20%7D%0A%7D%0A%0A(foo%20test%20?)%0A

所以请,这让我发疯,我一次又一次地面对这个错误。它应该与:expr运算符相关,但我无法用...替换它,因为它非常贪婪,并且它会选择它找到的最后一个?

我可以看到该行而不是抛出此错误是here。但我不知道背景。

任何帮助?

1 个答案:

答案 0 :(得分:0)

感谢@natefaubion我有一个答案,它是一个错误,因为它将?解释为三元运算符并失败,因为它无法找到表达式的其余部分。

另外,对于我的具体情况,自定义模式类(而不是:expr)将是更好的解决方案。这个想法在这里提出:https://github.com/mozilla/sweet.js/issues/203

现在,一个肮脏的解决方法是使用case手动解析模式:http://bit.ly/1aPmwyX

正如@natefaubion所说

  

这不是一个很好的答案!它的工作原理(种类),但1)有三元运算符被如何构成的错误2)你真正想要的是可扩展模式类。

相关问题