我想写一个类似BNF的正式语法来描述一些GNU/Linux工具的命令行用法.例如,我可以将cat
命令的用法描述为:
(cat-command) : 'cat' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
Run Code Online (Sandbox Code Playgroud)
问题是我无法为某些命令写下精确的语法,例如md5sum
.我的第一次尝试是:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
(argument) : '--check'
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,这个语法允许您--check
根据需要多次指定参数,这是不正确的,因为您最多应该使用它一次.
我该如何解决这个问题?另外,为了更好地处理这类问题,我应该研究什么样的正式语法?
我正在研究英特尔的IA-32软件开发人员手册.特别是,我正在阅读以下手册:http://www.intel.com/Assets/PDF/manual/253666.pdf.我们以ADD指令为例.在第79页上写入,您可以将r8(8位寄存器)添加到r/m8(8位寄存器或存储单元).在下面的几行中,还写入了可以将r/m8添加到r8.问题是:如果我添加两个8位寄存器,我正在使用哪条指令?谢谢.