我如何编写一个语法来表达一组可以以任意顺序出现零次或一次的项目?
例如A B C
有效、A C
有效、C B A
有效、A A B
无效、A B A
无效。
此规则强制每个元素为零个或一个,但也强制设置顺序:
rule_1: A? B? C?
这允许任何顺序,但也允许每个顺序多个:
rule_2: (A | B | C)*
这是使用 Python 的 Lark 解析器 - 我不确定这个问题是否应该被标记[lark-parser]
?
我如何编写一个语法来表达一组可以以任意顺序出现零次或一次的项目?
例如A B C
有效、A C
有效、C B A
有效、A A B
无效、A B A
无效。
此规则强制每个元素为零个或一个,但也强制设置顺序:
rule_1: A? B? C?
这允许任何顺序,但也允许每个顺序多个:
rule_2: (A | B | C)*
这是使用 Python 的 Lark 解析器 - 我不确定这个问题是否应该被标记[lark-parser]
?
(E)BNF 处理上下文无关语言,而上下文无关语言无法直接表达这种约束。您必须像这种左分解形式一样明确地执行此操作(其他形式也是可能的,但意义并不更好)
随着事物数量的增加,它很快就会变得难以管理。