--- esV.py- 2016-09-10 00:00:00.000000000 +0900 +++ esV.py 2016-09-10 01:00:00.000000000 +0900 @@ -246,7 +246,7 @@ def es_split(s): [ 2, '>', [ '||' ] ], [ 3, '<', [ '?', ':' ] ], [ 2, '<', [ '=', '+=', '-=', '*=', '/=', '%=', '&=', '|=', '^=', '~=', '>>=', '<<=' ] ], - # [ 2, '>', [ ',' ] ], # ... + [ 2, '>', [ ',' ] ], # ... ] f = lambda t, (term, bind, lst): t + [ v for v in lst if v not in t ] @@ -263,7 +263,7 @@ def es_split(s): 'type' : [ 'int', 'char', 'void' ], 'kwd' : [ 'return', 'if', 'else', 'while', 'for' ], 'spc' : [ ' ', '\t', '\n' ], - 'etc' : [ ';', ',' ], + 'etc' : [ ';' ], } enc = lambda ki, idx: '@{:02d}{:02d}'.format(ki, idx) @@ -377,6 +377,8 @@ def do_op2(v, a, b, info): return a >= b if v == '>': return a > b + if v == ',': + return b warn_no_sup('do_op2', 'v', v) @@ -428,6 +430,11 @@ def do_kwd(v, expr, info): warn_no_sup('do_kwd', 'v', v) +def do_comma(e, info): + if e[:2] != ['op', ',']: + return [ do_expr(e, info) ] + return do_comma( e[2], info ) + [ do_expr( e[3], info ) ] + def do_expr(expr, info): if info.get('verb') >= 2: print('expr={}'.format(expr)) @@ -453,7 +460,8 @@ def do_expr(expr, info): return do_arr( v, expr[2], info ) if k == 'fcall': (_, _, args) = expr[2] - args = [ do_expr(e, info) for e in args if e != [ 'etc', ',' ] ] + if len(args) > 0: + args = do_comma( args[0], info ) return do_fcall(v, args, info) if k in [ 'type', 'fproto', 'etc' ]: # do nothing !!!