]> git.phdru.name Git - phdru.name/cgi-bin/blog-ru/search-tags.git/blob - parser/parser.py
Version 0.6: Use parsley instead of parsimonious
[phdru.name/cgi-bin/blog-ru/search-tags.git] / parser / parser.py
1 #! /usr/bin/env python
2
3 import os
4 from parsley import makeGrammar
5
6
7 # cache
8 _grammar = None
9
10
11 def load_grammar():
12     global _grammar
13     parser_dir = os.path.dirname(__file__)
14     with open(os.path.join(parser_dir, 'grammar.ebnf'), 'rt') as grammar_file:
15         grammar_text = grammar_file.read()
16     _grammar = makeGrammar(grammar_text, {}, 'Tags')
17
18
19 def parse(input):
20     if _grammar is None:
21         load_grammar()
22     return _grammar(input).expression()
23
24
25 if __name__ == '__main__':
26     print parse('test')
27     print parse('!test')
28     print parse('not test')
29     print parse('foo or bar')
30     print parse('foo && bar')
31     print parse('(test)')
32     print parse('(foo || bar)')
33     print parse('(foo and !bar)')