Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有讽刺意味的BnfExpression,它生成可以是任意顺序的不同非端子_C#_Parsing_Grammar_Irony - Fatal编程技术网

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;