You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Parsimonious解析含空项的逗号分隔字符串数组的语法问题

解决parsimonious解析空项数组的语法问题

你的核心问题是原语法没强制元素间必须用逗号分隔,导致连续字符串被误判合法。直接修改PEG规则就能在解析阶段拦截错误,不用等到AST遍历。

正确的语法规则

string = ~'"[^"]+"'
comma = ","
empty = ""  # 空项对应None
element = string / empty
array = "(" (element comma)* element? ")"

规则说明

  • element定义数组单个项:要么是带引号的字符串,要么是空(对应None)
  • array的结构强制元素间用逗号分隔:
    • 开头是(
    • 重复匹配「元素+逗号」的组合(处理所有带逗号结尾的项,包括空项)
    • 最后可选一个元素(处理末尾无逗号的项,或是整个数组为空的情况)
    • 结尾是)

这样修改后,("My""Cool""Array")会直接匹配失败:第一个"My"作为element后,规则要求接下来必须是comma,但后面直接是"Cool",不符合语法,解析阶段就会报错,不会误判合法。

而目标字符串(,,"My","Cool",,"Array",,,)能正常解析:开头(后,依次匹配「空项+逗号」「空项+逗号」「字符串+逗号」「字符串+逗号」「空项+逗号」「字符串+逗号」「空项+逗号」「空项+逗号」,最后匹配一个空项再闭合),完全符合规则。

内容的提问来源于stack exchange,提问作者user2209008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:12:36