[798] | 1 | #!/usr/bin/env python
|
---|
| 2 | # -*- coding: utf-8 -*-
|
---|
| 3 | '''
|
---|
| 4 | Created on 10.07.2009
|
---|
| 5 |
|
---|
| 6 | @author: hmueller
|
---|
| 7 |
|
---|
| 8 | Syntax description of bacula config files
|
---|
| 9 | '''
|
---|
| 10 |
|
---|
| 11 | from simpleparse.common import numbers, strings, comments
|
---|
| 12 | from simpleparse.parser import Parser
|
---|
| 13 |
|
---|
| 14 | import resource
|
---|
| 15 |
|
---|
| 16 | declaration = r"""
|
---|
| 17 | #text_pattern := ’\/’
|
---|
| 18 | #text_subst := delim_init / ’/’
|
---|
| 19 | #text_args := delim_init / ’)’
|
---|
| 20 | #text_exp := delim_init / delim_close / ’:’ / ’+’
|
---|
| 21 | text := delim_init / index_open /index_close
|
---|
| 22 | delim_init := '$'
|
---|
| 23 | delim_open := '{'
|
---|
| 24 | delim_close := '}'
|
---|
| 25 | index_open := '['
|
---|
| 26 | index_close := ']'
|
---|
| 27 | index_mark := '#'
|
---|
| 28 | name_chars := [a-zA-Z0-9]
|
---|
| 29 | """
|
---|
| 30 |
|
---|
| 31 | if __name__ == "__main__":
|
---|
| 32 | parser = Parser(declaration)
|
---|
| 33 |
|
---|
| 34 | #input ::= ( TEXT
|
---|
| 35 | # | variable
|
---|
| 36 | # | INDEX_OPEN input INDEX_CLOSE (loop_limits)?
|
---|
| 37 | # )*
|
---|
| 38 | #variable ::= DELIM_INIT (name|expression)
|
---|
| 39 | #name ::= (NAME_CHARS)+
|
---|
| 40 | #expression ::= DELIM_OPEN
|
---|
| 41 | # (name|variable)+
|
---|
| 42 | # (INDEX_OPEN num_exp INDEX_CLOSE)?
|
---|
| 43 | # (’:’ command)*
|
---|
| 44 | # DELIM_CLOSE
|
---|
| 45 | #command ::= ’-’ (TEXT_EXP|variable)+
|
---|
| 46 | # | ’+’ (TEXT_EXP|variable)+
|
---|
| 47 | # | ’o’ NUMBER (’-’|’,’) (NUMBER)?
|
---|
| 48 | # | ’#’
|
---|
| 49 | # | ’*’ (TEXT_EXP|variable)+
|
---|
| 50 | # | ’s’ ’/’ (TEXT_PATTERN)+
|
---|
| 51 | # ’/’ (variable|TEXT_SUBST)*
|
---|
| 52 | # ’/’ (’m’|’g’|’i’|’t’)*
|
---|
| 53 | # | ’y’ ’/’ (variable|TEXT_SUBST)+
|
---|
| 54 | # ’/’ (variable|TEXT_SUBST)*
|
---|
| 55 | # ’/’
|
---|
| 56 | # | ’p’ ’/’ NUMBER
|
---|
| 57 | # ’/’ (variable|TEXT_SUBST)*
|
---|
| 58 | # ’/’ (’r’|’l’|’c’)
|
---|
| 59 | # | ’%’ (name|variable)+
|
---|
| 60 | # (’(’ (TEXT_ARGS)? ’)’)?
|
---|
| 61 | # | ’l’
|
---|
| 62 | # | ’u’
|
---|
| 63 | # num_exp ::= operand
|
---|
| 64 | # | operand (’+’|’-’|’*’|’/’|’%’) num_exp
|
---|
| 65 | # operand ::= (’+’|’-’)? NUMBER
|
---|
| 66 | # | INDEX_MARK
|
---|
| 67 | # | ’(’ num_exp ’)’
|
---|
| 68 | # | variable
|
---|
| 69 | # loop_limits ::= DELIM_OPEN
|
---|
| 70 | # (num_exp)? ’,’ (num_exp)? (’,’ (num_exp)?)?
|
---|
| 71 | # DELIM_CLOSE
|
---|
| 72 | # NUMBER ::= (’0’|...|’9’)+
|
---|
| 73 | # TEXT_PATTERN::= (^(’/’))+
|
---|
| 74 | # TEXT_SUBST ::= (^(DELIM_INIT|’/’))+
|
---|
| 75 | # TEXT_ARGS ::= (^(DELIM_INIT|’)’))+
|
---|
| 76 | # TEXT_EXP ::= (^(DELIM_INIT|DELIM_CLOSE|’:’|’+’))+
|
---|
| 77 | # TEXT ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
|
---|
| 78 | # DELIM_INIT ::= ’$’
|
---|
| 79 | # DELIM_OPEN ::= ’{’
|
---|
| 80 | # DELIM_CLOSE ::= ’}’
|
---|
| 81 | # INDEX_OPEN ::= ’[’
|
---|
| 82 | # INDEX_CLOSE ::= ’]’
|
---|
| 83 | # INDEX_MARK ::= ’#’
|
---|
| 84 | # NAME_CHARS ::= ’a’|...|’z’|’A’|...|’Z’|’0’|...|’9’
|
---|
| 85 |
|
---|