Why to write this engine?
Because I coded a super calculator last year which is in Appstore, the super calculator is based on one more completed parser.
This parser is just a simplified prototype. It calculates more than fraction, normal expression as well, so you can expand this library to normal calculation,detail illustration will be added in the near future.
Parser Theory : Gradient descent
Parser Process:
For example:1+2*(3-4) parsing process:
-
Tokenizer: Tokens:1, +, 2, *, (, 3, -, 4, )
-
Interpreter: Indicate the vague tokens,such as '+' means add or positive ,so is 'negative'.
-
Parser
AST(抽象树):
In fact, the math expression is parsed into one custom nested cluster in code,and then resolve each level group sub expression from inside to outside.
Tips:
-
adjust number ,which is regarded as fraction through process,such as
2 convert to 2/1 ; 0.2 convert to 2/10; 0.9998 convert to 9998/10000
-
because of object-c without function operator,we need convert operators,such as @"+", to function name,such as "add"
Todo :
1 processing,
2 demo,
3 more test