first samples for a potential command-type description language
This commit is contained in:
parent
1ab8db590b
commit
73817529d6
6 changed files with 215 additions and 0 deletions
65
typeDB/cut
Normal file
65
typeDB/cut
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
::cut OPTION... [FILE]... {
|
||||||
|
|
||||||
|
match OPTION... {
|
||||||
|
--help { <1 : Help~<Seq Char> ; }
|
||||||
|
--version { <1 : VersionInfo~<Seq Char> ; }
|
||||||
|
|
||||||
|
* {
|
||||||
|
match OPTION... {
|
||||||
|
-f--fields LIST:<Seq ℕ>~CutFieldList~<Seq Char> {
|
||||||
|
|
||||||
|
ROW-DELIM =
|
||||||
|
match OPTION... {
|
||||||
|
-z--zero-terminated { '\0' }
|
||||||
|
* { '\n' }
|
||||||
|
};
|
||||||
|
|
||||||
|
IN-COL-DELIM =
|
||||||
|
match OPTION... {
|
||||||
|
-d--delimiter DELIM:Char { DELIM }
|
||||||
|
* { '\t' }
|
||||||
|
};
|
||||||
|
|
||||||
|
OUT-COL-DELIM =
|
||||||
|
match OPTION... {
|
||||||
|
--output-delimiter STRING:<Seq Char> { STRING }
|
||||||
|
* { IN-COL-DELIM }
|
||||||
|
};
|
||||||
|
|
||||||
|
FILE : Path
|
||||||
|
~<Seq PathSegment
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char '/'>
|
||||||
|
~<Seq Char> ;
|
||||||
|
|
||||||
|
@FILE : <Seq <* < ITEM~<Seq Char> >... >
|
||||||
|
~<Seq <Seq Char>>
|
||||||
|
~<SepSeq Char IN-COL-DELIM>
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char ROW-DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
|
||||||
|
>0 : <Seq <* <ITEM~<Seq Char>>... >
|
||||||
|
~<Seq <Seq Char>>
|
||||||
|
~<SepSeq Char IN-COL-DELIM>
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char ROW-DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
|
||||||
|
# `[LIST]` means `select all fields contained in LIST from parameter pack`
|
||||||
|
<1 : <Seq <* <ITEM~<Seq Char>>[LIST]... >
|
||||||
|
~<Seq <Seq Char>>
|
||||||
|
~<SepSeq Char OUT-COL-DELIM>
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char ROW-DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
<1 : Nothing ;
|
||||||
|
<2 : MissingFields~ErrorMessage~<Seq Char> ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
15
typeDB/date
Normal file
15
typeDB/date
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
::date [OPTION]... [+FORMAT] {
|
||||||
|
match FORMAT {
|
||||||
|
"+%s" {
|
||||||
|
<1 : TimePoint
|
||||||
|
~<TimeSince UnixEpoch>
|
||||||
|
~<Duration Seconds>
|
||||||
|
~ℕ
|
||||||
|
~<PosInt 10 BigEndian>
|
||||||
|
~<Seq <Digit 10>~Char>
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
<1 : TimePoint ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
56
typeDB/dirname
Normal file
56
typeDB/dirname
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
::dirname [OPTION] NAME... {
|
||||||
|
|
||||||
|
# dont expect any data on stdin
|
||||||
|
#
|
||||||
|
|
||||||
|
>0 : None ;
|
||||||
|
|
||||||
|
|
||||||
|
# each (non-option) argument must be a path
|
||||||
|
#
|
||||||
|
|
||||||
|
NAME : Path
|
||||||
|
~<Seq PathSegment
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char '/'>
|
||||||
|
~<Seq Char>
|
||||||
|
~UTF-8
|
||||||
|
~<Seq Byte> ;
|
||||||
|
|
||||||
|
|
||||||
|
matchopt OPTION {
|
||||||
|
|
||||||
|
# help and version flags will bypass any data processing
|
||||||
|
#
|
||||||
|
|
||||||
|
--help { <1 : Help~<Seq Char> ; }
|
||||||
|
--version { <1 : VersionInfo~<Seq Char> ; }
|
||||||
|
|
||||||
|
|
||||||
|
# in case neither --help nor --version is set
|
||||||
|
# ...
|
||||||
|
|
||||||
|
* {
|
||||||
|
|
||||||
|
# if zero-flag is set, use '\0' instead of '\n'
|
||||||
|
# as delimiter in output sequence
|
||||||
|
|
||||||
|
DELIM =
|
||||||
|
match OPTION {
|
||||||
|
-z--zero { '\0' }
|
||||||
|
* { '\n' }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# output a sequence of paths to stdout
|
||||||
|
#
|
||||||
|
|
||||||
|
<1 : <Seq Path
|
||||||
|
~<Seq PathSegment~<Seq Char>>
|
||||||
|
~<SepSeq Char '/'>
|
||||||
|
~<Seq Char>>
|
||||||
|
~<SepSeq Char DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
16
typeDB/echo
Normal file
16
typeDB/echo
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
::echo [OPTIONS]... [STRING]... {
|
||||||
|
>0 : None ;
|
||||||
|
|
||||||
|
matchopt OPTION {
|
||||||
|
--help { <1 : Help~<Seq Char> ; }
|
||||||
|
--version { <1 : VersionInfo~<Seq Char> ; }
|
||||||
|
-n {
|
||||||
|
<1 : <* STRING~<Seq Char>... >
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
<1 : <* STRING~<Seq Char>... '\n' >
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
typeDB/seq
Normal file
25
typeDB/seq
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
::seq [OPTION]... [FIRST [INCREMENT]] LAST {
|
||||||
|
>0 : None ;
|
||||||
|
|
||||||
|
match OPTION... {
|
||||||
|
--help { <1 : Help~<Seq Char> ; }
|
||||||
|
--version { <1 : VersionInfo~<Seq Char> ; }
|
||||||
|
* {
|
||||||
|
NUM = match OPTION... {
|
||||||
|
-f--format FORMAT { ℝ~<Float 10 FORMAT>~<Seq Char> }
|
||||||
|
* { ℤ~<PosInt 10 BigEndian>~<Seq <Digit 10>~Char> }
|
||||||
|
};
|
||||||
|
|
||||||
|
SEP = match OPTION... {
|
||||||
|
-s--separator SEP { SEP }
|
||||||
|
* { '\n' }
|
||||||
|
};
|
||||||
|
|
||||||
|
$FIRST : NUM ;
|
||||||
|
$INCREMENT : NUM ;
|
||||||
|
$LAST : NUM ;
|
||||||
|
|
||||||
|
<1 : <Seq NUM~<Seq Char>>~<SepSeq Char SEP>~<Seq Char> ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
38
typeDB/xargs
Normal file
38
typeDB/xargs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
::xargs [OPTION]... [CMD [INITIAL-ARGS]...] {
|
||||||
|
|
||||||
|
DELIM =
|
||||||
|
match OPTION... {
|
||||||
|
-0--null { '\0' }
|
||||||
|
-d--delimiter D:Char { D }
|
||||||
|
};
|
||||||
|
|
||||||
|
match OPTION... {
|
||||||
|
-a--argfile PATH => {
|
||||||
|
# type of data read from file at `path`
|
||||||
|
|
||||||
|
@PATH : ARGS~<Seq Char>...
|
||||||
|
~<Seq <Seq Char>>
|
||||||
|
~<SepSeq Char DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
# type of data read from stdin
|
||||||
|
|
||||||
|
>0 : ARGS~<Seq Char>...
|
||||||
|
~<Seq <Seq Char>>
|
||||||
|
~<SepSeq Char DELIM>
|
||||||
|
~<Seq Char> ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
match OPTION... {
|
||||||
|
-I REPLACE-STR {
|
||||||
|
# TODO : how to handle replacement ?
|
||||||
|
<1 : cmdtype <1 { CMD { INITIAL-ARGS where REPLACE-STR -> ARGS... } } ;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
<1 : cmdtype <1 { CMD INITIAL-ARGS... ARGS... } ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue