version 1.7, 2000/08/07 20:47:29
|
version 1.13, 2005/02/15 22:15:05
|
Line 31
|
Line 31
|
#include <ctype.h> /* isalnum() */ |
#include <ctype.h> /* isalnum() */ |
#include <string.h> |
#include <string.h> |
#include <math.h> |
#include <math.h> |
|
#include <float.h> |
|
|
#include "capaParser.h" |
#include "capaParser.h" |
|
|
Line 726 process_op(int op)
|
Line 727 process_op(int op)
|
} |
} |
} |
} |
|
|
void |
Unit_t* |
process_utree(Unit_t *t) |
process_utree(Unit_t *t) |
{ |
{ |
Ptopidx=0; |
Ptopidx=0; |
postwalk_utree(t); |
postwalk_utree(t); |
if( Ptopidx == 1 ) { |
if( Ptopidx == 1 ) { |
/* printf("Correctly parsed!\n"); */ |
//fprintf(stderr,"Correctly parsed!\n"); |
printf("Unit:%s\n",Sbuf); |
//fprintf(stderr,"Unit:%s\n",Sbuf); |
simplify_unit(Pstack[Ptopidx]); |
simplify_unit(Pstack[Ptopidx]); |
Pstack[Ptopidx]->u_symbol[0]='\0'; |
//Pstack[Ptopidx]->u_symbol[0]='\0'; |
/*sprintf(Pstack[Ptopidx]->u_symbol,"");*/ |
//fprintf(stderr,Pstack[Ptopidx]->u_symbol,""); |
print_unit_t(Pstack[Ptopidx]); |
print_unit_t(Pstack[Ptopidx]); |
u_find_name(Pstack[Ptopidx]); |
//u_find_name(Pstack[Ptopidx]); |
print_matches(Pstack[Ptopidx]); |
//print_matches(Pstack[Ptopidx]); |
free_utree(t); |
return(Pstack[Ptopidx]); |
|
//free_utree(t); |
} |
} |
|
return(t); |
} |
} |
|
|
/* ============================================================== */ |
/* ============================================================== */ |
Line 780 int check_correct_unit(char *u_symb,Uni
|
Line 783 int check_correct_unit(char *u_symb,Uni
|
(Pstack[Ptopidx]->u_count == t->u_count) ) { /* has unit */ |
(Pstack[Ptopidx]->u_count == t->u_count) ) { /* has unit */ |
*scale = units_ratio(Pstack[Ptopidx], t); |
*scale = units_ratio(Pstack[Ptopidx], t); |
if( *scale == 0.0 ) { |
if( *scale == 0.0 ) { |
result = UNIT_FAIL; |
result = UNIT_IRRECONCIBLE; |
} |
} |
free_utree(ap); |
free_utree(ap); |
} else { |
} else { |
result = UNIT_FAIL; |
result = UNIT_INVALID_STUDENT3; |
} |
} |
} else { /* invalid unit representation */ |
} else { /* invalid unit representation */ |
result = UNIT_FAIL; |
result = UNIT_INVALID_STUDENT2; |
} |
} |
} else { |
} else { |
result = UNIT_FAIL; |
result = UNIT_INVALID_STUDENT1; |
} |
} |
#ifdef UNIT_DBUG |
#ifdef UNIT_DBUG |
fclose(ufp); |
fclose(ufp); |
Line 911 u_copy_unit(Unit_t *a_p, Unit_t *b_p, do
|
Line 914 u_copy_unit(Unit_t *a_p, Unit_t *b_p, do
|
a_p->u_count++; |
a_p->u_count++; |
} else if( b_p->u_type == U_DERIVED) { |
} else if( b_p->u_type == U_DERIVED) { |
/* derived units but without any units elements (scalar) */ |
/* derived units but without any units elements (scalar) */ |
/* do nothing, ignore this units WE REALLY MEAN THIS DON'T DO THE NEXT LINE!*/ |
|
/*a_p->u_count++;*/ |
/*a_p->u_count++;*/ |
|
scale = pow(b_p->u_scale, exp_scale); |
|
a_p->u_scale = a_p->u_scale * scale; |
} else if( b_p->u_type == U_CONSTANT ) { |
} else if( b_p->u_type == U_CONSTANT ) { |
scale = pow(b_p->u_scale, exp_scale); |
scale = pow(b_p->u_scale, exp_scale); |
a_p->u_scale = a_p->u_scale * scale; |
a_p->u_scale = a_p->u_scale * scale; |
Line 1406 u_insert_derived(n_p,s_p,c_p,u_p)char *
|
Line 1410 u_insert_derived(n_p,s_p,c_p,u_p)char *
|
strcpy(new_p->u_comment,c_p); |
strcpy(new_p->u_comment,c_p); |
|
|
simplify_unit(new_p); |
simplify_unit(new_p); |
/* |
#ifdef UNIT_DBUG |
printf("Derived Unit:%s\n",new_p->u_name); |
printf("Derived Unit:%s\n",new_p->u_name); |
print_unit_t(new_p); |
print_unit_t(new_p); |
*/ |
#endif |
if (c_result < 0 ) { |
if (c_result < 0 ) { |
new_p->u_left = t->u_left; new_p->u_right = t; |
new_p->u_left = t->u_left; new_p->u_right = t; |
t->u_left = NULL; |
t->u_left = NULL; |
Line 1742 p_new_unit(Unit_t *left_p, Unit_t *right
|
Line 1746 p_new_unit(Unit_t *left_p, Unit_t *right
|
err_code = 3; |
err_code = 3; |
cu_p->u_type = U_UNKNOWN; |
cu_p->u_type = U_UNKNOWN; |
} |
} |
} else { |
} else { /* symb_str is not in <prefix><units> form */ |
/* printf("<<%s>>", symb_str); */ |
/* printf("<<%s>>", symb_str); */ |
err_code = 2; |
err_code = 2; |
cu_p->u_type = U_UNKNOWN; |
cu_p->u_type = U_UNKNOWN; |
} |
} |
} else {/* len == 1 */ |
} else {/* len == 1 */ |
/* printf(" not found\n"); */ |
/* printf(" not found in symbol tree \n"); */ |
err_code = 1; |
err_code = 1; |
cu_p->u_type = U_UNKNOWN; |
cu_p->u_type = U_UNKNOWN; |
} |
} |
} |
} |
} else { |
} else { /* why would we have a length less than zero symb_str ? */ |
err_code = 4; |
err_code = 4; |
} |
} |
|
|