不知道问题出在哪
只要是那种很复杂尤其是有 ^ 的算式 一定会出错@@
我的写法是
前面
%left '+' '-'
%left '*' '/'
%left '^'
%right UMINUS
后面
expr 部份
expr : expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| expr '^' expr { $$ = $1 ^ $3; }
| '(' expr ')' { $$ = $2; }
| '-' expr %prec UMINUS { $$ = - $2; }
| NUMBER { $$ = atoi(yytext); printf("this is number\n"); }
| a
;
(a是各种变量名)
这样哪里有写错啊@@
一直找不出来~"~
'^' 是 right associative operator
作者:
wens (æ–‡æ€)
2007-05-27 22:37:00说真的 我是google associativity 才知道的 XD还有啊... C 里面的 ^ 是 xor 喔XD
C里面是xor 但现在翻译的语言是pascal? 有点忘了ORZ那在这个语言里面^代表什么意思? 次方吗?
作者:
borisC (哀哀人)
2007-05-28 01:33:00次方的优先应该比负数优先吧??
负数应该比^优先 -2^2 = 4 != -4不过若是减号就刚好相反
作者:
usoko (time to face reality)
2007-05-28 11:56:00那如果是-2^(1/2)的话?@@
如果你要implement的话, 那就是1.414i