Files
cs420/examples/meta/make_cond.py
2020-03-26 03:38:20 +09:00

54 lines
1.6 KiB
Python

#!/usr/bin/env python3
"""Make c program which uses complicated conditional expression
To make c program, execute `python3 make_cond.py > file_name.c`
"""
import random
def eval_cond(arr_cond):
"""Evaluate conditional expression
"""
if len(arr_cond) == 1:
return arr_cond[0]
new_arr_cond = []
for cond_start in range(len(arr_cond) // 3):
cond_val = arr_cond[3*cond_start + 1] if arr_cond[3*cond_start] else arr_cond[3*cond_start + 2]
new_arr_cond.append(cond_val)
return eval_cond(new_arr_cond)
def make_func(i):
"""Make a function that contains a conditional expression
"""
func_signature = "int " + "func_" + str(i) + "()"
variables = "abcdefghijklmnopqrstuvwxyzA"
func_inner = []
val_bitmap = []
# Variable initializiation
for var in variables:
val = random.randint(0, 1)
val_bitmap.append(val)
decl = "\tint " + var + " = " + str(val) + ";"
func_inner.append(decl)
expr_val = eval_cond(val_bitmap)
func_inner.append("\treturn (((a ? b : c) ? (d ? e : f) : (g ? h : i)) ? ((j ? k : l) ? (m ? n : o) : (p ? q : r)) : ((s ? t : u) ? (v ? w : x) : (y ? z : A))) == " + str(expr_val) + ";")
return "\n".join([func_signature, "{"] + func_inner + ["}"])
if __name__ == "__main__":
src = ""
return_stmt = "\treturn ("
NUM_FUNC = 100
for i in range(NUM_FUNC):
src += make_func(i)
src += "\n\n"
return_stmt += "func_" + str(i) + "()"
return_stmt += " && " if i != (NUM_FUNC - 1) else ") == "
return_stmt += "1;"
src += "int main()\n{\n" + return_stmt + "\n}\n"
print(src)