Exemplo n.º 1
0
def splitTree(node, parent):
    if len(node.children) > 1:
        count = 0
        values = chooseNewParent(node.name)
        select = values[0]
        verifyToChangeParent = values[1]
        if select == -1:
            select = math.ceil(len(node.children) / 2) - 1
        if verifyToChangeParent == True:
            new_node = MyNode(name=node.name)
            new_node.parent = parent
            parent = new_node
            addParentInTreeGenerate(new_node)
        else:
            getLastChildren(node.children[select])
            tempParentGenerateTree[0].parent = parent
            parent = tempParentGenerateTree[0]
        for i in node.children:
            if verifyToChangeParent == False:
                if count != select:
                    splitTree(i, parent)
            else:
                splitTree(i, parent)
            count += 1
    elif len(node.children) == 1:
        splitTree(node.children[0], parent)
    else:
        if parent != None and node != None:
            if node.name not in listOfIgnore:
                if node.parent.parent.name in listOfCreateParent:
                    if node.parent.parent.name == "numero":
                        new_node = MyNode(name=node.parent.parent.name)
                        new_node.parent = parent
                        new_node_type = MyNode(name=node.parent.name)
                        new_node_type.parent = new_node
                        node.parent = new_node_type
                    else:
                        new_node = MyNode(name=node.parent.parent.name)
                        new_node.parent = parent
                        node.parent = new_node
                else:
                    node.parent = parent
Exemplo n.º 2
0
def atribuicao(node):
    id_atribuicao = node.children[0].children[0].children[0].label
    expressao = node.children[2]
    tipo_var = None

    variavel_atual_declarada = False
    global variaveis_declaradas
    global escopo_atual
    for var in variaveis_declaradas:
        if var['lexema'] == id_atribuicao and var['escopo'] == escopo_atual:
            variavel_atual_declarada = True
            tipo_var = var['tipo']
            var['usada'] = True
    if not variavel_atual_declarada:
        for var in variaveis_declaradas:
            if var['escopo'] == 'global' and var['lexema'] == id_atribuicao:
                variavel_atual_declarada = True
                tipo_var = var['tipo']
                var['usada'] = True

    if not variavel_atual_declarada:
        global mensagens_erro
        mensagens_erro.append('Erro: Variável \'{}\' não declarada1'.format(id_atribuicao))


    node_novo = MyNode(name=':=', type=":=")
    node_var = MyNode(name=id_atribuicao, type=tipo_var)
    node_var.parent = node_novo

    expressao_resolvida = resolve_expressao(expressao, tipo_var, id_atribuicao)

    indice = verifica_variavel_declarada_por_nome(id_atribuicao)

    if indice != -1:
        variaveis_declaradas[indice]['inicializado'] = True


    expressao_resolvida.parent = node_novo

    return node_novo
Exemplo n.º 3
0
def declaracao_funcao(node):
    print("declaracao_funcao")
    filhos = node.children
    if (len(filhos) > 1):
        tipo = filhos[0].children[0].children[0].label
        cabecalho = filhos[1]
    else:
        tipo = "vazio"
        cabecalho = filhos[0]

    id_func = cabecalho.children[0].children[0].label

    entra_escopo(id_func)

    if id_func in funcoes.keys():
        mensagens_erro.append("Erro: Já existe uma função com o nome {}".format(id_func))
        global erro
        erro = True

    funcoes[id_func] = {
        "tipo": tipo,
        "id_func": id_func,
        "parametros": [],
        "retornou": False,
        "utilizada": False,
    }
    lista_parametros = cabecalho.children[2]
    get_lista_parametros_funcao(id_func, lista_parametros)

    array_params = []

    lista_parametros.children = []

    lista_par_funcao = funcoes[id_func]["parametros"]
    for param in lista_par_funcao:
        node_param_atual = MyNode(name=param["id"], type=param["tipo"], id=param["tipo"]+"-parametro")
        node_param_atual.parent = lista_parametros
        array_params.append(node)