Python PEG文法中','.expression+点号表示法含义与匹配规则问询
关于Python PEG文法中
.分隔符的含义 你看到的.是Python自定义的PEG文法扩展语法,作用是表示分隔符重复规则:分隔符.重复项+ 等价于「至少1个重复项,每个重复项之间用指定分隔符隔开」,不属于标准EBNF或者PEG的原生语法,是Python官方为了简化文法定义新增的语法糖,你可以把它等价转换为标准PEG写法:expression (',' expression)+,和官方定义的效果完全一致。
','.expression+的具体含义
这个规则的准确含义是:匹配至少1个表达式,多个表达式之间用英文逗号分隔,比如int、int, str、int, str, bool都符合这个规则。
结合func_type规则的匹配示例
func_type是函数类型签名的文法规则,以下是对应Python代码的匹配示例:
- 匹配
','.expression+ ',' '*' expression ',' '**' expression分支:
def func(a: int, b: str, *args: list, **kwargs: dict) -> None: ...
括号内的int, str, *args: list, **kwargs: dict匹配该分支,其中int, str对应','.expression+,后面分别匹配可变位置参数、可变关键字参数的类型。
- 匹配
','.expression+基础分支:
def add(a: int, b: int) -> int: ...
括号内的int, int完全匹配','.expression+规则。
- 匹配
'*' expression ',' '**' expression分支:
def func(*args: tuple, **kwargs: dict) -> None: ...
这种无固定位置参数、只有可变参数的函数类型签名匹配该分支。
补充说明
你查阅的官方文法说明只覆盖了PEG/EBNF混合的公共规则,这个.是Python文法生成工具的专属扩展语法,专门用来简化大量「重复项加分隔符」的文法定义,避免每次都要写expression (',' expression)*这类冗余规则。
内容的提问来源于stack exchange,提问作者Vikash Balasubramanian
相关产品推荐
相关产品推荐

