private void checkWithException(String expression) { int level = 0; for (int i = 0; i < expression.length(); ++i) { char c = expression.charAt(i); if (c == '(') level++; if (c == ')') level--; } if (level != 0) throw new BracketsError(expression); } }
public boolean canParse(String expression) { char[] expressionChars = expression.toCharArray(); int level = 0; boolean inBrackets = false; for (char c : expressionChars) { if ((c == '+' || c == '*' || c == '-' || c == '/') && !inBrackets) return false; if (c == '[') { inBrackets = true; level++; } if (c == ']') level--; if (level == 0) inBrackets = false; if (level < 0) throw new BracketsError(expression); } return true; }
protected final boolean canParse(String expression) { char[] expressionChars = expression.toCharArray(); int level = 0; char c; for (int i = 0; i < expressionChars.length; ++i) { c = expressionChars[i]; if (c == '(' || c == '[') level++; if (c == ')' || c == ']') level--; if (level < 0) throw new BracketsError(); if (c == operatorSymbol && level == 0 && testOperator(expressionChars, i)) return true; if (c == operatorInverseSymbol && level == 0) return true; } return false; }
@Override public ParseToken parseToken(String expression, Parser parser) { if (expression.charAt(0) == '(') if (expression.charAt(expression.length() - 1) != ')') checkWithException(expression); else { int level = 0; for (int i = 0; i < expression.length(); ++i) { char c = expression.charAt(i); if (c == '(') level++; if (level < 1) return null; if (c == ')') level--; } if (level != 0) throw new BracketsError(); return parser.parse(expression.substring(1, expression.length() - 1)); } return null; }
level--; if (level < 0) throw new BracketsError();
level--; if (level < 0) throw new BracketsError(expression); if (c == ' ' && indicesLevel == 0) continue;
} else if (c == '^') { if (level != 0) throw new BracketsError(); if (endIndex != 0) parse(expression.substring(beginIndex + 1, endIndex), indices, state); throw new BracketsError(); if (beginIndex != endIndex) parse(expression.substring(beginIndex + 1, endIndex), indices, state);