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

如何使用PLY yacc实现数组解析,识别多逗号分隔的数组元素语法

实现步骤

1. Lexer 前置配置

首先在你的词法分析器中补充3个必要token的识别规则:

  • 左中括号[对应token LBRACKET
  • 右中括号]对应token RBRACKET
  • 逗号,对应token COMMA

2. Parser 语法规则编写

以下为Python环境下PLY(常用的Python版lex/yacc实现)的规则示例,你可以直接适配到你的代码中:

# 匹配空数组:[]
def p_array_empty(p):
    'array : LBRACKET RBRACKET'
    p[0] = []

# 匹配单元素数组:[exp]
def p_array_single(p):
    'array : LBRACKET expression RBRACKET'
    p[0] = [p[2]]

# 递归匹配多元素序列:exp, exp, exp...
def p_array_elements(p):
    'array_elements : array_elements COMMA expression'
    p[0] = p[1] + [p[3]]

# 多元素序列的起始规则:第一个元素
def p_array_elements_start(p):
    'array_elements : expression'
    p[0] = [p[1]]

# 匹配多元素数组:[exp1, exp2, exp3...]
def p_array_multi(p):
    'array : LBRACKET array_elements RBRACKET'
    p[0] = p[2]

注意:规则中的expression需要替换为你自己parser中已经定义好的、对应数组内元素语法的非终结符名称。

可选扩展:支持尾逗号

如果需要兼容[a, b, ]这种带末尾逗号的语法,补充以下规则即可:

def p_array_elements_trailing_comma(p):
    'array_elements : array_elements COMMA'
    p[0] = p[1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:27:00