Me gustaría escribir una gramática formal similar a BNF para describir el uso de la línea de comandos de algunas herramientas de GNU/Linux. Por ejemplo, yo puedo describir el uso del comando cat
como:¿Cómo formalizar correctamente el uso de la línea de comandos de los comandos de GNU/Linux?
(cat-command) : 'cat' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
El problema es que no puedo escribir una gramática precisa para algunos comandos como md5sum
. Mi primer intento en ese sería el siguiente:
(md5sum-command) : 'md5sum' (arguments-list)
(arguments-list) : (argument)
(arguments-list) : (arguments-list) (argument)
(argument) : (file)
(argument) : '--check'
Pero como se puede ver esta gramática permite especificar el argumento --check
tantas veces como desee, lo cual es incorrecto, ya que se debe utilizar como máximo una hora .
¿Cómo puedo solucionar eso? Además, ¿qué tipo de gramáticas formales debería estudiar para tratar mejor este tipo de problemas?
¿Estás seguro de que tu gramática es incorrecta? Para mí, muchos de los comandos de Unix aceptan muy felizmente múltiples ocurrencias del mismo argumento, por ejemplo, 'ls -l -l -l'. –
Sí, tienes razón. Pero tal vez hay algunas herramientas que no permiten las repeticiones. También puedo escribir mi propio programa que no permite repeticiones. Entonces creo que mi problema aún es relevante. –