Exemplo n.º 1
0
    top, data = d
    nodes, edges = [], []
    for node, _edges in data:
        nodes.append(node)
        edges.extend(_edges)
    return Eds(top=top, nodes=nodes, edges=edges)


def _make_nodedata(d):
    nid = d[0]
    node = Node(nid, pred=d[1], sortinfo=d[4], lnk=d[2], carg=d[3])
    edges = [(nid, rarg, tgt) for rarg, tgt in d[5]]
    return (node, edges)


_COLON = regex(r'\s*:\s*', value=Ignore)
_COMMA = regex(r',\s*')
_SPACES = regex(r'\s+', value=Ignore)
_SYMBOL = regex(r'[-+\w]+')
_PRED = regex(r'((?!<-?\d|\("|\{|\[)\w)+', value=Pred.string_or_grammar_pred)
_EDS = nt('EDS', value=_make_eds)
_TOP = opt(nt('TOP'), default=None)
_TOPID = opt(_SYMBOL, default=None)
_FLAG = opt(regex(r'\s*\(fragmented\)', value=Ignore))
_NODE = nt('NODE', value=_make_nodedata)
_DSCN = opt(lit('|', value=Ignore))
_LNK = opt(nt('LNK', value=lambda d: Lnk.charspan(*d)), default=None)
_CARG = opt(nt('CARG'), default=None)
_PROPS = opt(nt('PROPS', value=lambda d: d[0] + d[1]), default=None)
_EDGES = nt('EDGES')
_TYPE = opt(_SYMBOL, value=lambda i: [(CVARSORT, i)], default=[])
Exemplo n.º 2
0
def _make_eds(d):
    top, data = d
    nodes, edges = [], []
    for node, _edges in data:
        nodes.append(node)
        edges.extend(_edges)
    return Eds(top=top, nodes=nodes, edges=edges)

def _make_nodedata(d):
    nid = d[0]
    node = Node(nid, pred=d[1], sortinfo=d[4], lnk=d[2], carg=d[3])
    edges = [(nid, rarg, tgt) for rarg, tgt in d[5]]
    return (node, edges)

_COLON   = regex(r'\s*:\s*', value=Ignore)
_COMMA   = regex(r',\s*')
_SPACES  = regex(r'\s+', value=Ignore)
_SYMBOL  = regex(r'[-+\w]+')
_PRED    = regex(r'((?!<-?\d|\("|\{|\[)\w)+',
                 value=Pred.string_or_grammar_pred)
_EDS     = nt('EDS', value=_make_eds)
_TOP     = opt(nt('TOP'), default=None)
_TOPID   = opt(_SYMBOL, default=None)
_FLAG    = opt(regex(r'\s*\(fragmented\)', value=Ignore))
_NODE    = nt('NODE', value=_make_nodedata)
_DSCN    = opt(lit('|', value=Ignore))
_LNK     = opt(nt('LNK', value=lambda d: Lnk.charspan(*d)), default=None)
_CARG    = opt(nt('CARG'), default=None)
_PROPS   = opt(nt('PROPS', value=lambda d: d[0] + d[1]), default=None)
_EDGES   = nt('EDGES')
Exemplo n.º 3
0
    top, data = d
    nodes, edges = [], []
    for node, _edges in data:
        nodes.append(node)
        edges.extend(_edges)
    return Eds(top=top, nodes=nodes, edges=edges)


def _make_nodedata(d):
    nid = d[0]
    node = Node(nid, pred=d[1], sortinfo=d[4], lnk=d[2], carg=d[3])
    edges = [(nid, rarg, tgt) for rarg, tgt in d[5]]
    return (node, edges)


_COLON   = regex(r'\s*:\s*', value=Ignore)
_COMMA   = regex(r',\s*')
_SPACES  = regex(r'\s+', value=Ignore)
_SYMBOL  = regex(r'[-+\w]+')
_PRED    = regex(r'((?!<-?\d|\("|\{|\[|\s).)+',
                 value=Pred.surface_or_abstract)
_EDS     = nt('EDS', value=_make_eds)
_TOP     = opt(nt('TOP'), default=None)
_TOPID   = opt(_SYMBOL, default=None)
_FLAG    = opt(regex(r'\s*\(fragmented\)', value=Ignore))
_NODE    = nt('NODE', value=_make_nodedata)
_DSCN    = opt(lit('|', value=Ignore))
_LNK     = opt(nt('LNK', value=lambda d: Lnk.charspan(*d)), default=None)
_CARG    = opt(nt('CARG'), default=None)
_PROPS   = opt(nt('PROPS', value=lambda d: d[0] + d[1]), default=None)
_EDGES   = nt('EDGES')
Exemplo n.º 4
0
    Float,
    DQString,
    Peg,
)

# escapes from https://en.wikipedia.org/wiki/S-expression#Use_in_Lisp
_SExpr_escape_chars = r'"\s\(\)\[\]\{\}\\;'

def _SExpr_unescape_symbol(s):
    return re.sub(r'\\([{}])'.format(_SExpr_escape_chars), r'\1', s)

def _SExpr_unescape_string(s):
    return re.sub(r'\\(["\\])', r'\1', s)

_SExpr = nonterminal('SExpr')
_Symbol = regex(r'(?:[^{ec}]+|\\.)+'.format(ec=_SExpr_escape_chars),
                value=_SExpr_unescape_symbol)
# dummy choice around DQString just to get character unescaping
_String = choice(DQString, value=_SExpr_unescape_string)

SExpr = Peg(
    grammar=dict(
        start=sequence(Spacing, _SExpr, value=lambda xs: xs[1]),
        SExpr=choice(
            # atom
            sequence(choice(Float, Integer, _String, _Symbol), Spacing,
                     value=lambda xs: xs[0]),
            # Expression
            bounded(
                regex(r'\(\s*'),
                choice(
                    # DotPair
Exemplo n.º 5
0
    top, data = d
    nodes, edges = [], []
    for node, _edges in data:
        nodes.append(node)
        edges.extend(_edges)
    return Eds(top=top, nodes=nodes, edges=edges)


def _make_nodedata(d):
    nid = d[0]
    node = Node(nid, pred=d[1], sortinfo=d[4], lnk=d[2], carg=d[3])
    edges = [(nid, rarg, tgt) for rarg, tgt in d[5]]
    return (node, edges)


_COLON = regex(r'\s*:\s*', value=Ignore)
_COMMA = regex(r',\s*')
_SPACES = regex(r'\s+', value=Ignore)
_SYMBOL = regex(r'[-+\w]+')
_PRED = regex(r'((?!<-?\d|\("|\{|\[)[^<>])+',
              value=Pred.string_or_grammar_pred)
_EDS = nt('EDS', value=_make_eds)
_TOP = opt(nt('TOP'), default=None)
_TOPID = opt(_SYMBOL, default=None)
_FLAG = opt(regex(r'\s*\((?:cyclic )?fragmented\)', value=Ignore))
_NODE = nt('NODE', value=_make_nodedata)
_DSCN = opt(lit('|', value=Ignore))
_LNK = opt(nt('LNK', value=lambda d: Lnk.charspan(*d)), default=None)
_CARG = opt(nt('CARG'), default=None)
_PROPS = opt(nt('PROPS', value=lambda d: d[0] + d[1]), default=None)
_EDGES = nt('EDGES')