--- esB.py- 2016-09-02 00:00:00.000000000 +0900 +++ esB.py 2016-09-02 00:30:00.000000000 +0900 @@ -2,6 +2,19 @@ import sys +def is_num(s): + try: + float(s) + except ValueError: + return False + return True + +def is_name(s): + lst = [ c for c in s ] + f1 = lambda c: c.isalpha() or c == '_' + f = lambda c: c.isalnum() or c == '_' + return len(lst) > 0 and f1( lst[0] ) and all( [ f(c) for c in lst[1:] ] ) + def encode(s, tbl): f = lambda t, (k, s1, d1, ec): t.replace(s1, ec) return reduce(f, tbl, s) @@ -58,6 +71,8 @@ def es_split(s): 'br_s' : [ '(', '[', '{' ], 'br_e' : [ ')', ']', '}' ], 'op' : [ '+', '-', '*' ], + 'type' : [ 'int', 'char', 'void' ], + 'kwd' : [ 'return' ], 'spc' : [ ' ', '\t', '\n' ], 'etc' : [ ';', ',' ], } @@ -86,6 +101,10 @@ def es_split(s): f = lambda t, e: t + try_split(e, e) lst = reduce(f, lst, []) + num_name = lambda v: 'num' if is_num(v) else ( 'name' if is_name(v) else 'None' ) + try_num_name = lambda e, (k, v): [ num_name(v), v ] if k is None else e + lst = [ try_num_name(e, e) for e in lst ] + return lst if __name__ == "__main__":