Ejemplo n.º 1
0
void mk_alternating(tl_Node *p) /* generates an alternating automaton for p */
{
    if (tl_stats)
    {
        getrusage(RUSAGE_SELF, &tr_debut);
    }

    node_size = calculate_node_size(p) + 1; /* number of states in the automaton */
    label = (tl_Node **) tl_emalloc(node_size * sizeof(tl_Node *));
    transition = (ATrans **) tl_emalloc(node_size * sizeof(ATrans *));
    node_size = node_size / (8 * sizeof(int)) + 1;

    sym_size = calculate_sym_size(p); /* number of predicates */
    if (sym_size)
    {
        sym_table = (char **) tl_emalloc(sym_size * sizeof(char *));
    }
    sym_size = sym_size / (8 * sizeof(int)) + 1;

    final_set = make_set(-1, 0);
    transition[0] = boolean(p); /* generates the alternating automaton */

    if (tl_verbose)
    {
        fprintf(tl_out, "\nAlternating automaton before simplification\n");
        print_alternating();
    }

    if (tl_simp_diff)
    {
        simplify_astates(); /* keeps only accessible states */
        if (tl_verbose)
        {
            fprintf(tl_out, "\nAlternating automaton after simplification\n");
            print_alternating();
        }
    }

    if (tl_stats)
    {
        getrusage(RUSAGE_SELF, &tr_fin);
        fprintf(tl_out, "\n%i states, %i transitions\n", astate_count, atrans_count);
    }

    releasenode(1, p);
    tfree(label);
}
Ejemplo n.º 2
0
void mk_alternating(Node *p) /* generates an alternating automaton for p */
{
  if(tl_stats) getrusage(RUSAGE_SELF, &tr_debut);

  node_size = calculate_node_size(p) + 1; /* number of states in the automaton */
  label = (Node **) tl_emalloc(node_size * sizeof(Node *));
  transition = (ATrans **) tl_emalloc(node_size * sizeof(ATrans *));
  node_size = node_size / (8 * sizeof(int)) + 1;

  sym_size = calculate_sym_size(p); /* number of predicates */
  if(sym_size) sym_table = (char **) tl_emalloc(sym_size * sizeof(char *));
  sym_size = sym_size / (8 * sizeof(int)) + 1;
  
  final_set = make_set(-1, 0);
  transition[0] = boolean(p); /* generates the alternating automaton */

  if(tl_verbose) {
    fprintf(tl_out, "\nAlternating automaton before simplification\n");
    print_alternating();
  }

  if(tl_simp_diff) {
    simplify_astates(); /* keeps only accessible states */
    if(tl_verbose) {
      fprintf(tl_out, "\nAlternating automaton after simplification\n");
      print_alternating();
    }
  }

#ifndef __MINGW__
  if(tl_stats) {
    getrusage(RUSAGE_SELF, &tr_fin);
    timeval_subtract (&t_diff, &tr_fin.ru_utime, &tr_debut.ru_utime);
    fprintf(tl_out, "\nBuilding and simplification of the alternating automaton: %i.%06is",
		t_diff.tv_sec, t_diff.tv_usec);
    fprintf(tl_out, "\n%i states, %i transitions\n", astate_count, atrans_count);
  }
#endif
  releasenode(1, p);
  tfree(label);
}