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
相关产品推荐
相关产品推荐

