6

これは宿題の質問です。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)

4

1 に答える 1

3

与えられた文法が非常にあいまいであることに注意してください。たとえば、いくつかの単語が連続している場合、これらが異なるオプションなのか、いくつかの引数を持つオプションなのかわかりません。

2番目の質問(「古い」UNIXに関する)については、次のような別のルールを文法に追加できます。

option -> optionGroup | (anything that was there before);
optionGroup -> '-', flags;
flags -> flag | flag, flags;
flag -> single letter;
于 2012-04-12T08:17:09.663 に答える