これにはいくつかの方法があります。最も単純なオプションの 1 つは、次のパーサー規則を使用することです。
interfaceCommands
: (descriptionCmd | ipAddressCmd | otherCmd)*
;
解析が完了した後、リスナーまたはビジターで追加の検証を実行できます (たとえば、1 つだけdescriptionCmd
が解析されたことを確認するか、これらの各項目の 1 つだけが解析されたことを確認するなど)。この戦略には多くの利点があります。特に、より多くの種類の構文エラーを明確なメッセージで検出および報告する能力が向上します。
もう 1 つのオプションは、ユーザーがこれらの項目を入力できる方法を単純に列挙することです。これは書き込み/読み取り/検証/保守が難しいため、より一般的なパーサー ルールを使用して後で検証を実行する方法が他にない場合にのみ、このオプションを使用します。
interfaceCommands
: descriptionCmd ipAddressCmd otherCmd
| descriptionCmd otherCmd ipAddressCmd
| ipAddressCmd descriptionCmd otherCmd
| ipAddressCmd otherCmd descriptionCmd
| otherCmd descriptionCmd ipAddressCmd
| otherCmd ipAddressCmd descriptionCmd
;