gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:02:56 25 4
gpt4 key购买 nike

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

我的用法有什么问题吗?

最佳答案

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

我可以想到一种解决问题的方法(调试可以就地修改解析器),但这似乎还有其他缺点。希望在GitHub上提交文件并发布,以便进一步讨论吗?

关于dart - 如何在 'debug()'解析器中使用 'undefined()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com