Python 简约错误

Python 简约错误,python,parsing,parsimonious,Python,Parsing,Parsimonious,深入研究语法和PEG in special,我希望有一个具有以下语法的DSL: a OR (b AND c) 我在这里使用的语法如下: from parsimonious.grammar import Grammar grammar = Grammar( """ expr = (term operator term)+ term = (lpar term rpar) / (variable operator variable)

深入研究语法和PEG in special,我希望有一个具有以下语法的DSL:

a OR (b AND c)
我在这里使用的语法如下:

from parsimonious.grammar import Grammar
grammar = Grammar(
    """
    expr            = (term operator term)+
    term            = (lpar term rpar) / (variable operator variable)
    operator        = and / or
    or              = _? "OR" _?
    and             = _? "AND" _?
    variable        = ~r"[a-z]+"
    lpar            = "("
    rpar            = ")"
    _               = ~r"\s*"
    """
)
print(grammar.parse('a OR (b AND c)'))
但是,对于上面的文本,这是失败的

parsimonious.exceptions.ParseError: Rule 'variable' didn't match at '(b AND c)' (line 1, column 6).
为什么??我没有将
term
指定为
(term)
term


为什么它会选择
变量
的规则(这当然会失败)

expr
中的第一件事是一个
术语
,所以这就是解析器所寻找的

语法中的
术语是

( term )

输入是

a OR (b AND c)
这不是从
开始的(
因此它可以成为
术语的唯一方法是如果它匹配
变量操作符变量
a
变量
操作符
。因此接下来要匹配的是
变量


也许你想要的是:

expr = term (operator term)*
term = (lpar expr rpar) / variable

谢谢您的详细解释,非常感谢。
expr = term (operator term)*
term = (lpar expr rpar) / variable