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: ';' | '+'
|