EBNF Mode (bracesMode setting = "javascript") /* description: Parses end executes mathematical expressions. */ /* lexical grammar */ %lex %% \s+ /* skip whitespace */ [0-9]+("."[0-9]+)?\b return 'NUMBER'; "*" return '*'; "/" return '/'; "-" return '-'; "+" return '+'; "^" return '^'; "(" return '('; ")" return ')'; "PI" return 'PI'; "E" return 'E'; <<EOF>> return 'EOF'; /lex /* operator associations and precedence */ %left '+' '-' %left '*' '/' %left '^' %left UMINUS %start expressions %% /* language grammar */ expressions : e EOF {print($1); return $1;} ; e : e '+' e {$$ = $1+$3;} | e '-' e {$$ = $1-$3;} | e '*' e {$$ = $1*$3;} | e '/' e {$$ = $1/$3;} | e '^' e {$$ = Math.pow($1, $3);} | '-' e %prec UMINUS {$$ = -$2;} | '(' e ')' {$$ = $2;} | NUMBER {$$ = Number(yytext);} | E {$$ = Math.E;} | PI {$$ = Math.PI;} ;x 1/* description: Parses end executes mathematical expressions. */23/* lexical grammar */4%lex56%%7\s+ /* skip whitespace */8[0-9]+("."[0-9]+)?\b return 'NUMBER';9"*" return '*';10"/" return '/';11"-" return '-';12"+" return '+';13"^" return '^';14"(" return '(';15")" return ')';16"PI" return 'PI';17"E" return 'E';18<<EOF>> return 'EOF';1920/lex2122/* operator associations and precedence */2324%left '+' '-'25%left '*' '/'26%left '^'27%left UMINUS2829%start expressions3031%% /* language grammar */3233expressions34: e EOF35{print($1); return $1;}36;3738e39: e '+' e40{$$ = $1+$3;}41| e '-' e42{$$ = $1-$3;}43| e '*' e44{$$ = $1*$3;}45| e '/' e46{$$ = $1/$3;}47| e '^' e48{$$ = Math.pow($1, $3);}49| '-' e %prec UMINUS50{$$ = -$2;}51| '(' e ')'52{$$ = $2;}53| NUMBER54{$$ = Number(yytext);}55| E56{$$ = Math.E;}57| PI58{$$ = Math.PI;}59; The EBNF Mode Created by Robert Plummer