gpt4 book ai didi

ruby - 用于逗号分隔列表的简单 parslet 解析器不起作用

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:53 25 4
gpt4 key购买 nike

为什么以下 Parslet 解析器无法解析以逗号分隔的列表?当我解析时,它卡住了并且不提供错误消息:

class TestParser < Parslet::Parser

rule(:name) { match['a-z'].repeat >> str(',').maybe }
rule(:names) { name.repeat }

root(:names)

end

TestParser.new.parse_with_debug('tom,samantha,ricardo') # hangs here

我知道“Parslet word until delimeter present”,并且我知道如何以其他方式解析列表,但我不明白为什么上述方法不起作用。

最佳答案

解释:

无限循环意味着您在解析器中有一个规则正在循环,但它可以匹配空字符串。如果它消耗了任何东西,你就不会得到一个无限循环。

在您的情况下:Repeat 默认为 Repeat(0),它可以匹配零个字符。 Maybe 使逗号成为可选的,因此 name 可以在不消耗任何内容的情况下进行匹配,因此它会...重复。

解决方案:

  • name 改为调用 repeat(1)

诊断:

检查我检测这些无限循环的 Parslet 分支。

它在github上。 ( https://github.com/NigelThorne/parslet )

我的分支在第二次进行循环时提示,并且自上次迭代以来它没有消耗任何东西。 (仅用于开发...因为在时间关键循环中有检查,所以执行速度较慢)

关于ruby - 用于逗号分隔列表的简单 parslet 解析器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25125572/

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