--- esw.py- 2016-09-29 00:00:00.000000000 +0900 +++ esw.py 2016-09-30 00:00:00.000000000 +0900 @@ -140,17 +140,21 @@ def ops_idx(ops, term, op): err_not_found("term={} op='{}' in ops".format(term, op)) return i +def op1(ops, k, v, r0): + (k2, v2) = r0[:2] + if k2 == 'op': + i1 = ops_idx(ops, 1, v) + i2 = ops_idx( ops, len( r0[2:] ), v2 ) + if i1 < i2 or (i1 == i2 and ops[i1][1] == '>'): + r02 = op1( ops, k, v, r0[2] ) + return [ k2, v2, r02 ] + r0[3:] + return [ k, v, r0 ] + def tree_op1(lst, ops, k, v): r = tree_op( lst[1:], ops ) if len(r) == 0: err_not_found("rignt term op='{}'".format(v)) - (k2, v2) = r[0][:2] - if k2 == 'op': - i1 = ops_idx(ops, 1, v) - i2 = ops_idx( ops, len( r[0][2:] ), v2 ) - if i1 < i2 or (i1 == i2 and ops[i1][1] == '>'): - return [ [ k2, v2, [ k, v, r[0][2] ] ] + r[0][3:] ] + r[1:] - return [ [ k, v, r[0] ] ] + r[1:] + return [ op1( ops, k, v, r[0] ) ] + r[1:] def op2(ops, e, k1, v1, r0): (k2, v2) = r0[:2]