--- esL.py- 2016-09-08 01:00:00.000000000 +0900 +++ esL.py 2016-09-08 02:00:00.000000000 +0900 @@ -173,6 +173,7 @@ def tree_kwd(lst, kdic): return lst e = lst[0] step = lambda e, i: [ e ] + tree_kwd( lst[i:], kdic ) + top_is = lambda lst, k, v: len(lst) > 0 and lst[0][:2] == [ k, v ] if type(e) is not list: return step(e, 1) (k, v) = e[:2] @@ -183,6 +184,19 @@ def tree_kwd(lst, kdic): if v in [ 'return' ] and len( lst[1:] ) > 0: e = [ k, v, lst[1] ] return step(e, 2) + if v == 'else' and len( lst[1:] ) > 0: + r = tree_kwd( lst[1:], kdic ) + return [ [ k, v, r[0] ] ] + r[1:] + if v == 'if' and len( lst[2:] ) > 0: + if lst[1][:2] != [ 'br_s', '(' ]: + err_exit("not found '(' after 'if'") + r = tree_kwd( lst[2:], kdic ) + e = [ k, v, lst[1], r.pop(0) ] + if top_is(r, 'etc', ';'): + r.pop(0) + if top_is(r, 'kwd', 'else'): + e += [ r.pop(0)[2] ] + return [ e ] + r e = e[:2] + tree_kwd( e[2:], kdic ) return step(e, 1) @@ -381,7 +395,7 @@ def do_expr(expr, info): if k in [ 'type', 'fproto', 'etc' ]: # do nothing !!! return None - warn_no_sup('do_expr', 'k', k) + warn_no_sup('do_expr', '[k, v]', [k, v]) return None def do_blk(blk, info):