私は、プロダクションが任意の順序で来ることを可能にする文法を作成しようとしています. 例えば:
<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# で処理するには多すぎます。
さまざまな可能性をすべて並べ替えることなく、「任意の順序」を達成する方法はありますか?