gpt4 book ai didi

python - 简约的 ParseError

转载 作者:太空宇宙 更新时间:2023-11-04 02:05:09 29 4
gpt4 key购买 nike

深入研究语法和特别是 PEG,我想要一个具有以下语法的 DSL:

a OR (b AND c)

我正在使用 parsimonious 这里有以下语法:

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 吗?
为什么它选择 variable 的规则(当然失败了)?

最佳答案

expr 中的第一件事是 term,所以这就是解析器要查找的内容。

语法中的术语

( term )

variable operator variable

输入是

a OR (b AND c)

它不以 ( 开头,所以它可以成为 term 的唯一方法是它是否匹配 variable operator variablea 是一个变量OR 是一个运算符。所以接下来要匹配的是变量.


也许你想要的是:

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

关于python - 简约的 ParseError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54893073/

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