【发布时间】:2011-07-17 11:22:05
【问题描述】:
在parsing expression grammar (PEG) 中是否有(简单)方法来表达“无序序列”?
之类的规则Rule <- A B C
要求 A、B 和 C 按顺序匹配。诸如
之类的规则Rule <- (A B C) / (B C A) / (C A B) / (A C B) / (C B A) / (B A C)
允许它们以任何顺序匹配(这是我们想要的),但是在序列中有更多术语的情况下,它在实践中很麻烦且不适用。
是使用语法较宽松的规则的唯一解决方案,例如
Rule <- (A / B / C){3}
并在语义上检查每个规则是否只匹配一次?
事实上,例如,Relax NG Compact Syntax 有一个 "unordered list" operator 来解析 XML,这让我暗示没有明显的解决方案。
最后一个问题:您认为添加这样的运算符会给 PEG 带来歧义吗?
【问题讨论】: