2014-02-22 3 views
2

petitparser에서 undefined 파서를 디버깅하려고합니다. 그것은 인쇄'undefined()'파서와 함께 'debug()'를 사용하는 방법

import "package:petitparser/petitparser.dart"; 

main() { 
    var mynum = undefined(); 
    var parser = string("abc").map((s) { 
    mynum.set(string("888")); 
    return s; 
    }) & mynum; 

    var result = parser.parse("abc888"); 
    print(result); 
} 

:

debug 첫째하지 않고 코드를 참조

Success[1:7]: [abc, 888] 

을하지만 debug을 추가하는 경우 :

import "package:petitparser/petitparser.dart"; 

main() { 
    var mynum = undefined(); 
    var parser = string("abc").map((s) { 
    mynum.set(string("888")); 
    return s; 
    }) & mynum; 

    var result = debug(parser).parse("abc888"); 
    print(result); 
} 

그것은 실패합니다

Instance of 'SequenceParser' 
    Instance of 'ActionParser' 
    Instance of 'PredicateParser'[abc expected] 
    Success[1:4]: abc 
    Success[1:4]: abc 
    Instance of 'SetableParser' 
    Instance of 'FailureParser'[undefined parser] 
    Failure[1:4]: undefined parser 
    Failure[1:4]: undefined parser 
Failure[1:4]: undefined parser 
Failure[1:4]: undefined parser 

나의 사용에는 이상이 있습니까?

답변

1

Parser debug(Parser)의 현재 구현은 자체 수정 구문 분석기에서 제대로 작동하지 않습니다. 그 구현은 완전한 문법 그래프의 변형 사본을 생성하는 Parser transformParser(Parser, Function)을 사용합니다. 따라서 사용하지 않는 이전 버전의 문법을 수정하기 때문에 실행중인 코드에 영향을 미치지 않습니다.

문제를 해결할 수있는 방법을 생각해 볼 수 있습니다 (디버거가 파서를 제자리에서 수정할 수 있음)하지만 다른 단점이있는 것 같습니다. 이 문제를 더 자세히 논의하려면 파일을 작성하고 GitHub로 발행하십시오.

+0

요즘 github을 방문 할 수 없으므로 나중에 파일을 보내 드리겠습니다. – Freewind

관련 문제