protected static function eatValue($input)
{
$input = ltrim($input, ' ');
$c = @$input[0];
# avoid Notice: Uninitialized string offset: 0
if (!strlen($input) || $c === ',') {
return [null, $input];
} elseif ($c === '"') {
return self::eatString(substr($input, 1));
} elseif ($c === '#') {
return self::eatRID(substr($input, 1));
} elseif ($c === '[') {
return self::eatArray(substr($input, 1));
} elseif ($c === '<') {
return self::eatSet(substr($input, 1));
} elseif ($c === '{') {
return self::eatMap(substr($input, 1));
} elseif ($c === '(') {
return self::eatRecord(substr($input, 1));
} elseif ($c === '%') {
return self::eatBag(substr($input, 1));
} elseif ($c === '_') {
return self::eatBinary(substr($input, 1));
} elseif ($c === '-' || is_numeric($c)) {
return self::eatNumber($input);
} elseif ($c === 'n' && substr($input, 0, 4) === 'null') {
return [null, substr($input, 4)];
} elseif ($c === 't' && substr($input, 0, 4) === 'true') {
return [true, substr($input, 4)];
} elseif ($c === 'f' && substr($input, 0, 5) === 'false') {
return [false, substr($input, 5)];
} else {
return [null, $input];
}
}