blob: ccee2c431686df3dacb3a48f838b3c7e668f1d63 (
plain)
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
|
use crate::pagespec::{Expr, OpCode};
grammar;
pub Expr: Box<Expr> = {
Expr Op Term => Box::new(Expr::Op(<>)),
Term,
}
Term: Box<Expr> = {
Glob => Box::new(Expr::Glob(<>)),
"link" "(" <g:Glob> ")" => Box::new(Expr::LinksHereFunc(<>)),
"page" "(" <g:Glob> ")" => Box::new(Expr::PageFunc(<>)),
"!" <t:Term> => Box::new(Expr::Negate(t)),
"(" <e:Expr> ")" => e,
}
Glob: String = {
r"(\w|[._*?/-])+" => <>.to_string(),
}
Op: OpCode = {
"and" => OpCode::And,
"or" => OpCode::Or,
}
|