5 ms·
Hyoka
- olamide203 4y agoI created a lightweight and precise math expression parser and evaluator for JavaScript and TypeScript. it can handle complex arithmetic expressions
- gus_massa 4y agoDo you have an online demo, where I can write an expression in a text box and get the result? What are the security implications of this? Does the code run in the server or my computer? Does it only recognize math functions, or it can also run "alert"?
- olamide203 4y agohyoka 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 https://codesandbox.io/s/naughty-chatterjee-kr3bsc
- gus_massa 4y agoNice! 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?
- olamide203 4y agoyou can log it to the console if you want to see the Abstract syntax tree of an Expression object
- fuzzythinker 4y agoI 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
- olamide203 4y agoNice 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}`
- gus_massa 4y ago[Add an empty line and then two spaces before each line to trigger the "code" mode.]
- fuzzythinker 4y agoVery welcome solution. String interpolation makes it possible, but it's bad DX.
- olamide203 4y agoyeah having to type ${} everywhere makes the code a little bit messy.
- olamide203 4y agoIt can also be used in the browser as well as node.js or any other javascript runtime environment
- jamal-kumar 4y agoDamn that's pretty sweet, I've had to pretty much just make anything that needs extreme decimal precision work out on server side. Cool to know someone came up with a way to do it on frontend too, thanks!
- olamide203 4y agoI'm glad you find it useful. thanks for the feedback
- idmontie 4y agoDoes the name have any special meaning?
- kitten_mittens_ 4y agohttps://en.wikipedia.org/wiki/Hyouka https://en.wikipedia.org/wiki/Hyouka came to mind, but it has a long vowel (ou) the post is missing.
- ryzvonusef 4y agoI Scream
- alexlur 4y agoIt means “evaluate”, but in the sense of evaluating a piece of artwork, so my guess is that the author justed ran the word through Google Translate.
- olamide203 4y agoyou got me there :)
- bluehex 4y agoAccording to this[1] okwave thread (in Japanese) it is used in mathematics literature but generally as a direct translation from English. There is an argument there, saying that the nuance of Hyouka in Japanese mathematics is more appropriate in cases where a specific value is harder to determine and as such is used more often for things like "inequality evaluation". [1]: https://okwave.jp/qa/q5812331.html https://okwave.jp/qa/q5812331.html