summaryrefslogtreecommitdiff
path: root/src/pagespec.lalrpop
blob: e1dd433013e73aca276cb5cddeea1e51928f5df3 (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
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(<>)),
    "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,
}