--- es3.py- 2016-08-31 01:00:00.000000000 +0900 +++ es3.py 2016-08-31 02:00:00.000000000 +0900 @@ -2,12 +2,44 @@ import sys +def enc(idx): + return '@{:02d}'.format(idx) + +def encode(s, tbl): + f = lambda t, s1: t.replace( s1, enc( tbl.index(s1) ) ) + return reduce(f, tbl, s) + +def decode(s, tbl, add_spc=False): + add = ' ' if add_spc else '' + f = lambda t, s1: t.replace( enc( tbl.index(s1) ), add + s1 + add) + return reduce(f, tbl, s) + +def div_str(s, tbl): + qt = '"' + enc_qt = enc( tbl.index(qt) ) + if enc_qt not in s: + return [ [ None, s ] ] + i = s.index(enc_qt) + if i > 0: + return [ [ None, s[:i] ] ] + div_str( s[i:], tbl ) + n = len(enc_qt) + j = n + s[n:].index(enc_qt) + n if enc_qt in s[n:] else len(s) + qs = decode( s[:j], tbl ) + return [ [ 'str', qs ] ] + div_str( s[j:], tbl ) + def es_split(s): - tbl = [ '/*', '*/', '(', ')', ';', ',', '*', '"' ] - for s1 in tbl: - d = ' ' + s1 + ' ' - s = s.replace(s1, d) - return s.split() + tbl = [ '/*', '*/', '(', ')', ';', ',', '*', '"', ' ', '\t', '\n' ] + s = encode(s, tbl) + print('encode:\n{}\n'.format(s)) + + lst = div_str(s, tbl) + print('div_str:\n{}\n'.format(lst)) + + f = lambda e: decode(e[1], tbl, add_spc=True).split() if e[0] is None else [ e[1] ] + f2 = lambda t, e: t + f(e) + lst = reduce(f2, lst, []) + + return lst if __name__ == "__main__": rcode = 0