--- esE.py- 2016-09-03 00:00:00.000000000 +0900 +++ esE.py 2016-09-04 00:00:00.000000000 +0900 @@ -58,9 +58,22 @@ def div_str_cut_comment(s, kdic, tbl): (k, sta, end) = (None, None, None) (k, sta, end) = next( ( e for e in targs if s.startswith( e[1] ) ), (k, sta, end) ) (_, j) = idxs(s, sta, end) - r = [ [ 'str', decode( s[:j], tbl ) ] ] if k == 'str' else [] + e_ds = lambda ds: [ 'str', ds[0], ds[1:-1] if ds[-1] == ds[0] else ds[1:] ] + r = [ e_ds( decode( s[:j], tbl ) ) ] if k == 'str' else [] return r + div_str_cut_comment( s[j:], kdic, tbl ) +def join_type(top, lst): + if top is None: + i = next( ( i for (i, e) in enumerate(lst) if e[0] == 'type' ), None ) + return lst if i is None else lst[:i] + join_type( lst[i], lst[i+1:] ) + i = next( ( i for (i, e) in enumerate(lst) if e[0] == 'type' or e == [ 'op', '*' ] ), None ) + if i is None: + return [ top ] + lst + if i > 0: + return [ top ] + lst[:i] + join_type( None, lst[i:] ) + top += lst[0][1] + return join_type( top, lst[1:] ) + def tree_bra(lst, kdic, sta=None): d = dict( zip( kdic.get('br_s'), kdic.get('br_e') ) ) dst = [] @@ -111,12 +124,14 @@ def es_split(s): dec_split = lambda s: decode(s, tbl, add_spc=True).split() get_k = lambda s1: next( ( k for (k, s1_, d1, ec) in tbl if s1_ == s1 ), None ) try_split = lambda e, (k, v): [ [ get_k(s1), s1 ] for s1 in dec_split(v) ] if k is None else [ e ] - f = lambda t, e: t + try_split(e, e) + f = lambda t, e: t + try_split(e, e[:2]) lst = reduce(f, lst, []) num_name = lambda v: 'num' if is_num(v) else ( 'name' if is_name(v) else 'None' ) try_num_name = lambda e, (k, v): [ num_name(v), v ] if k is None else e - lst = [ try_num_name(e, e) for e in lst ] + lst = [ try_num_name(e, e[:2]) for e in lst ] + + lst = join_type(None, lst) lst = tree_bra(lst, kdic)