Beispiel #1
0
    std = {
        '"': '"', '\\': '\\', '/': '/', 'b': '\b', 'f': '\f', 'n': '\n',
        'r': '\r', 't': '\t',
    }
    def sub(m):
        if m.group('standard') is not None:
            return std[m.group('standard')]
        else:
            return unichr(int(m.group('unicode'), 16))
    return re_esc.sub(sub, s)

def make_string(n):
    return unescape(n[1:-1])

# JSON Grammar
null = n('null') >> const(None)
true = n('true') >> const(True)
false = n('false') >> const(False)
number = sometok('number') >> make_number
string = sometok('string') >> make_string
value = fwd()
member = string + op_(':') + value >> tuple
object = (
    op_('{') +
    maybe(member + many(op_(',') + member)) +
    op_('}')
    >> make_object)
array = (
    op_('[') +
    maybe(value + many(op_(',') + value)) +
    op_(']')
Beispiel #2
0
    def sub(m):
        if m.group('standard') is not None:
            return std[m.group('standard')]
        else:
            return unichr(int(m.group('unicode'), 16))

    return re_esc.sub(sub, s)


def make_string(n):
    return unescape(n[1:-1])


# JSON Grammar
null = n('null') >> const(None)
true = n('true') >> const(True)
false = n('false') >> const(False)
number = sometok('number') >> make_number
string = sometok('string') >> make_string
value = fwd()
member = string + op_(':') + value >> tuple
object = (op_('{') + maybe(member + many(op_(',') + member)) + op_('}') >>
          make_object)
array = (
    op_('[') + maybe(value + many(op_(',') + value)) + op_(']') >> make_array)
value.define(null | true | false | object | array | number | string)
json_text = object | array
json_file = json_text + skip(eof)

name_parser_vars(locals())
Beispiel #3
0
id = sometoks(['name', 'number', 'string'])
make_graph_attr = lambda args: DefAttrs(u'graph', [Attr(*args)])
make_edge = lambda x, xs, attrs: Edge([x] + xs, attrs)

node_id = memoize(id) # + maybe(port)
a_list = (
    id +
    maybe(op_('=') + id) +
    skip(maybe(op(',')))
    >> unarg(Attr))
attr_list = (
    many(op_('[') + many(a_list) + op_(']'))
    >> flatten)
attr_stmt = (
   (n('graph') | n('node') | n('edge')) +
   attr_list
   >> unarg(DefAttrs))
graph_attr = id + op_('=') + id >> make_graph_attr
node_stmt = node_id + attr_list >> unarg(Node)
# We use a fwd() because of circular definitions like (stmt_list -> stmt ->
# subgraph -> stmt_list)
subgraph = fwd()
edge_rhs = skip(op('->') | op('--')) + (subgraph | node_id)
edge_stmt = (
    (subgraph | node_id) +
    oneplus(edge_rhs) +
    attr_list
    >> unarg(make_edge))
stmt = (
      attr_stmt