Вы можете попробовать что-то вроде:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (file-arguments) | '--check' (file-arguments)
(file-arguments) : (file) (file-arguments)
Предполагая, что вы хотите указать точно одну --check
для каждой команды, но не зависеть от того, является ли она первым аргументом, вы можете использовать:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (file-arguments) | (file-arguments) '--check' (file-arguments)
(file-arguments) : (file) (file-arguments)
Также обратите внимание, что символ канала (|
) является просто ярлыком для дополнительного правила. Следующее эквивалентно:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (file-arguments)
(arguments-list) : (file-arguments) '--check' (file-arguments)
(file-arguments) : (file) (file-arguments)
Я был бы удивлен, если бы вы не могли указать большинство команд unix с контекстно-свободной грамматикой, подобной выраженной в BNF.