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

Python PLY开发时DATA token值为None如何获取实际LexToken值

问题原因

DATA属于你自定义的语法非终结符,不是词法分析器输出的终结符(Token),PLY的p.slice仅会自动为词法终结符填充对应的LexToken对象,非终结符在p.slice中的位置默认仅保留符号标识,值为None,这是PLY的设计逻辑,不是代码错误。

解决方案

非终结符的返回值不需要从p.slice获取,直接通过p[索引]读取即可,索引对应规则中符号的排列顺序。你给出的规则里DATA是第3个符号,所以用p[3]就能拿到p_data规则返回的实际Token值,修改示例如下:

def p_show(p):
  '''statement : SHOW LPAREN DATA RPAREN'''
  # p[3] 就是DATA对应的实际Token值
  print("DATA对应值:", p[3])
  
  # 如果需要完整打印所有符号的实际内容,可以自行组合输出
  all_items = [p.slice[1], p.slice[2], p[3], p.slice[4]]
  print(all_items)

def p_data(p):
  '''DATA : INT
          | STRING'''
  # 这里已经把INT/STRING的LexToken返回给上层了,不需要修改
  p[0] = p[1]

修改后你就能看到DATA对应的实际INT或者STRING类型的LexToken内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:36:04