int main(int argc, char *argv[])
{ 
  ATerm in_term, out_term;
  int i;

  /* ATfprintf(stderr, "This is %s\n", argv[0]); */

  ATinit(argc, argv, &in_term);

  ATprotectArray(term_stack,   TSIZE);
  ATprotectArray(environment,  ESIZE);

  in_term = ATmake("Nil");
  for(i = argc - 1; i >= 0; i--)
    {
      /* ATfprintf(stderr, " %s", argv[i]); */
      in_term = App2("Cons", ATmakeString(argv[i]), in_term);
    }

  /* ATfprintf(stderr, "\n", argv[i]); */

  out_term = doit(in_term);
  ATfprintf(stderr, "**** rewriting terminated abnormally\n");
  exit(3);
}
示例#2
0
文件: rw.c 项目: jkeiren/muCRL
static ATerm CaseRewrite(ATerm t) {
    AFun f = ATgetAFun(t);
    int n = ATgetArity(f);
    ATerm u;
    // ATwarning("%t", t);
    if (n==0) return tasks->RWrewrite(t);
    u = ATtableGet(norm, t);
    if (u) return u;
    {
        int i;
        ATerm *a = calloc(n, sizeof(ATerm));
        ATbool changed = ATfalse;
        ATprotectArray(a, n);
        for (i=0; i<n; i++) {
            ATerm arg = ATgetArgument((ATermAppl) t, i);
            a[i] = CaseRewrite(arg);
            if (!ATisEqual(a[i], arg)) changed = ATtrue;
        }
        u = CaseRewriteStep(changed?(ATerm) ATmakeApplArray(f, a):t);
        ATtablePut(norm, t, u);
        ATunprotect(a);
        free(a);
        return u;
    }
}
示例#3
0
int main(int argc, char *argv[])
{ 
  double duration;
  struct tms start, end;
  ATerm in_term, out_term;

  ATinit(argc, argv, &in_term);

  ATprotectArray(term_stack,   TSIZE);
  ATprotectArray(environment,  ESIZE);

  process_options(argc, argv);

  /* Open input file */

  if (input_file == NULL)
      infile = stdin;
  else
      infile = fopen(input_file, "r");

  /* Push term to be reduced on term stack */

  if ((in_term = ATreadFromFile(infile)) == NULL) {
    ATfprintf(stderr, "not a valid term\n");
    exit(1);
  }

  in_term = /*list_to_consnil*/(in_term);

  debugs(ATfprintf(stderr, "in_term (b) = %t\n", in_term));

  /* Execute the strategy */

  times(&start);
  out_term = doit(in_term); 
  times(&end);
  duration = ((double)(end.tms_utime - start.tms_utime))/((double)CLK_TCK);
 
  if(out_term != NULL)
    {
      /* Open output file */
      if (output_file == NULL)
	  outfile = stdout;
      else
	  outfile = fopen(output_file, "w");
      /* ATfprintf(stdout, "%t\n", out_term); */  
      if(binary_output)
	ATwriteToBinaryFile(/*consnil_to_list*/(out_term), outfile);
      else
	ATwriteToTextFile(/*consnil_to_list*/(out_term), outfile);
    }

  print_profile(duration);

  if (!failed)
    {
      ATfprintf(stderr, "  rewriting succeeded\n");
      exit(0);
    }
  else 
    {
      ATfprintf(stderr, "  rewriting failed\n");
      exit(1);
    }
}