]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - parser/grammar
5a0c3d53a1a9c8d5f5d270804ed7f3150e0637bc
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / grammar
1 # Grammar rules for tag searching; BNF.
2
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:
9 #  TAG & (TAG | TAG)
10 #  !(TAG | TAG)
11 # Allowed operators: conjunction - & &&
12 #                    disjunction - | ||
13 #                    negation    - !
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.
17
18 NAME : '[a-z][a-z0-9_]+'
19
20 AND_OP : '&'
21
22 OR_OP : '|'
23
24 NOT_OP : '!'
25
26 SP1 : '[ \t]+'
27
28 expression : NAME
29            | expression AND_OP AND_OP expression
30            | expression AND_OP expression
31            | expression OR_OP OR_OP expression
32            | expression OR_OP expression
33            | NOT_OP expression
34            | '(' expression ')'