Я пытаюсь создать грамматику, которая позволяет производить постановку в любом порядке.Например:
<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 #, поскольку он выдает ошибку компилятора (выражение слишком длинное или сложное для компиляции).
Есть ли способ, которым я могу достичь «любого порядка» без необходимости перестановкивсе разные возможности.