2

我正在尝试undefined在 petitparser 中调试解析器。

先看代码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

我的使用有什么问题吗?

4

1 回答 1

1

当前的实现Parser debug(Parser)不适用于自修改解析器。它的实现使用Parser transformParser(Parser, Function)创建完整语法图的转换副本。因此,您的操作函数不会对正在运行的代码产生任何影响,因为它会修改未使用的旧版本语法。

我可以想办法解决这个问题(调试可以就地修改解析器),但这似乎还有其他缺点。是否愿意在GitHub 上提交和发布以进一步讨论这个问题?

于 2014-02-22T15:03:30.020 回答