--- esU.py- 2016-09-09 23:20:00.000000000 +0900 +++ esU.py 2016-09-10 00:00:00.000000000 +0900 @@ -199,9 +199,9 @@ def tree_kwd(lst, kdic): if top_is(r, 'kwd', 'else'): e += [ r.pop(0)[2] ] return [ e ] + r - if v == 'while' and len( lst[2:] ) > 0: + if v in [ 'while', 'for' ] and len( lst[2:] ) > 0: if lst[1][:2] != [ 'br_s', '(' ]: - err_exit("not found '(' after 'while'") + err_exit("not found '(' after '{}'".format(v)) r = tree_kwd( lst[2:], kdic ) e = [ k, v, lst[1], r.pop(0) ] return [ e ] + r @@ -261,7 +261,7 @@ def es_split(s): 'br_e' : [ ')', ']', '}' ], 'op' : ops_flat, 'type' : [ 'int', 'char', 'void' ], - 'kwd' : [ 'return', 'if', 'else', 'while' ], + 'kwd' : [ 'return', 'if', 'else', 'while', 'for' ], 'spc' : [ ' ', '\t', '\n' ], 'etc' : [ ';', ',' ], } @@ -418,6 +418,13 @@ def do_kwd(v, expr, info): while do_expr( expr[2], info ): do_expr( expr[3], info ) return None + if v == 'for': + args = expr[2][2][::2] + do_expr( args[0], info ) + while do_expr( args[1], info ): + do_expr( expr[3], info ) + do_expr( args[2], info ) + return None warn_no_sup('do_kwd', 'v', v)