--- es_c.py- 2016-10-01 00:00:00.000000000 +0900 +++ es_c.py 2016-10-02 00:00:00.000000000 +0900 @@ -100,11 +100,9 @@ def name_bra(lst): if len(lst) == 0: return lst tbl = [ - [ [ [ 'type' ], [ 'name' ], [ 'br_s', '(' ], [ 'br_s', '{' ] ], - lambda type, name, (k, v, args), (k2, v2, body): - [ [ 'fdef', name[1], [ k, v, name_bra(args) ], type, [ k2, v2, name_bra(body) ] ] ] ], - [ [ [ 'type' ], [ 'name' ], [ 'br_s', '(' ] ], - lambda type, name, (k, v, args): [ [ 'fproto', name[1], [ k, v, name_bra(args) ], type ] ] ], + [ [ [ 'name' ], [ 'br_s', '(' ], [ 'br_s', '{' ] ], + lambda name, (k, v, args), (k2, v2, body): + [ [ 'fdef', name[1], [ k, v, name_bra(args) ], None, [ k2, v2, name_bra(body) ] ] ] ], [ [ [ 'name' ], [ 'br_s', '(' ] ], lambda name, (k, v, args): [ [ 'fcall', name[1], [ k, v, name_bra(args) ] ] ] ], [ [ [ 'name' ], [ 'br_s', '[' ] ], @@ -267,7 +265,13 @@ def tree_type(lst): f = lambda s: s[:2] + [ tree_type_br_s( s[2] ) ] e = e[:1] + [ f( e[1] ) ] if e[0] == 'type' and len( lst[1:] ) > 0: - e = e[:2] + [ lst[1] ] + if lst[1][0] == 'fdef': + fdef = tree_type( [ lst[1] ] )[0] + e = fdef[:3] + [ e ] + fdef[4:] + elif lst[1][0] == 'fcall': + e = [ 'fproto' ] + lst[1][1:] + [ e ] + else: + e = e[:2] + [ lst[1] ] return step(e, 2) return step(e, 1)