Esempio n. 1
0
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])
Esempio n. 2
0
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)
Esempio n. 3
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
Esempio n. 6
0
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