Пример #1
0
def visit(file, datapack_name, imported=[]):
    with open(file, "r") as f:
        code = f.readlines()

    tree = get_tree(file)
    i_visitor = IncludeVisitor()
    i_visitor.visit(tree)
    modules = i_visitor.modules
    mem = None
    for module in modules:
        mod_file = os.path.join(parent(file), module[0] + ".ms")
        if os.path.isfile(mod_file):
            if not module[0] in imported:
                imported.append(module[0])
                mem = visit(mod_file, datapack_name, imported)
        else:
            line = module[1]
            text = code[line - 1].strip()
            print(
                f"{Fore.RED}Traceback: Line {line}\n{text}\nModuleNotFoundError: No module named {module[0]}{Style.RESET_ALL}"
            )
            raise Exception("Abort")

    m_visitor = MVisitor(name, code, file)
    if mem is not None:
        m_visitor.igmemory = mem[0]
        m_visitor.igfunctionargs = mem[1]
        m_visitor.igfunctionreturn = mem[2]
        m_visitor.igfunctions = mem[3]
        m_visitor.igloops = mem[4]
        m_visitor.loops = mem[5]
        m_visitor.tag = mem[6]
    m_visitor.visit(tree)

    visitor = Visitor(name, code, file)
    visitor.igmemory = m_visitor.igmemory
    visitor.igfunctionargs = m_visitor.igfunctionargs
    visitor.igfunctionreturn = m_visitor.igfunctionreturn
    visitor.igfunctions = m_visitor.igfunctions
    visitor.igloops = m_visitor.igloops
    visitor.loops = m_visitor.loops
    visitor.tag = m_visitor.tag
    if mem is not None:
        visitor.warnings = mem[7]
    visitor.visit(tree)

    return (visitor.igmemory, visitor.igfunctionargs, visitor.igfunctionreturn,
            visitor.igfunctions, visitor.igloops, visitor.loops, visitor.tag,
            visitor.warnings)
Пример #2
0
def visit(name, file):
    tree = get_tree(file)
    mapvisitor = MappingVisitor(name, file)
    try:
        mapvisitor.visit(tree)
    except MappingException:
        return None
    visitor = Visitor(name, file)
    visitor.igfunctions = mapvisitor.igfunctions
    visitor.igmemory = mapvisitor.igmemory
    try:
        visitor.visit(tree)
    except CompileTimeException:
        return None
    print(visitor.tempvars)
    print(visitor.memory)
    return visitor