| 1 | # Grammar for find
|
| 2 |
|
| 3 | # TODO: Could we encode numeric arguments into the grammar?
|
| 4 | # find apparently supports n +n -n.
|
| 5 | # #
|
| 6 | # Separately parsed:
|
| 7 | # - printf format string
|
| 8 | # - perm mode string
|
| 9 | # - regex and glob (passed through to libc, most likely)
|
| 10 |
|
| 11 | start: concatenation ENDMARKER
|
| 12 |
|
| 13 | concatenation: disjunction (',' disjunction)*
|
| 14 |
|
| 15 | disjunction: conjunction ('-o' conjunction)*
|
| 16 |
|
| 17 | # implicit and is allowed
|
| 18 | conjunction: negation (['-a'] negation)*
|
| 19 |
|
| 20 | negation: ['!'] group
|
| 21 |
|
| 22 | group: '(' concatenation ')' | expr
|
| 23 |
|
| 24 | expr: (
|
| 25 | # atoms
|
| 26 | '-true'
|
| 27 | | '-false'
|
| 28 |
|
| 29 | # paths
|
| 30 | | '-name' STRING
|
| 31 | | '-iname' STRING
|
| 32 |
|
| 33 | | '-lname' STRING
|
| 34 | | '-ilname' STRING
|
| 35 |
|
| 36 | | '-path' STRING
|
| 37 | | '-ipath' STRING
|
| 38 |
|
| 39 | | '-regex' STRING
|
| 40 | | '-iregex' STRING
|
| 41 |
|
| 42 | | '-readable'
|
| 43 | | '-writable'
|
| 44 | | '-executable'
|
| 45 |
|
| 46 | # stat
|
| 47 | | '-empty'
|
| 48 |
|
| 49 | | '-size' STRING
|
| 50 | | '-type' STRING
|
| 51 | | '-xtype' STRING
|
| 52 | | '-perm' STRING
|
| 53 |
|
| 54 | | '-group' STRING
|
| 55 | | '-user' STRING
|
| 56 | | '-gid' STRING
|
| 57 | | '-uid' STRING
|
| 58 | | '-nogroup'
|
| 59 | | '-nouser'
|
| 60 |
|
| 61 | # for time (TODO)
|
| 62 | | '-amin' STRING
|
| 63 | | '-anewer' STRING
|
| 64 | | '-atime' STRING
|
| 65 |
|
| 66 | | '-cmin' STRING
|
| 67 | | '-cnewer' STRING
|
| 68 | | '-ctime' STRING
|
| 69 |
|
| 70 | | '-mmin' STRING
|
| 71 | | '-newer' STRING # note -newer not -mnewer
|
| 72 | | '-mtime' STRING
|
| 73 | | '-newerXY' STRING
|
| 74 |
|
| 75 | # actions
|
| 76 | | '-delete'
|
| 77 | | '-prune'
|
| 78 | | '-quit'
|
| 79 |
|
| 80 | | '-print'
|
| 81 | | '-print0'
|
| 82 | | '-printf' STRING
|
| 83 | | '-ls'
|
| 84 |
|
| 85 | | '-fprint' STRING
|
| 86 | | '-fprint0' STRING
|
| 87 | | '-fprintf' STRING STRING
|
| 88 | | '-fls' STRING
|
| 89 |
|
| 90 | # TODO: can the command be empty?
|
| 91 | # parse {}? That is replaced with the current filename.
|
| 92 | | '-exec' STRING* terminator
|
| 93 | | '-execdir' STRING* terminator
|
| 94 | | '-ok' STRING* terminator
|
| 95 | | '-okdir' STRING* terminator
|
| 96 | )
|
| 97 |
|
| 98 | terminator: ';' | '+'
|