使用pyparsing 3.0.0a2生成铁路图:如何自定义表达式名称?
嘿,这个问题我之前折腾pyparsing铁路图的时候也碰到过!默认的Group或者Unnamed确实太不友好了,其实用pyparsing内置的setName()方法就能轻松给每个表达式指定想要的名称,具体做法看下面:
给pyparsing表达式自定义铁路图名称的方法
1. 给基础语法元素设置名称
对于Word、Literal这类基础解析元素,直接调用setName()就能替换它在铁路图里的默认显示标签,让图的可读性瞬间提升:
from pyparsing import Word, nums, Literal # 给整数和加号设置自定义名称 integer = Word(nums).setName("整数") plus_sign = Literal("+").setName("加号")
2. 给Group子图设置名称
Group作为子容器,默认会显示成“Group”,同样可以用setName()给它指定专属名称,避免多个子图都叫同一个名字:
from pyparsing import Group # 创建带自定义名称的加法表达式组 addition_expr = Group(integer + plus_sign + integer).setName("加法运算式")
3. 完整可运行示例
下面是一个完整的示例,生成的铁路图里所有元素和子图都会显示我们自定义的名称,再也不会出现杂乱的Group或Unnamed标识:
from pyparsing import Word, nums, Group, Literal, ParserElement # 启用解析加速,设置允许的空白字符 ParserElement.enablePackrat() ParserElement.setDefaultWhitespaceChars(" \t\n") # 定义带自定义名称的基础元素 integer = Word(nums).setName("整数") plus = Literal("+").setName("加号") minus = Literal("-").setName("减号") # 定义带专属名称的组表达式 add_expr = Group(integer + plus + integer).setName("加法表达式") sub_expr = Group(integer + minus + integer).setName("减法表达式") # 组合总表达式 arith_expr = add_expr | sub_expr # 生成铁路图到HTML文件 arith_expr.create_diagram("算术表达式铁路图.html")
小提醒:区分setName和结果命名
这里要注意,setName()是用来设置铁路图里的显示名称;而如果用expr("结果键名")这种写法,是给解析后的结果字典设置键值对的键,两者功能完全不同,可别搞混啦!
内容的提问来源于stack exchange,提问作者Toady




