The complete grammar for expressing Boolean queries, in a BNF-like format, is included in this topic.

The following sample code expresses Boolean queries, in a BNF-like format:

orexpr:	  andexpr ;
				| andexpr OR orexpr ;
andexpr:	  parenexpr ;
				| parenexpr andexpr ;
				| parenexpr AND andexpr ;
				| parenexpr andnotexpr ;
andnotexpr:	  AND NOT orexpr ;
				| NOT orexpr ;
parenexpr:	  LPAREN orexpr RPAREN ;
				| terms ;
terms:	 word_or_phrase KEY_RESTRICT keyexpr ;
				| word_or_phrase NEAR/NUM word_or_phrase ;
				| word_or_phrase ONEAR/NUM word_or_phrase ;
				| multiple_word_or_phrase ;
multiple_word_or_phrase:	  word_or_phrase ;
				| word_or_phrase multiple_word_or_phrase ;
keyexpr:	 LPAREN nr_orexpr RPAREN ;
				| word_or_phrase ;
nr_orexpr:	  nr_andexpr ;
				| nr_andexpr OR nr_orexpr ;
nr_andexpr:	  nr_parenexpr ;
				| nr_parenexpr nr_andexpr ;
				| nr_parenexpr AND nr_andexpr ;
				| nr_parenexpr nr_andnotexpr ;
nr_andnotexpr:	  AND NOT nr_orexpr ;
				| NOT nr_orexpr ;
nr_notexpr:	  nr_parenexpr ;
				| NOT nr_parenexpr ;
nr_parenexpr:	  LPAREN nr_orexpr RPAREN ;
				| nr_terms ;
nr_terms:	 multiple_word_or_phrase ;
word_or_phrase:	  word ;
				| phrase ;

AND:					'[Aa]' '[Nn]' '[Dd]' ;
OR:				'[Oo]' '[Rr]' ;
NOT:				'[Nn]' '[Oo]' '[Tt]' ;
NEAR:				'[Nn]' '[Ee]' '[Aa]' '[Rr]' ;
ONEAR:			'[Oo]' '[Nn]' '[Ee]' '[Aa]' '[Rr]' ;

NUM:				'[0-9] ;
				| NUM NUM ;
LPAREN:			'(' ;
RPAREN:			')' ;
KEY_RESTRICT:	':' ;


Copyright © Legal Notices