我正在尝试创建一种允许产品以任何顺序出现的语法。例如:
<NewObject>
Name
Type
Value
</NewObject>
和
<NewObject>
Value
Name
Type
</NewObject>
两者都应该被接受。
到目前为止,我已经能够像这样使用每个产品的排列来摆脱困境:
以下代码是使用讽刺的 BnfExpresion 编写的,其中 + 表示连接
A.Rule = B + C + D |
B + D + C |
C + B + D |
C + D + B |
D + B + C |
D + C + B;
然而,当我尝试用 6 个不同的非终端置换一个产品时,这种方法成为一个问题。6阶乘是720,对于c#来说太多了,因为它会提示编译器错误(表达式太长或编译太复杂)。
有没有办法我可以实现“任何顺序”而不必排列所有不同的可能性。