在解析表达语法(PEG)中,是否有一种(简单的)方式来表达“无序序列”?诸如
Rule <- A B C
Run Code Online (Sandbox Code Playgroud)
要求A,B和C顺序匹配。诸如
Rule <- (A B C) / (B C A) / (C A B) / (A C B) / (C B A) / (B A C)
Run Code Online (Sandbox Code Playgroud)
允许他们以任何顺序进行匹配(这是我们想要的),但是它麻烦且在实践中不适用于序列中更多的术语。
是使用语法上宽松的规则(例如,
Rule <- (A / B / C){3}
Run Code Online (Sandbox Code Playgroud)
并在语义上检查每个规则仅匹配一次?
例如,Relax NG Compact Syntax具有一个“无序列表”运算符来解析XML的事实使我暗示没有明显的解决方案。
最后一个问题:您认为添加这种运算符是否会给PEG带来歧义?