如何在'undefined()'解析器中使用'debug()'

时间:2014-02-22 07:14:38

标签: dart petitparser

我正在尝试在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

我的用法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

Parser debug(Parser)的当前实现与自修改解析器不兼容。它的实现使用Parser transformParser(Parser, Function)来创建完整语法图的转换副本。因此,您的动作函数对正在运行的代码没有任何影响,因为它修改了未使用的旧语法版本。

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