Hacker News new | ask | show | jobs
by olamide203 1397 days ago
hyoka uses a full recursive descent parser to parse expressions into AST, then evaluates to get the final result. it is very secure for math expressions unlike the eval function which can run javascript code. you can try out a demo here https://codesandbox.io/s/naughty-chatterjee-kr3bsc
2 comments

I would show examples in README on use of it along with string interpolation, as it's not too useful with only constants.

Eg.

  const a = 3;
  const b = 2;
  const expression = new Expression(`${a}*${b}(6/3(5--2))`);
  const result = expression.evaluate();
  document.getElementById("app").innerHTML = `a*b( 6 / 3( 5 - - 2 ) )= ${result}`;
Edit: formating
Nice tip, i'm planning to add an identifier node class so that you can pass a scope with the values to be used during evaluation. Eg.

   const a = 2;
   const b = 6;
   const c = 3
   const expression = new Expression('a \ b * c')
   const result = expression.scope({a, b, c}).evaluate();
   document.getElementById("app").innerHTML `${a} \ ${b} * 
   ${c}= ${result}`
[Add an empty line and then two spaces before each line to trigger the "code" mode.]
Very welcome solution. String interpolation makes it possible, but it's bad DX.
yeah having to type ${} everywhere makes the code a little bit messy.
Nice!

I was trying to change the expression, but I need to change it twice. At the top where `expression` is defined and at the bottom to show it in the html. Is it possible to "see" what is inside an Expression object?

you can log it to the console if you want to see the Abstract syntax tree of an Expression object