2014-01-23 3 views
1

작업 할 토큰이와 (내 관점에서) 팝업 최대보다 버그가 있다고 가정 무작위 : 나는 'Sweet.js : 오류 : ASSERT : enforest 내가 내 매크로를 작성했다

ASSERT: enforest assumes there are tokens to work with 

이 의미를 무엇에 대해 잘 모르겠어요하지만 난 문제를 캡슐화하기 위해 최선을 다했고,이 코드로 끝 : 나는 괄호 사이 foo 매크로를 호출하면

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

이 오류가 발생합니다 마지막에 ?을 추가 :

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

그래서, 이것은 내가 '날 미치게됩니다하십시오 : 나는 괄호를 제거하거나 ?이 그냥

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

를 작동하는 경우

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

그러나 여기에서 실패를 볼 수 있습니다 m이 오류를 몇 번이나 반복합니다. 그것은 :expr 연산자와 관련이 있어야합니다. 그렇지만 나는 욕심이 많고 마지막으로 모든 것을 선택하기 때문에 ...으로 바꿀 수 없습니다. 발견 된 것은 ?입니다.

나는이 오류를 throw하는 줄보다 here을 볼 수 있습니다. 그러나 나는 그 맥락을 모른다.

어떤 도움이 필요합니까?

답변

0

@natefaubion 덕분에 대답이 있습니다. ?을 3 진수 연산자로 해석하고 나머지 표현식을 찾을 수 없으므로 버그입니다.

또한 특정 경우에 사용자 정의 패턴 클래스 (대신 : expr)가 더 나은 해결책이 될 것입니다. 이 아이디어는 여기에 제안되었습니다 : https://github.com/mozilla/sweet.js/issues/203. @natefaubion으로 http://bit.ly/1aPmwyX

its not really a good answer! It works (kind of), but 1) there's a bug with how ternary operators are enforested 2) what you are really wanting is extensible pattern classes.

말했다 :

지금은 더러운 해결 방법은 수동으로 패턴을 분석하기 위해 case를 사용하는 것

관련 문제