示例#1
0
Node* comp_reduction  (Node* node, char op)  {
    Node *aux, *aux2;
    int num1, num2;
    int boolean;
    aux = node;

    if (aux->right->type == 'n')
        num1 = aux->right->number;
    else{
        aux2 = aux->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        }while(aux2->type != 'n');
        num1 = aux2->number;
    }

    if (aux->left->right->type == 'n')
        num2 = aux->left->right->number;
    else{
        aux2 = aux->left->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        }while(aux2->type != 'n');
        num2 = aux2->number;
    }

    switch (op){
        case '>':
            boolean = gt_operator(num2, num1);
            break;
        case '<':
            boolean = lt_operator(num2, num1);
            break;
        case '=':
            boolean = eq_operator(num2, num1);
            break;
        default:
            printf("Operador deve ser >, < ou =\n");
            break;
    }

    if (boolean)
        aux = stack[stack_point - 3]->right;
    else
        aux = stack[stack_point - 4]->right;

    return aux;
}
示例#2
0
int main() {
    Node *root, *aux;
    int size, check = 1, number, temp, num1, num2;
    clock_t c2, c1;
    float _time;

    scanf("%s", input);
    transform_input();
    printf("(%s)\n", input);

    size = strlen(input);
    root = make_graph(0, size - 1);

    printf("Original Graph:\n");
    print_graph(root);
    printf("\n");

    printf("Start..\n");

    c1 = clock();
    root = reduce_graph(root, 0);
    c2 = clock();

    _time = (c2 - c1)*1000/CLOCKS_PER_SEC;

    printf("\n\nEnd!\n");
    printf("Reduced Graph:\n");
    print_graph(root);
    printf("\nTempo de redução: %dhs %dmin %dseg %dmiliseg\n\n", (((int) _time)/1000)/3600, ((((int) _time)/1000)%3600)/60, ((((int) _time)/1000)%3600)%60, ((int) _time) - (((int) _time)/1000)*1000);
    printf("\n");

    return 0;
}
示例#3
0
Node* div_reduction (Node* node)
{

    Node *aux, *div, *div_aux, *aux2;
    int n1, n2,res;
    char num1, num2;

    div = (Node*) malloc(sizeof(Node));
    div_aux = (Node*) malloc(sizeof(Node));
    aux = node;

    if (aux->right->type == 'n')
        n1 = aux->right->number;
    else{
        aux2 = aux->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        }while(aux2->type != 'n');
        n1 = aux2->number;
    }

    if (aux->left->right->type == 'n')
        n2 = aux->left->right->number;
    else{
        aux2 = aux->left->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        }while(aux2->type != 'n');
        n2 = aux2->number;
    }

    //printf("N1 = %d\nN2 = %d\n", n1, n2);
    res = n2 / n1;

    div_aux->type = 'n';
    div_aux->number = res;
    div_aux->right = NULL;
    div_aux->left = NULL;

    return div_aux;

}
示例#4
0
int reduce(MODULE *module, FUNCTION *func)
{
    int changed;
    
    if (has_graph(func))
        changed = reduce_graph(module, func, func->graph);
    else
        changed = reduce_block(module, func, tree_get_child(func, 0));
    
    return changed;
}
示例#5
0
Node* mul_reduction (Node* node)
{
    Node *aux, *mul, *mul_aux, *aux2;
    int n1, n2, res;
    char num1, num2;

    mul = (Node*) malloc(sizeof(Node));
    mul_aux = (Node*) malloc(sizeof(Node));
    aux = node;

    if (aux->right->type == 'n')
        n1 = aux->right->number;
    else{
        aux2 = aux->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        } while(aux2->type != 'n');
        n1 = aux2->number;
    }

    if (aux->left->right->type == 'n')
        n2 = aux->left->right->number;
    else{
        aux2 = aux->left->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        } while(aux2->type != 'n');
        n2 = aux2->number;
    }

    res = n1 * n2;

    mul_aux->type = 'n';
    mul_aux->number = res;
    mul_aux->right = NULL;
    mul_aux->left = NULL;

    return mul_aux;

}
示例#6
0
Node* add_reduction (Node* node)
{
    Node *aux, *sum, *sum_aux, *aux2;
    int n1, n2, res;
    char num1, num2, res_char;

    sum = (Node*) malloc(sizeof(Node));
    sum_aux = (Node*) malloc(sizeof(Node));
    aux = node;

    if (aux->right->type == 'n')
        n1 = aux->right->number;
    else{
        aux2 = aux->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        } while(aux2->type != 'n');
        n1 = aux2->number;
    }

    if (aux->left->right->type == 'n')
        n2 = aux->left->right->number;
    else{
        aux2 = aux->left->right;
        do{
            aux2 = reduce_graph(aux2, 1);
        } while(aux2->type != 'n');
        n2 = aux2->number;
    }

    res = n1 + n2;

    sum_aux->type = 'n';
    sum_aux->number = res;
    sum_aux->right = NULL;
    sum_aux->left = NULL;

    return sum_aux;

}