declaration = r'''# note use of raw string when embedding in python code...
file := [ \t\n]*, section+
section := '[',identifier,']', ts,'\n', body
body := statement*
statement := (ts,';',comment,'\n')/equality/nullline
nullline := ts,'\n'
comment := -'\n'*
equality := ts, identifier,ts,'=',ts,identified,ts,'\n'
identifier := [a-zA-Z], [a-zA-Z0-9_]*
identified := ('"',string,'"')/number/identifier
ts := [ \t]*
char := -[\134"]+
number := [0-9eE+.-]+
string := (char/escapedchar)*
escapedchar := '\134"' / '\134\134'
'''
testdata = '''[test1]
val=23
val2="23"
wherefore="art thou"
; why not
log = heavy_wood
[test2]
loose=lips
'''
from simpleparse.parser import Parser
import pprint
parser = Parser( declaration, "file" )
if __name__ =="__main__":
pprint.pprint( parser.parse( testdata))
|