git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5000 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
60 lines
2.3 KiB
Plaintext
60 lines
2.3 KiB
Plaintext
/* Parser for the FreeCAD Units language */
|
|
/* (c) 2010 Juergen Riegel LGPL */
|
|
|
|
|
|
/* Represents the many different ways we can access our data */
|
|
%{
|
|
#define YYSTYPE double
|
|
#define yyparse Unit_yyparse
|
|
#define yyerror Unit_yyerror
|
|
%}
|
|
|
|
/* Bison declarations. */
|
|
%token ACOS ASIN ATAN ATAN2 COS EXP ABS MOD LOG LOG10 POW SIN SINH TAN TANH SQRT;
|
|
%token UNIT NUM
|
|
%left '-' '+'
|
|
%left '*' '/'
|
|
%left NEG /* negation--unary minus */
|
|
%right '^' /* exponentiation */
|
|
|
|
|
|
|
|
%start input
|
|
|
|
%%
|
|
|
|
input: exp { ScanResult = $1 ; }
|
|
;
|
|
|
|
exp: NUM { $$ = $1; }
|
|
| UNIT { $$ = $1;UU=true; }
|
|
| NUM UNIT { $$ = $1*$2;UU=true; }
|
|
| exp '+' exp { $$ = $1 + $3; }
|
|
| exp '-' exp { $$ = $1 - $3; }
|
|
| exp '*' exp { $$ = $1 * $3; }
|
|
| exp '/' exp { $$ = $1 / $3; }
|
|
| '-' exp %prec NEG { $$ = -$2; }
|
|
| exp '^' exp { $$ = pow ($1, $3);}
|
|
| '(' exp ')' { $$ = $2; }
|
|
| ACOS '(' exp ')' { $$ = acos($3); }
|
|
| ASIN '(' exp ')' { $$ = asin($3); }
|
|
| ATAN '(' exp ')' { $$ = atan($3); }
|
|
| ATAN2 '(' exp ',' exp ')' { $$ = atan2($3,$5);}
|
|
| ABS '(' exp ')' { $$ = fabs($3); }
|
|
| EXP '(' exp ')' { $$ = exp($3); }
|
|
| MOD '(' exp ',' exp ')' { $$ = fmod($3,$5); }
|
|
| LOG '(' exp ')' { $$ = log($3); }
|
|
| LOG10 '(' exp ')' { $$ = log10($3); }
|
|
| POW '(' exp ',' exp ')' { $$ = pow($3,$5); }
|
|
| SIN '(' exp ')' { $$ = sin($3); }
|
|
| SINH '(' exp ')' { $$ = sinh($3); }
|
|
| TAN '(' exp ')' { $$ = tan($3); }
|
|
| TANH '(' exp ')' { $$ = tanh($3); }
|
|
| SQRT '(' exp ')' { $$ = tanh($3); }
|
|
| COS '(' exp ')' { $$ = cos($3); }
|
|
| exp exp { $$ = $1 * $2; }
|
|
;
|
|
|
|
|
|
%%
|