C# 具有讽刺意味的BnfExpression,它生成可以是任意顺序的不同非端子
我正在尝试创建一种语法,允许产品以任何顺序出现。例如:C# 具有讽刺意味的BnfExpression,它生成可以是任意顺序的不同非端子,c#,parsing,grammar,irony,C#,Parsing,Grammar,Irony,我正在尝试创建一种语法,允许产品以任何顺序出现。例如: <NewObject> Name Type Value </NewObject> 然而,当我尝试用6个不同的非终端排列产品时,这种方法就成了一个问题。6阶乘是720,这对于c#来说太多了,因为它会提示编译器错误(表达式太长或太复杂,无法编译) 有没有一种方法可以实现“任意顺序”,而不必排列所有不同的可能性。基本上没有。你最好的选择是接受非终端的任意重复,然后检查相关语义
<NewObject>
Name
Type
Value
</NewObject>
然而,当我尝试用6个不同的非终端排列产品时,这种方法就成了一个问题。6阶乘是720,这对于c#来说太多了,因为它会提示编译器错误(表达式太长或太复杂,无法编译)
有没有一种方法可以实现“任意顺序”,而不必排列所有不同的可能性。基本上没有。你最好的选择是接受非终端的任意重复,然后检查相关语义动作中的重复 (在SO中已经有几种这种形式的答案,但它们似乎从未被投票或接受,这意味着SO不会接受它们作为副本。)
<NewObject>
Value
Name
Type
</NewObject>
A.Rule = B + C + D |
B + D + C |
C + B + D |
C + D + B |
D + B + C |
D + C + B;