--- capa/capa51/pProj/capaFormula.y 2000/08/23 16:55:12 1.7 +++ capa/capa51/pProj/capaFormula.y 2000/10/06 20:54:45 1.8 @@ -105,6 +105,20 @@ f_expr : block block : block F_PLUS term { $$ = symbols_op($1, $3, ADD_op); } | block F_MINUS term { $$ = symbols_op($1, $3, SUB_op); } + | F_MINUS term { $$ = $2; + switch($2->s_type) { + case I_VAR: $$ = (Symbol *)capa_malloc(sizeof(Symbol),1); + $$->s_type = I_CONSTANT; + case I_CONSTANT: $$->s_int = - $2->s_int; break; + case R_VAR: $$ = (Symbol *)capa_malloc(sizeof(Symbol),1); + $$->s_type = R_CONSTANT; + case R_CONSTANT: $$->s_real = (-1.0)*($2->s_real); + break; + case S_VAR: + case S_CONSTANT: break; + default: break; + } + } | term { $$ = $1; } | F_ERROR { FormulaParseOK = 0; FMLDBUG_PR1("[F_ERROR]\n"); return 0;} | error { FormulaParseOK = 0; FMLDBUG_PR1("[ERROR]\n"); return 0; } @@ -154,20 +168,6 @@ basic_item : F_ID F_LPAR F_RPAR | V_ID { FMLDBUG_PR3("[V %s = %.16g] ",$1->s_name, $1->s_real); $$ = $1; } - | F_MINUS basic_item { $$ = $2; - switch($2->s_type) { - case I_VAR: $$ = (Symbol *)capa_malloc(sizeof(Symbol),1); - $$->s_type = I_CONSTANT; - case I_CONSTANT: $$->s_int = - $2->s_int; break; - case R_VAR: $$ = (Symbol *)capa_malloc(sizeof(Symbol),1); - $$->s_type = R_CONSTANT; - case R_CONSTANT: $$->s_real = (-1.0)*($2->s_real); - break; - case S_VAR: - case S_CONSTANT: break; - default: break; - } - } | F_PLUS basic_item { $$ = $2; } | F_NUMBER { FMLDBUG_PR2("[F %.16g] ",$1->s_real); $$ = $1;