# coding: Shift_JIS

# ##############################

# ファイル名: marking.py
# 機能: if文で無処理のものを削除する．
#	条件式にマーキングする．
#	関数でif文および代入文を持たないものを削除する．
# 関数: marking
# 著者名: 山本椋太，若林丈紘

# ##############################

#from parse import *
import re
import sys

# ##############################

# 関数名: marking
# 機能: if文で無処理のものを削除する．
#	条件式にマーキングする．
#	関数でif文および代入文を持たないものを削除する．
# 引数
#   workFile1: 解析対象のcファイル
#   workFile2: 解析対象のcファイル

# ##############################

def marking(workFile1,workFile2):

    fi = open(workFile1)
    lines = fi.readlines()
    fi.close()

    fo = open(workFile2,'w')
    #改行しそこなっている}を改行する
    for line in lines:
        if re.search('}[\s*\S+]',line):
            temp = line.split("}")
            size = len(temp)
            if temp[0] == '':
                print("}",file = fo)
            else:
                print(temp[0]+"\n}",file=fo)
            for i in range(1,size):
                if temp[i] != "\n":
                    print(temp[i],end="",file=fo)
        else:
            print(line,end="",file=fo)
    fo.close()

    fi = open(workFile2)
    lines = fi.readlines()
    fi.close()

    fo = open(workFile1,'w')
    i = 0

    #if,elseif,elseなどで、無処理のものを削除する
    for line in lines:
        if re.match('if|else',lines[i]):
            if "}" in lines[i+2]:
                del lines[i]
                del lines[i]
                del lines[i]
                i -= 4
        i += 1

    for line in lines:
        print(line,end="",file=fo)
    fo.close()

    fi = open(workFile1)
    lines = fi.readlines()
    fi.close()

    #scopes = ("while","if","else","else if","switch")
    fo = open(workFile2,"w")

    #各条件式にマーキングをする
    for line in lines:
        if re.match("^if[\(| +]",line) != None:
            print('IF@@@'+line,end="",file=fo)
        elif re.match("^else[ +]if[\(| +]",line) != None:
            print('EI@@@'+line,end="",file=fo)
        elif re.match("^else *",line) != None:
            print('EL@@@'+line,end="",file=fo)
        elif re.match("^switch[\(| +]",line) != None:
            print('SW@@@'+line,end="",file=fo)
        elif re.match("^case[\:| +]",line) != None:
            print('CS@@@'+line,end="",file=fo)
        elif re.match("^default[:(| +]",line) != None:
            print('DF@@@'+line,end="",file=fo)
        elif re.match("^default[:(| +]",line) != None:
            print('DF@@@'+line,end="",file=fo)
        else:
            print(line,end="",file=fo)
    fo.close()

    fi = open(workFile2)
    lines = fi.readlines()
    fi.close()

    fo = open(workFile2,"w")
    i = 0


    #関数で、IF文および代入文を持たないものを削除する
    #関数にマーキングする
    while i < len(lines):
        if "{" in lines[i]:

            if re.search("@@@|(^for[ \t]*\()",lines[i-1]) == None:
                lines[i-1] = "FC@@@" + lines[i-1]
                kakko = 1
                lines2 = lines[i+1:]
                max_lines = 1
                for line2 in lines2:
                    if "}" in line2:
                        kakko -= 1
                    if kakko == 0:
                        break
                    if "{" in line2:
                        kakko += 1
                    max_lines += 1
                max_lines += 1
                j = i + 1

                for j in range(i+1,i+max_lines+1):
                    #!!!Check!!! ポインタへの代入などは現状考えていない #
                    #!!!Check!!! 関数の参照渡しは現状考えていない #
                    if re.search("[_A-Za-z][_A-Za-z0-9]*[ \t]*=[ \t]*[\(_A-Za-z0-9]+",lines[j]) or re.search("@@@",lines[j]):
                        break
                    if j == len(lines)-1:
                        break
                if j == i+max_lines:
                    for j in range(0,max_lines + 1):
                        del lines[i-1]
                    i = i - 2

        i += 1

    for line in lines:
        print(line,end="",file=fo)
    fo.close()

    ###
    #   ここまで確認済み
    ###

if __name__ == '__main__':
    marking(sys.argv[1],sys.argv[2])
