def main(argv): """ Main function for the nndl program. """ if len(argv) < 3: print("USAGE: python3 %s <.ndl files> <simulator_src_director>" % argv[0]) exit(1) else: files_to_compile = argv[1:-1] for f in files_to_compile: compiler.compile(f, argv[-1])
def main(): msg = "Unknown command\nUsage: {} source".format(sys.argv[0]) args = cmd.parse_args(['source'], ['keep-source'], msg) source = args['source'] if os.path.isdir(source): #source is a directory files = [] for fname in os.listdir(source): if fname.endswith(".jack"): files.append(os.path.normpath(source + '/' + fname)) elif os.path.isfile(source): #source is a file files = [source] else: print "Cannot open {}".format(source) sys.exit(0) try: for fname in files: with open(fname, 'r') as f: intext = f.read() outvm = compile(intext) outvname = cmd.change_extension(fname, "vm") with open(outvname, 'w') as ofile: ofile.write(outvm) except Exception as e: #catch any parsing errors print e raise sys.exit(0)
#! python from compiler.compiler import compile from config import CFG compile(CFG)
def runtest(student_id): con = config.config("0") student_dir = con.student_dir testcase_dir = con.testcase_dir compiler_name = con.compiler_name limit_time = con.limit_time # diff = con.diff current_student_dir = student_dir + "/" + student_id submit_dir = current_student_dir + "/submit" time_dir = current_student_dir + "/" + datetime.datetime.now().strftime("%Y%m%dT%H%M%S") if not os.path.isdir(time_dir): os.makedirs(time_dir) files = os.listdir(submit_dir) for f in files: shutil.move(submit_dir + "/" + f, time_dir) xmlpath = time_dir + "/pro.xml" h, s = compiler.getListFile(xmlpath) source = h + s for i in range(len(source)): source[i] = time_dir + "/" + source[i] exe_file = time_dir + "/main" log_file = time_dir + "/pro.log" compile_error = compiler.compile(compiler_name, source, exe_file, log_file) if not compile_error: # khong co loi # test testcase list_testcase = os.listdir(testcase_dir) student_output_dir = time_dir + "/output" os.mkdir(student_output_dir) list_score = [] score = 0 for current_testcase in list_testcase: input_file = testcase_dir + "/" + current_testcase + "/input" output_file = testcase_dir + "/" + current_testcase + "/output" student_output_file = student_output_dir + "/" + current_testcase cml = exe_file + " < " + input_file + " > " + student_output_file command_line = command.Command(cml, input_file, student_output_file) run_error = command_line.run(timeout=limit_time) if not run_error: if checkfile.isSameFile(output_file, student_output_file): list_score.append((current_testcase, 1)) score = score + 1 else: list_score.append((current_testcase, 0)) else: list_score.append((current_testcase, 0)) score_file = open(time_dir + "/score.log", "w") score_file.write(str(score) + "/" + str(len(list_score)) + "\n") for i in list_score: score_file.write(str(i[0]) + " " + str(i[1]) + "\n") score_file.close() return 0 # co loi, return 1 else: return 1
def run_test_on_submit_dir(ass_id, student_id, submit_dir_name): con = config.config(str(ass_id)) modecheck = con.diff time_dir = con.student_dir + "/" + str(student_id) + "/" + str(submit_dir_name) xmlpath = time_dir + "/pro.xml" h, s = compiler.getListFile(xmlpath) source = h + s for i in range(len(source)): source[i] = time_dir + "/" + source[i] exe_file = time_dir + "/main" log_file = time_dir + "/pro.log" compile_error = compiler.compile(con.compiler_name, source, exe_file, log_file) if not compile_error: # khong co loi # test testcase list_testcase = os.listdir(con.testcase_dir) student_output_dir = time_dir + "/output" os.mkdir(student_output_dir) list_score = [] score = 0 for current_testcase in list_testcase: input_file = con.testcase_dir + "/" + current_testcase + "/input" output_file = con.testcase_dir + "/" + current_testcase + "/output" student_output_file = student_output_dir + "/" + current_testcase student_output_log = student_output_file + ".log" cml = exe_file + " < " + input_file + " > " + student_output_file command_line = command.Command(cml, input_file, student_output_file) run_error = command_line.run(timeout=con.limit_time) chard = (modecheck[0] == "1") ccase = (modecheck[1] == "1") cfloat = (modecheck[2] == "1") precision = int(modecheck[4:]) if run_error: error_log = open(student_output_log, "w") error_log.write("Time Limit Error") error_log.close() list_score.append((current_testcase, 0)) elif checkfile.isSameFile(output_file, student_output_file, student_output_log, chard, ccase, cfloat, precision): list_score.append((current_testcase, 1)) score = score + 1 else: list_score.append((current_testcase, 0)) score_file = open(time_dir + "/score.log", "w") percen = str(score) + "/" + str(len(list_testcase)) score_file.write(percen + "\n") for i in list_score: score_file.write(str(i[0]) + " " + str(i[1]) + "\n") score_file.close() return 0, percen, "" # co loi, return 1 else: file = open(log_file, "r") log = file.read() file.close() return 1, 0, log
import sys sys.dont_write_bytecode = True from compiler.compiler import compile from shell import entry_point path = "bin.b" if len(sys.argv) < 2: print("Missing <source>") exit(1) with open(sys.argv[1], "r") as f: source = f.read() binary = compile(source) #print(binary) """ LAST THING I DID CANT JUST ALLOCATE STRINGS DYNAMICALLY AT END OF FRAME change frame layout, put pointers at the start, dont use arealen as often """ binary.write(path) if "debug" in sys.argv: debug = True else: debug = False