-
Notifications
You must be signed in to change notification settings - Fork 261
Expand file tree
/
Copy pathquery.grammar
More file actions
121 lines (96 loc) · 2.68 KB
/
query.grammar
File metadata and controls
121 lines (96 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
@external tokens negateToken from "./tokens" { negate }
@external tokens parenToken from "./tokens" { openParen }
@external tokens wordToken from "./tokens" { word }
@external tokens closeParenToken from "./tokens" { closeParen }
@external tokens orToken from "./tokens" { or }
@external propSource highlight from "./highlight"
@dialects { regex }
@top Program { query }
@precedence {
negate,
and,
or @left
}
query {
OrExpr |
AndExpr |
expr
}
OrExpr { andExpr (or andExpr)+ }
AndExpr { expr expr+ }
andExpr { AndExpr | expr }
expr {
NegateExpr |
ParenExpr |
PrefixExpr |
QuotedTerm |
Term
}
NegateExpr { !negate negate (PrefixExpr | ParenExpr) }
ParenExpr { openParen query? closeParen }
PrefixExpr {
ArchivedExpr |
RevisionExpr |
ContentExpr |
ContextExpr |
FileExpr |
ForkExpr |
VisibilityExpr |
RepoExpr |
LangExpr |
SymExpr |
RepoSetExpr
}
RevisionExpr { revisionFilterKw value }
ContentExpr { contentFilterKw value }
ContextExpr { contextFilterKw value }
FileExpr { fileFilterKw value }
RepoExpr { repoFilterKw value }
LangExpr { langFilterKw value }
SymExpr { symFilterKw value }
RepoSetExpr { reposetFilterKw value }
// Modifiers
ArchivedExpr { archivedFilterKw archivedValue }
ForkExpr { forkFilterKw forkValue }
VisibilityExpr { visibilityFilterKw visibilityValue }
revisionFilterKw[@name=FilterKeyword] { revisionKw }
contentFilterKw[@name=FilterKeyword] { contentKw }
contextFilterKw[@name=FilterKeyword] { contextKw }
fileFilterKw[@name=FilterKeyword] { fileKw }
repoFilterKw[@name=FilterKeyword] { repoKw }
langFilterKw[@name=FilterKeyword] { langKw }
symFilterKw[@name=FilterKeyword] { symKw }
reposetFilterKw[@name=FilterKeyword] { reposetKw }
archivedFilterKw[@name=FilterKeyword] { archivedKw }
forkFilterKw[@name=FilterKeyword] { forkKw }
visibilityFilterKw[@name=FilterKeyword] { visibilityKw }
archivedValue { "yes" | "no" | "only" }
forkValue { "yes" | "no" | "only" }
visibilityValue { "public" | "private" | "any" }
QuotedTerm { quotedString }
Term { word }
value { quotedString | word }
@skip { space }
@tokens {
archivedKw { "archived:" }
revisionKw { "rev:" }
contentKw { "content:" | "c:" }
contextKw { "context:" }
fileKw { "file:" | "f:" }
forkKw { "fork:" }
visibilityKw { "visibility:" }
repoKw { "repo:" | "r:" }
langKw { "lang:" }
symKw { "sym:" }
reposetKw { "reposet:" }
// 'or' is now handled by external orToken tokenizer
quotedString { '"' (!["\\\n] | "\\" _)* '"' }
// word is now handled by external wordToken tokenizer
space { $[ \t\n]+ }
@precedence {
quotedString,
archivedKw, revisionKw, contentKw, contextKw, fileKw,
forkKw, visibilityKw, repoKw, langKw,
symKw, reposetKw
}
}