private static boolean number(Text t, DataType requiredType, List<Object> valueList) { // posNumber // : cardinality // | '0b' BinaryDigits+ [zZ]? // | '0x' HexDigit+ [zZ]? // | '-'? Pint? ( '.' Digit+ ) ('e' Pint) [fF] // | '-'? Pint [zZfF]? // ; final boolean result; assert !t.isEof() : "Should have been checked by caller"; if (binary(t, valueList, requiredType) || hex(t, valueList, requiredType)) { // ?todo I could allow negatives here // ( binary | hex | '0' ) result = true; } else { // ( Int DecPart | Int | DecPart ) ( 'e' Int )? [zZfF]? final int start = t.cursor(); if ((t.consumeInt() && (decPart(t) || true) && (exponent(t) || true)) || (t.consume('-') || true) && decPart(t) && (exponent(t) || true)) { final String string = t.getString(start); final Object value = deriveType(string, requiredType, t, 10); valueList.add(value); result = true; } else { result = false; } } return result; }
private static boolean exponent(Text t) { final boolean result; // 'e' Int final int save = t.cursor(); if (t.consume('e') && t.consumeInt()) { result = true; } else { t.setCursor(save); result = false; } return result; }