private Token numberValue() {
        Token result;
        Number value;
        StringBuilder sb = new StringBuilder();
        char ch = currentChar();
        while (Character.isDigit(ch)) {
            sb.append(ch);
            ch = nextChar();
        }
        if (ch == '.') {
            sb.append(ch);
            ch = nextChar();
            while (Character.isDigit(ch)) {
                sb.append(ch);
                ch = nextChar();
            }
            value = Float.valueOf(sb.toString());
        } else {
            value = Integer.valueOf(sb.toString());
        }
        if (Character.isLetter(ch)) {
            throw new LexerException("Unexpected character in number literal : " + ch, row, col);
        }
        result = new Value(value);
        return result;
    }