2010-12-11 5 views
3

Это вопрос домашней работы. Я хотел бы написать простой синтаксический анализатор для параметров командной строки Unix.
Во-первых, я хотел бы определить грамматику с BNF.Грамматика для параметров командной строки Unix

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)

+0

вы должны пометить его в качестве домашнего задания. – sje397

+0

Добавлена ​​домашняя бирка. – 2010-12-11 13:26:40

+0

@khachik: он не исключает его, он исключает его только в первом случае. Хотя это может показаться и в первом случае. –

ответ

1

Просто обратите внимание, что данная грамматика довольно неоднозначна - например, если у вас есть несколько слова в строке, вы не знаете, являются ли это разными параметрами или опцией с некоторыми аргументами.

Что касается Вашего второго вопроса (в отношении «старых» Unix), вы можете добавить еще одно правило грамматики, то в этом роде:

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