[GNU/Linux] Comandi BNF
ciao,
sto cercando di creare una sorta di documentazione per quanto riguarda la sintassi dei principali comandi di linux.
l'unico strumento matematico/informatico che conosco è il linguaggio BNF, con il quale però non riesco ad esprimere pienamente tutte le possibili alternative nelle quali è possibile scrivere correttamente un comando linux.
prendiamo ad esempio in considerazione il comando tar. con la BNF potrei scrivere:
c'è un problema però con questa rappresentazione, e consiste nel fatto che i vari argomenti che seguono il primo ("tar") possono essere specificati in qualsiasi ordine, e non necessariamente nell'ordine indicato.
potrei allora pensare di passare alla seguente scrittura:
questa scrittura risolve il precedente problema ma allo stesso tempo ne introduce un altro, e cioè il fatto che non sia possibile specificare il numero di volte nel quale ciascun argomento deve comparire nel comando (ad esempio "--create" deve comparire una volta sola, mentre deve comparire una o più volte).
avete qualche idea?
grazie.
sto cercando di creare una sorta di documentazione per quanto riguarda la sintassi dei principali comandi di linux.
l'unico strumento matematico/informatico che conosco è il linguaggio BNF, con il quale però non riesco ad esprimere pienamente tutte le possibili alternative nelle quali è possibile scrivere correttamente un comando linux.
prendiamo ad esempio in considerazione il comando tar. con la BNF potrei scrivere:
<tar command> ::= "tar" <blanks> "--create" <blanks> "--file=" <archive> <blanks> <file> { <blanks> <file> }
c'è un problema però con questa rappresentazione, e consiste nel fatto che i vari argomenti che seguono il primo ("tar") possono essere specificati in qualsiasi ordine, e non necessariamente nell'ordine indicato.
potrei allora pensare di passare alla seguente scrittura:
<tar command> ::= "tar" { <blanks> <argument> } <argument> ::= ( "--create" ) | ( "--file=" <archive> ) | ( <file> )
questa scrittura risolve il precedente problema ma allo stesso tempo ne introduce un altro, e cioè il fatto che non sia possibile specificare il numero di volte nel quale ciascun argomento deve comparire nel comando (ad esempio "--create" deve comparire una volta sola, mentre
avete qualche idea?
grazie.
Risposte
per astrarre dal comando linux specifico usato nel post precedente, propongo un esempio un po' piu' generale.
supponiamo che io voglia ottenere il seguente insieme di stringhe ${abc, acb, bac, bca, cab, cba}$, e cioè l'insieme delle stringhe di lunghezza $3$ formate dai caratteri $a$, $b$ e $c$ in cui ciascun carattere compaia una ed una sola volta. ovviamente potrei scrivere:
ma il mio obiettivo è quello di trovare un modo per scrivere la stessa cosa in modo più conciso.
la seguente regola:
permette di ottenere l'insieme generico delle stringhe di lunghezza $3$ formate dai caratteri $a$, $b$ e $c$, ma come è possibile notare non si riesce ad ottenere il sottoinsieme di stringhe in cui ciascun carattere compare una ed una sola volta.
come posso aggiungere questa ulteriore condizione?
supponiamo che io voglia ottenere il seguente insieme di stringhe ${abc, acb, bac, bca, cab, cba}$, e cioè l'insieme delle stringhe di lunghezza $3$ formate dai caratteri $a$, $b$ e $c$ in cui ciascun carattere compaia una ed una sola volta. ovviamente potrei scrivere:
<set> ::= abc | acb | bac | bca | cab | cba
ma il mio obiettivo è quello di trovare un modo per scrivere la stessa cosa in modo più conciso.
la seguente regola:
<set> ::= <letter> <letter> <letter> <letter> ::= a | b | c
permette di ottenere l'insieme generico delle stringhe di lunghezza $3$ formate dai caratteri $a$, $b$ e $c$, ma come è possibile notare non si riesce ad ottenere il sottoinsieme di stringhe in cui ciascun carattere compare una ed una sola volta.
come posso aggiungere questa ulteriore condizione?