Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing Unix命令行选项的语法_Parsing_Grammar_Bnf - Fatal编程技术网

Parsing Unix命令行选项的语法

Parsing Unix命令行选项的语法,parsing,grammar,bnf,Parsing,Grammar,Bnf,这是一个家庭作业问题。我想为Unix命令行选项编写一个简单的解析器。 首先,我想用BNF定义语法 Options = Option | Options, space, Option; Option = OptionName | OptionName, OptionArguments; OptionName = '--', any character excluding '-' | OptionName, any character; OptionArguments = OptionArgume

这是一个家庭作业问题。我想为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

请注意,给定的语法非常模糊-例如,如果一行中有几个单词,您将不知道这些是不同的选项还是带有一些参数的选项

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

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

你应该把它标记为家庭作业。@khachik:他并没有排除它,他只是在第一次出现时排除了它。虽然它确实可能在第一次出现时出现。