我正在尝试在petitparser中调试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);
}
打印:
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
我的用法有什么问题吗?
答案 0 :(得分:1)
Parser debug(Parser)
的当前实现与自修改解析器不兼容。它的实现使用Parser transformParser(Parser, Function)
来创建完整语法图的转换副本。因此,您的动作函数对正在运行的代码没有任何影响,因为它修改了未使用的旧语法版本。
我可以想办法解决问题(调试可以就地修改解析器),但这似乎还有其他缺点。注意在GitHub上提交和发布以进一步讨论这个问题?