2010-12-11 4 views
3

Ceci est une question de devoirs. Je voudrais écrire un analyseur simple pour les options de ligne de commande Unix.
D'abord, je voudrais définir une grammaire avec BNF.Grammaire pour les options de ligne de commande 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; 

("n'importe quel caractère" est n'importe quel caractère alphanumérique).

Est-ce logique? La question suivante est de savoir comment ajouter des "vieilles" options Unix, qui commencent par un seul trait d'union et peuvent être regroupées (par exemple ls -lht)

+0

Vous devez marquer comme devoirs. – sje397

+0

Étiquette de devoirs ajoutée. –

+0

@khachik: il ne l'exclut pas, il ne l'exclut que dans la première occurrence. Bien qu'il puisse apparaître dans la première occurrence en effet. –

Répondre

1

Notez simplement que la grammaire donnée est assez ambiguë - par exemple, si vous en avez quelques-uns mots dans une rangée, vous ne sauriez pas si ce sont des options différentes ou une option avec quelques arguments.

Quant à votre deuxième question (concernant « vieux » unix), vous pouvez ajouter une autre règle à la grammaire, quelque chose du genre:

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