如何定义 foo 的最小值 1 和 bar 的最大值 1 的语法

问题描述 投票:0回答:1

在简约中,我试图定义一种语法,其中必须以任何顺序出现一次 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"""))  
python parsimonious
1个回答
0
投票

你的语法不正确。

您正在寻找

text = ws* "section" ws* foo*  bar foo* ws*  
© www.soinside.com 2019 - 2024. All rights reserved.