]> mj.ucw.cz Git - eval.git/blob - t/moe/confparser.py
Renamed VARNAME_re to re_VARNAME
[eval.git] / t / moe / confparser.py
1 """
2 confparse.py
3 ------------
4
5 Simple Moe configuration file syntax parser. 
6
7 TODO: decide '()' around formulas
8 TODO: check escaping in expressions
9 TODO: should whitespace (incl. '\\n') be allowed (almost) everywhere?
10       can comment be anywhere whitespace can?
11
12 Generally, whitespace and comments are alowed everywhere except in variable names and inside expressions. 
13 Also, COMMENT must not contain '\\n'. 
14 FILE, BLOCK, STATEMENT, OPERATION, SUBTREE, CONDITION, FORMULA, AND, OR and NOT eat any preceding whitespace.
15
16 The configuration syntax is the following:
17
18 FILE = BLOCK 
19 BLOCK = WS | STATEMENT ( SEP STATEMENT )* 
20
21 SEP = ( '\\n' | ';' )
22 WS = ( ' ' | '\\t' | '\\n' | COMMENT )*
23
24 COMMENT = re('#[^\\n]*\\n')
25
26 STATEMENT = CONDITION | OPERATION | SUBTREE
27
28 OPERATION = WS VARNAME WS ( '=' | '+=' ) WS EXPRESSION
29 SUBTREE = WS VARNAME WS '{' BLOCK '}'
30 CONDITION = WS 'if' FORMULA WS '{' BLOCK WS '}'
31
32 FORMULA = WS (( EXPRESSION WS ( '!=' | '==' ) WS EXPRESSION ) | '(' AND WS ')' | '(' OR WS ')' | NOT )
33 AND = FORMULA WS 'and' FORMULA
34 OR = FORMULA WS 'or' FORMULA
35 NOT = WS 'not' FORMULA 
36
37 EXPRESSION = '"' ( ECHAR | '{' VARNAME '}' )* '"' | re"'[^'\\n]*'"
38 ECHAR = re('([^\\{}]|\\\\|\\{|\\}|\\n)*')
39 """
40
41 import re, logging as log
42
43 c_tree_sep = u'.'
44 c_comment = u'#'
45 c_open = u'{'
46 c_close = u'}'
47 c_if = u'if'
48
49 "Variable name regexp, dots (separators) must be separated from edges and each other."
50 re_VARNAME = re.compile(r'\A([A-Za-z0-9_-]+\.)*[A-Za-z0-9_-]+\Z')
51
52