private String nextVariableName(String expression, int start) { int length = expression.length(); if (length <= start) { FormSpecParser.fail(expression, start, "Missing variable name after variable char '$'."); } if (expression.charAt(start + 1) == '{') { int end = expression.indexOf('}', start + 1); if (end == -1) { FormSpecParser.fail(expression, start, "Missing closing brace '}' for variable."); } return expression.substring(start + 1, end + 1); } int end = start + 1; while ((end < length) && Character.isUnicodeIdentifierPart(expression.charAt(end))) { end++; } return expression.substring(start+1, end); }
private static String nextVariableName(String expression, int start) { int length = expression.length(); if (length <= start) { FormSpecParser.fail(expression, start, "Missing variable name after variable char '$'."); } if (expression.charAt(start + 1) == '{') { int end = expression.indexOf('}', start + 1); if (end == -1) { FormSpecParser.fail(expression, start, "Missing closing brace '}' for variable."); } return expression.substring(start + 1, end + 1); } int end = start + 1; while (end < length && Character.isUnicodeIdentifierPart(expression.charAt(end))) { end++; } return expression.substring(start+1, end); }
private Multiplier multiplier(String expression, int offset) { Matcher matcher = MULTIPLIER_PREFIX_PATTERN.matcher(expression); if (!matcher.find()) { return null; } if (matcher.start() > 0) { fail(offset + matcher.start(), "illegal multiplier position"); } Matcher digitMatcher = DIGIT_PATTERN.matcher(expression); if (!digitMatcher.find()) { return null; } String digitStr = expression.substring(0, digitMatcher.end()); int number = 0; try { number = Integer.parseInt(digitStr); } catch (NumberFormatException e) { fail(offset, e); } if (number <= 0) { fail(offset, "illegal 0 multiplier"); } String subexpression = expression.substring(matcher.end(),expression.length()-1); return new Multiplier(number, subexpression, matcher.end()); }
} else if (c == '(') { if (bracketLevel > 0) { fail(offset + i, "illegal '(' in [...]"); fail(offset + i, "illegal ')' in [...]"); fail(offset + i, "missing '('"); fail(offset + i, "too many '['"); bracketLevel--; if (bracketLevel < 0) { fail(offset + i, "missing '['"); fail(offset + length, "missing ')'"); fail(offset + length, "missing ']");
private Multiplier multiplier(String expression, int offset) { Matcher matcher = MULTIPLIER_PREFIX_PATTERN.matcher(expression); if (!matcher.find()) { return null; } if (matcher.start() > 0) { fail(offset + matcher.start(), "illegal multiplier position"); } Matcher digitMatcher = DIGIT_PATTERN.matcher(expression); if (!digitMatcher.find()) { return null; } String digitStr = expression.substring(0, digitMatcher.end()); int number = 0; try { number = Integer.parseInt(digitStr); } catch (NumberFormatException e) { fail(offset, e); } if (number <= 0) { fail(offset, "illegal 0 multiplier"); } String subexpression = expression.substring(matcher.end(),expression.length()-1); return new Multiplier(number, subexpression, matcher.end()); }
} else if (c == '(') { if (bracketLevel > 0) { fail(offset + i, "illegal '(' in [...]"); fail(offset + i, "illegal ')' in [...]"); fail(offset + i, "missing '('"); fail(offset + i, "too many '['"); bracketLevel--; if (bracketLevel < 0) { fail(offset + i, "missing '['"); fail(offset + length, "missing ')'"); fail(offset + length, "missing ']");