# coding: Shift_JIS

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

# ファイル名: rule_jotaivar.py
# 機能: jotaivar.pyで出力された状態変数候補リストに存在する変数のうち，
#	その変数が使われるif文のブロック内で変数への代入が発生しない場合，
#	状態変数候補リストから削除する．
# 関数: rule_jotaivar
# 著者名: 山本椋太，若林丈紘

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

import re
import sys

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

# 関数名: rule_jotaivar
# 機能: jotaivar.pyで出力された状態変数候補リストに存在する変数のうち，
#	その変数が使われるif文のブロック内で変数への代入が発生しない場合，
#	状態変数候補リストから削除する．
# 引数
#   readFile: 解析済みcファイル

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

def rule_jotaivar(readFile):
    fi = open("temp/jotaivarlist.tsv","r")
    lines_list = fi.readlines()
    fi.close()
    varlist = list()
    new_varlist = list()
    for line in lines_list:
        row = line.split("\t")
        varlist.append(row[0])

    fi = open(readFile,"r")
    lines = fi.readlines()
    fi.close()
    #print("----------------------")
    for var in varlist:
        regstr = "[a-zA-Z]+" + var + "[a-zA-Z]+"
        reflesh = False
        for j,line in enumerate(lines):
            # 状態変数を含まない行はスキップ

            if re.search(regstr,line) != None or var not in line: continue
            if "@@@" not in line: continue

            tabcnt = len(line.split("\t")) - 1
            lines2 = lines[j+1:]

            for line2 in lines2:
                #{}行はスキップ
                if "{" in line2 or "}" in line2: continue

                # 次のブロックに入ったらbrake
                tabcnt2 = len(line2.split("\t")) - 1
                if tabcnt == tabcnt2: break

                # 状態変数を含まない行はスキップ
                if re.search(regstr,line2) != None or var not in line2: continue

                if "=" in line2:
                    spl = line2.split("=")
                    if var in spl[0]:
                        reflesh = True
                        break
                    else: continue

                if "&"+var in line2:
                    reflesh = True
                    break

            if reflesh == True:
                new_varlist.append(var)
                break

    output = list()
    for line in lines_list:
        for nv in new_varlist:
            if nv in line:
                output.append(line)
                break



    fo = open("temp/jotaivarlist.tsv","w")
    for o in output:
        print(o,end="",file=fo)

if __name__ == '__main__':
    rule_jotaivar(sys.argv[1])
