projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
exp: fix shift/reduce conflict complaints
[fio.git]
/
exp
/
expression-parser.y
diff --git
a/exp/expression-parser.y
b/exp/expression-parser.y
index fa19a51ad68268571d96eb723de2b15d0dafac86..6ab6408874b829d2dffbf0ed6fa82ebc9558414d 100644
(file)
--- a/
exp/expression-parser.y
+++ b/
exp/expression-parser.y
@@
-57,6
+57,7
@@
extern void yyrestart(FILE *file);
%token <v> BYE
%token <v> SUFFIX
%left '-' '+'
%token <v> BYE
%token <v> SUFFIX
%left '-' '+'
+%right SUFFIX
%left '*' '/'
%right '^'
%left '%'
%left '*' '/'
%right '^'
%left '%'
@@
-138,8
+139,10
@@
expression: expression '+' expression {
yyerror(0, 0, 0, 0, "modulo on floats");
if ($3.ival == 0)
yyerror(0, 0, 0, 0, "divide by zero");
yyerror(0, 0, 0, 0, "modulo on floats");
if ($3.ival == 0)
yyerror(0, 0, 0, 0, "divide by zero");
- else
+ else
{
$$.ival = $1.ival % $3.ival;
$$.ival = $1.ival % $3.ival;
+ $$.dval = $$.ival;
+ }
$$.has_error = $1.has_error || $3.has_error;
}
| expression '^' expression {
$$.has_error = $1.has_error || $3.has_error;
}
| expression '^' expression {
@@
-161,8
+164,9
@@
expression: expression '+' expression {
tmp = 1.0;
$$.has_error = 1;
} else {
tmp = 1.0;
$$.has_error = 1;
} else {
- tmp = pow((double) $1.ival,
- (double) $3.ival);
+ double x = (double) $1.ival;
+ double y = (double) $3.ival;
+ tmp = pow(x, y);
}
$$.ival = (long long) tmp;
}
}
$$.ival = (long long) tmp;
}