gpt4 book ai didi

ruby - Parslet 不解析整个字符串

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

对于下面的Parslet解析器

require 'parslet'
require 'parslet/convenience'

class Lines < Parslet::Parser
rule(:open_tag) {str('[')}
rule(:close_tag) {str(']')}
rule(:data) {str('name') | str('name_id') }
rule(:text) { open_tag >> data >> close_tag }
root :text
end

begin
p Lines.new.parse("[name_id]") <---- It throws error
rescue Parslet::ParseFailed => failure
Lines.new.parse_with_debug("[name_id]")
end

出现以下错误

Failed to match sequence (OPEN_TAG NAME CLOSE_TAG) at line 1 char 6.
`- Expected "]", but got "_" at line 1 char 6.

如果我从

更改 数据规则
rule(:data) {str('name') | str('name_id') }

rule(:data) {str('name_id') | str('name') }

然后它按预期工作。

但是,我正在根据用户输入动态生成规则。所以这个解决方案对我不起作用。

提前致谢。

最佳答案

规则 :data 正在构建,然后按照项目提供的顺序进行检查。要强制较长的匹配器出现在较短的匹配器之前,可以简单地对它们进行排序:

data = %w|name name_id|

data = data.sort { |a, b| b <=> a }

rule(:data) { data.map(&method(:str)).reduce(:|) }

关于ruby - Parslet 不解析整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43890856/

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