我正在尝试创建一种语法,以使产生的内容可以按任何顺序排列。例如:
<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#来说,它提示编译器错误(表达式太长或太复杂,无法编译),因此c#无法处理太多的事情。
有没有办法我可以实现“任何顺序”而不必置换所有不同的可能性。
答案 0 :(得分:0)
基本上没有。最好的选择是接受非终结符的任意重复,然后检查相关语义动作中是否存在重复。
(SO中已经有这种形式的几个答案,但是它们似乎从未被否决或接受,这意味着SO不会接受它们作为重复项。)