在简约中,我试图定义一种语法,其中必须以任何顺序出现一次 foo 和零到 1 次 bar 出现。 我如何才能简洁地抛出错误?
from parsimonious.grammar import Grammar
g = Grammar(r"""
text = ws* "section" ws* (foo / bar)+ ws*
foo = ws* "foo" ws*
bar = ws* "bar" ws*
ws = ~"\s*"
""")
print(g.parse("""section foo"""))
print(g.parse("""section foo bar bar""")) # How to throw error as more than one bar
print(g.parse("""section bar""")) # How to throw error as foo is required
print(g.parse("""section bar foo"""))
print(g.parse("""section foo bar"""))
你的语法不正确。
您正在寻找
text = ws* "section" ws* foo* bar foo* ws*