This is a fist time I learn about parser and Rust, so I decide to write a simple calculator using the Recursive Descent algorithm with the following grammar:
E --> T {( "+" | "-" ) T}
T --> F {( "*" | "/" ) F}
F --> P ["^" F]
P --> v | "(" E ")" | "-" T | Function "(" {E[,]} ")"
This grammar is base on this awesome guide. I also extends it to support function.
cargo run "1+2*sqrt(4)"
- Support the following operators:
+,-,*,/,^. - Built in functions:
-
sin -
cos -
tan -
sqrt -
abs -
max:max(arg1,arg2,...) -
min:min(arg1,arg2,...)
-
- Built in constants:
-
PI -
e
-
- Support for variables.
- Better error handling.