Ich möchte eine BNF-ähnliche formale Grammatik aufschreiben, um die Befehlszeilennutzung einiger GNU/Linux-Tools zu beschreiben. Zum Beispiel kann ich die Verwendung des cat
Befehl als beschreiben:Wie formalisiert man die Befehlszeilennutzung von GNU/Linux-Befehlen?
(cat-command) : 'cat' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
Das Problem ist, ich keine genaue Grammatik für einige Befehle wie md5sum
aufschreiben kann. Mein erster Versuch, das wäre der folgende:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
(argument) : '--check'
Aber wie Sie diese Grammatik sehen können Sie das --check
Argument so oft angeben, wie Sie wollen, was falsch ist, wie Sie es höchstens einmal verwendet werden soll .
Wie kann ich das beheben? Welche Art von formalen Grammatiken sollte ich studieren, um diese Art von Problemen besser behandeln zu können?
Sind Sie sicher, dass Ihre Grammatik falsch ist? Viele der Unix-Befehle akzeptieren für mich durchaus mehrere Vorkommen desselben Arguments, zB 'ls -l -l -l'. –
Ja, du hast Recht. Aber vielleicht gibt es einige Werkzeuge, die keine Wiederholungen zulassen. Ich kann auch mein eigenes Programm schreiben, das keine Wiederholungen erlaubt. Also ich denke mein Problem ist immer noch relevant. –