def assignUsing(s): def assignPA(tokens): if s in tokens: tokens[tokens[s]] = tokens[0] del tokens[s] return assignPA GROUP = (MARK + Group( ZeroOrMore((item + Optional(ATTRIBUTE)("attr")).setParseAction( assignUsing("attr")))) + (WORD("name") | UNMARK)).setParseAction( assignUsing("name")) item << (NUMBER | FLOAT | STRING | BLOB | GROUP) tests = """\ [ '10:1234567890' @name 25 @age +0.45 @percentage person:zed [ [ "hello" 1 child root [ "child" [ 200 '4:like' "I" "hello" things root [ [ "data" [ 2 1 ] @numbers child root [ [ 1 2 3 ] @test 4 5 6 root """.splitlines() for test in tests: if test: print(test) print(item.parseString(test).dump()) print()
def assignUsing(s): def assignPA(tokens): if s in tokens: tokens[tokens[s]] = tokens[0] del tokens[s] return assignPA GROUP = (MARK + Group( ZeroOrMore( (item + Optional(ATTRIBUTE)("attr") ).setParseAction(assignUsing("attr")) ) ) + ( WORD("name") | UNMARK ) ).setParseAction(assignUsing("name")) item << (NUMBER | FLOAT | STRING | BLOB | GROUP ) tests = """\ [ '10:1234567890' @name 25 @age +0.45 @percentage person:zed [ [ "hello" 1 child root [ "child" [ 200 '4:like' "I" "hello" things root [ [ "data" [ 2 1 ] @numbers child root [ [ 1 2 3 ] @test 4 5 6 root """.splitlines() for test in tests: if test: print(test) print(item.parseString(test).dump()) print()
a\u0062c a:b\c~2.0 XY\u005a XY\u005A item:\ item:ABCD\ \ a\ or b a\:b\-c a\:b\+c a\:b\-c\* a\:b\+c\* a\:b\-c\~ a\:b\+c\~ a:b\c~ [ a\ TO a* ] """.splitlines() allpass = True for t in [_f for _f in map(str.strip,tests) if _f]: print(t) try: #~ expression.parseString(t,parseAll=True) print(expression.parseString(t,parseAll=True)) except ParseException as pe: print(t) print(pe) allpass = False print() print(("OK", "FAIL")[not allpass])