Python 如何解析以相同字符开头的简约格式的备选方案

Python 如何解析以相同字符开头的简约格式的备选方案,python,parsing,peg,parsimonious,Python,Parsing,Peg,Parsimonious,我正在使用来进行一些解析,但我很难找到正确解析共享无序列表中第一个字符的替代项的方法: 例如: 正文: 语法: expr = ~"[0-9]+" space operator space ~"[0-9]+" operator = ">" / "==" / "<" / ">=" / "<=" space = ~"[\\s]*" expr=~“[0-9]+”空格运算符空格~“[0-9]+” 运算符=“>”/“=”/“=”/“/”,然后由于看到“=”而被卡住。它从不与“>=”

我正在使用来进行一些解析,但我很难找到正确解析共享无序列表中第一个字符的替代项的方法:

例如:

正文:

语法:

expr = ~"[0-9]+" space operator space ~"[0-9]+"
operator = ">" / "==" / "<" / ">=" / "<="
space = ~"[\\s]*"
expr=~“[0-9]+”空格运算符空格~“[0-9]+”

运算符=“>”/“=”/“=”/“/”,然后由于看到“=”而被卡住。它从不与“>=”作为一个整体匹配。我如何做到这一点,而不必仔细地指定这些?我尝试使用“&”进行前瞻性匹配,但似乎不起作用。

节俭是基于PEG的。PEGs的一个显著特性是可选操作符是有序的,即始终从左到右尝试可选选项,第一次成功匹配获胜。因此,PEG语法从来都不是含糊不清的,但在编写相应的语法和顺序选择时,您必须注意这个属性。PEG实际上是递归下降解析器的一种规范

在您的情况下,您应该在
操作符
生产中重新排序匹配项,以便首先尝试
=
。另一种解决方案是,如果后面紧跟着
=
,则防止
匹配成功。这是通过使用语法谓词
而不是
实现的。在简约中,它用
表示,因此这也应该起作用:


运算符=“>”!“=”/“=”/“=”/“/”我想我会做正确的订购解决方案。谢谢你的帮助。
expr = ~"[0-9]+" space operator space ~"[0-9]+"
operator = ">" / "==" / "<" / ">=" / "<="
space = ~"[\\s]*"