1 # Grammar rules for tag searching; BNF.
3 # The grammar defines expressions in the following forms:
4 # TAG - search blog posts that contain the tag;
5 # !TAG - search blog posts that don't contain the tag;
6 # TAG & TAG - search blog posts that contain both tags;
7 # TAG | TAG - search blog posts that contain any of the tags;
8 # Parentheses are allowed to group expressions; for example:
11 # Allowed operators: conjunction - & && AND and
12 # disjunction - | || OR or
14 # This is a simple version of the grammar and it allows
15 # rather stupid expressions, like !!TAG or ((TAG)); in the future
16 # it will be fixed by making the grammar more complex and stricter.
18 NAME : '[a-z][a-z0-9_]+'
29 | expression SP0 AND_OP AND_OP SP0 expression
30 | expression SP0 AND_OP SP0 expression
31 | l_expression and_word r_expression
32 | NOT_OP SP0 expression
33 | expression SP0 OR_OP OR_OP SP0 expression
34 | expression SP0 OR_OP SP0 expression
35 | l_expression or_word r_expression
38 l_expression : expression_parens
41 r_expression : expression_parens
44 expression_parens : '(' SP0 expression SP0 ')'
46 sp_expression : SP1 expression
48 expression_sp : expression SP1
50 and_word : 'A' 'N' 'D'