Unix命令行选项的语法

时间:2010-12-11 13:22:43

标签: parsing grammar bnf

这是一个家庭作业问题。我想为Unix命令行选项编写一个简单的解析器 首先,我想用BNF定义一个语法。

Options = Option | Options, space, Option;
Option = OptionName | OptionName, OptionArguments; 
OptionName = '--', any character excluding '-' | OptionName, any character;
OptionArguments = OptionArgument | OptionArguments, space, OptionArgument;
OptionArgument = any character excluding '-' | OptionArgument, any character;

(这里的“任何字符”是任何字母数字字符)。

有意义吗?接下来的问题是如何添加“旧的”Unix选项,这些选项以单个连字符开头,可以组合在一起(例如ls -lht

1 个答案:

答案 0 :(得分:2)

请注意,给定的语法非常模糊 - 例如,如果你连续几个单词,你就不会知道这些是不同的选项还是带有一些参数的选项。

关于你的第二个问题(关于“旧的”unix),你可以在语法中添加另一个规则,类似的东西:

option -> optionGroup | (anything that was there before);
optionGroup -> '-', flags;
flags -> flag | flag, flags;
flag -> single letter;