|
|
@@ -135,7 +135,7 @@ var dComp = function (v) {
|
|
|
%lex
|
|
|
%%
|
|
|
|
|
|
-\s+ /* skip whitespace */
|
|
|
+\s+ /* skip whitespace */
|
|
|
[0-9]+("."[0-9]+)?("e""-"?"+"?[0-9]+)?\b return 'NUMBER';
|
|
|
"*" return '*';
|
|
|
"×" return '*';
|
|
|
@@ -166,18 +166,14 @@ var dComp = function (v) {
|
|
|
/lex
|
|
|
|
|
|
/* operator associations and precedence */
|
|
|
-/* 优先级越小在上 */
|
|
|
-
|
|
|
%left '+' '-'
|
|
|
-%left '*' '/'
|
|
|
+%left 'sin' 'cos' 'tan' 'asin' 'acos' 'atan' 'ln' 'log'
|
|
|
+%left 'SQRT' '*' '/'
|
|
|
%right '%'
|
|
|
%left '^'
|
|
|
-%left '!'
|
|
|
-%left 'sin' 'cos' 'tan' 'asin' 'acos' 'atan' 'ln' 'log' 'SQRT'
|
|
|
-%right '(' ')'
|
|
|
+%right '!'
|
|
|
%left UMINUS
|
|
|
%token INVALID
|
|
|
-
|
|
|
%start expressions
|
|
|
|
|
|
%% /* language grammar */
|
|
|
@@ -188,7 +184,7 @@ expressions
|
|
|
;
|
|
|
|
|
|
e
|
|
|
- : '-' e %prec UMINUS
|
|
|
+ : '-' e %prec UMINUS
|
|
|
{$$ = -$2;}
|
|
|
| NUMBER
|
|
|
{$$ = Number(yytext);}
|
|
|
@@ -199,7 +195,7 @@ e
|
|
|
| e '%'
|
|
|
{$$ = $1 / 100;}
|
|
|
| e '!'
|
|
|
- {{$$ = fac($1);}}
|
|
|
+ {$$ = fac($1);}
|
|
|
| e '^' e
|
|
|
{$$ = Math.pow($1, $3);}
|
|
|
| e '*' e
|
|
|
@@ -218,8 +214,6 @@ e
|
|
|
{$$ = $2 ** 0.5}
|
|
|
| e 'SQRT' e
|
|
|
{$$ = ($3) ** (1 / $1);}
|
|
|
- | 'isDeg' e
|
|
|
- {$$ = setIsDeg($2);}
|
|
|
| 'sin' e
|
|
|
{$$ = sin($2);}
|
|
|
| 'cos' e
|
|
|
@@ -234,5 +228,7 @@ e
|
|
|
{$$ = atan($2);}
|
|
|
| '(' e ')'
|
|
|
{$$ = $2;}
|
|
|
+ | 'isDeg' e
|
|
|
+ {$$ = setIsDeg($2);}
|
|
|
;
|
|
|
|