Beispiel #1
0
void workflow_free__( void * arg ) {
  workflow_type * workflow = workflow_safe_cast( arg );
  workflow_free( workflow );
}
Beispiel #2
0
Datei: main.c Projekt: inste/jane
int main(int argc, char ** argv) {
	
	char * test;
	int i;
	struct WorkFlow * wf;
	rb_tree * symtab, * functab;
	
	struct Symbol * s, * q;
	
	test = malloc(1024);
	
	memstat_init();
//	jmm_init();
	symtab = symtable_init();
	functab = functable_init();
	
	stdlib_arythm_register(functab);
	
	strcpy(test, "rcmp(rcmp(33, 34), rcmp(34, 35)) + 8");
	
	if (inf_check_brackets(test))
		printf("Correct!\n");
	
	wf = inf_transform_to_reverse_postfix(functab, test);

	puts(test);
	for(i = 0; i < wf->count; ++i) {
		printf("%d ", wf->ops[i].id);
	}
	puts("");
	for(i = 0; i < wf->count; ++i) {
		switch (wf->ops[i].id) {
			case SYM_NUM:		printf("%s", (char *)wf->ops[i].data); break;
			case SYM_SYMBOL:	printf("%s", (char *)wf->ops[i].data); break;
			case SYM_OPS_ADD:	printf("+"); break;
			case SYM_OPS_SUB:	printf("-"); break;
			case SYM_OPS_MUL:	printf("*"); break;
			case SYM_OPS_DIV:	printf("/"); break;
			case SYM_OPS_EXP:	printf("^"); break;
			case SYM_FUNC:		printf("%s", (char *)wf->ops[i].data); break;
			default:			break;
		}
		printf(" ");
	}
	puts("");
	
	
	
	s = process_postfix_workflow(wf, symtab, functab);
	
	printf("%s = %ld/%ld\n", test, ((struct Rational *)s->data)->num, ((struct Rational *)s->data)->denom);
	
	sym_rational_normalize(s);
	
	printf("%s = %ld/%ld\n", test, ((struct Rational *)s->data)->num, ((struct Rational *)s->data)->denom);
	
	workflow_free(wf);
//	sym_free(s);
	
	
	strcpy(test, "(7*2)/12");
	wf = inf_transform_to_reverse_postfix(functab, test);
	q = process_postfix_workflow(wf, symtab, functab);
	
	printf("%s = %ld/%ld\n", test, ((struct Rational *)q->data)->num, ((struct Rational *)q->data)->denom);
	
	if (sym_rational_is_eq(s, q))
		printf("They are equal\n");
	
	sym_free(q);
	sym_free(s);
	workflow_free(wf);
	free(test);
	

	functable_shutdown(functab);
	symtable_shutdown(symtab);

	memstat_shutdown();
	
	return 0;
}