Last updated:
0 purchases
mate
Documentation #
Create new mate instance.
final Mate mate = Mate();
copied to clipboard
Then you can calculate your "string" expression like:
final String expression = "-2 + 5 + 10 * 2";
final double? result = mate.calculate(expression); // --> 23
copied to clipboard
When we call calculate, it checks the validness of expression automatically.
So, we needn't to do some manual checking here. (If expression is invalid, then result would be null)
But in anyways, if you wanna check the validness of expression manually, you can do it, like:
final bool isInvalid = mate.isInvalidExp(exp);
copied to clipboard
Check official example of Mate
Check official UI implementation example of Mate
Explanation #
Mate's parsing/lexing algorithm looks like an interpreter.
It has early created constant chars, and uses lexer/parser to convert string expression to tokens list.
Token is a special object model, that has type and value. It is a char's, library implementation variant.
So as you guess, Mate's calculate function, takes string expression, parses it by using Lexer,
and by using lexer's parsing result, it calculates final result.
However, we pass lexer's parsing result to Expression's parts, and then we call calculate function from Expression to get final result.
Let's see an example:
Our expression is "2 + 2 * 5", that expression would be passed to Mate's calculate function.
Then, it'd call Lexer's parse function to convert expression to List<Token>.
Our expression's, parsed variant would look like:
[
Token(type: Type.number, value: Token.number(2)),
Token(type: Type.addition),
Token(type: Type.subExpression, value: [
Token(type: Type.number, value: Token.number(2)),
Token(type: Type.multiplication),
Token(type: Type.number, value: Token.number(5)),
])
]
copied to clipboard
Then, by using that result, Expression can calculate final result. --> 2 + (2*5) = 2 + 10 = 12.
Also parentheses are sub expressions, and by adding parentheses parsing support, sub expression also can include another sub expression inside it. (We call it nested expression).
Let's see an example of parentheses:
When our expression is ((20 / 4) * (20 / 5)) + 1, then parsed variant of it, would look like:
[
Token(type: Type.subExpression, value: [
Token(type: Type.subExpression, value: [
Token(type: Type.number, value: Token.number(20)),
Token(type: Type.division),
Token(type: Type.number, value: Token.number(4)),
]),
Token(type: Type.multiplication),
Token(type: Type.subExpression, value: [
Token(type: Type.number, value: Token.number(20)),
Token(type: Type.division),
Token(type: Type.number, value: Token.number(5)),
]),
]),
Token(type: Type.addition),
Token(type: Type.number, value: Token.number(1)),
]
copied to clipboard
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.