{ "comment": "Parses end executes mathematical expressions.", "lex": { "rules": [ ["\\s+", "/* skip whitespace */"], ["[0-9]+(?:\\.[0-9]+)?\\b", "return 'NUMBER';"], ["\\*", "return '*';"], ["\\/", "return '/';"], ["-", "return '-';"], ["\\+", "return '+';"], ["\\^", "return '^';"], ["\\(", "return '(';"], ["\\)", "return ')';"], ["PI\\b", "return 'PI';"], ["E\\b", "return 'E';"], ["$", "return 'EOF';"] ] }, "operators": [ ["left", "+", "-"], ["left", "*", "/"], ["left", "^"], ["left", "UMINUS"] ], "bnf": { "S" :[[ "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", "$$ = -$2;", {"prec": "UMINUS"} ], [ "( e )", "$$ = $2;" ], [ "NUMBER", "$$ = Number(yytext);" ], [ "E", "$$ = Math.E;" ], [ "PI", "$$ = Math.PI;" ]] } }