gpt4 book ai didi

python - 如何解析以相同字符开头的简约替代方案

转载 作者:行者123 更新时间:2023-11-28 16:20:11 24 4
gpt4 key购买 nike

我正在使用 parsimonious做一些解析,我无法弄清楚如何正确解析以无序方式共享第一个字符的替代方案:

例如:

文本:

2 > 3
2 >= 3

语法:

expr = ~"[0-9]+" space operator space ~"[0-9]+"
operator = ">" / "==" / "<" / ">=" / "<="
space = ~"[\\s]*"

文本的第一行会被正确解析,但第二行不会。它似乎匹配“>”然后因为看到“=”而卡住。它从不匹配“>=”作为一个整体。我如何做到这一点而不必按仔细的顺序指定这些?我尝试使用“&”进行先行匹配,但这似乎不起作用。

最佳答案

简约基于 PEG。 PEG 的一个显着特性是备选运算符是有序的,即备选选择总是从左到右尝试,第一个成功的匹配获胜。因此,PEG 语法永远不会有歧义,但您在编写语法时必须注意此属性并相应地排序备选方案。 PEG 实际上是递归下降解析器的规范。

在您的情况下,您真的应该重新排序 operator 中的匹配项生产使>=首先尝试。另一个解决方案是防止 >如果后面跟着 = 则匹配成功.这是使用句法谓词 Not 实现的.在简约的情况下,它表示为 ! ,所以这也应该有效:
operator = ">" !"=" / "==" / "<" / ">=" / "<="
这通常适用于所有 PEG 解析器。它不是具体的。

关于python - 如何解析以相同字符开头的简约替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40835461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com