I'd like to write down a BNF-like formal grammar for describing the command line usage of some GNU/Linux tools. For example I can describe the usage of the cat
command as:
(cat-command) : 'cat' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
The problem is I can't write down a precise grammar for some commands such as md5sum
. My first attempt at that would be the following:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
(argument) : '--check'
But as you can see this grammar allows you to specify the --check
argument as many times as you wish, which is incorrect as you should use it at most one time.
How can I fix that? Also, what kind of formal grammars I should study for better treating this kind of problems?
Thanks.