🐛 Fix case like y=80%*x painting wrongly

This commit is contained in:
2025-09-14 14:46:09 +08:00
parent d26c29613b
commit d652df407f
4 changed files with 52 additions and 14 deletions

View File

@@ -43,23 +43,27 @@ class Parser {
Expr parseMul() {
var expr = parsePow();
skipSpaces();
while (!isEnd && (current == '*' || current == '/')) {
var op = current;
eat();
var right = parsePow();
if (op == '*') {
expr = MulExpr(expr, right);
while (!isEnd &&
(current == '*' ||
current == '/' ||
current == '%' ||
RegExp(r'[a-zA-Z\d]').hasMatch(current) ||
current == '(')) {
if (current == '*' || current == '/') {
var op = current;
eat();
var right = parsePow();
expr = op == '*' ? MulExpr(expr, right) : DivExpr(expr, right);
} else if (current == '%') {
eat();
expr = PercentExpr(expr);
} else {
expr = DivExpr(expr, right);
// implicit multiplication
var right = parsePow();
expr = MulExpr(expr, right);
}
skipSpaces();
}
// Handle percentage operator
skipSpaces();
if (!isEnd && current == '%') {
eat();
expr = PercentExpr(expr);
}
return expr;
}