Пример #1
0
}), "ESCAPED_BACKSLASH" => new StringParser("\\\\", function ($string) {
    return substr($string, 1, 1);
}), "ESCAPED_SLASH" => new StringParser("\\/", function ($string) {
    return substr($string, 1, 1);
}), "ESCAPED_B" => new StringParser("\\b", function ($string) {
    return "";
}), "ESCAPED_F" => new StringParser("\\f", function ($string) {
    return "\f";
}), "ESCAPED_N" => new StringParser("\\n", function ($string) {
    return "\n";
}), "ESCAPED_R" => new StringParser("\\r", function ($string) {
    return "\r";
}), "ESCAPED_T" => new StringParser("\\t", function ($string) {
    return "\t";
}), "ESCAPED_UTF8" => new RegexParser("#^\\\\u[0-9a-fA-F]{4}#", function ($match) {
    return Utf8Parser::getBytes(hexdec(substr($match, 2, 4)));
})));
// if executing this file directly, run unit tests
if (__FILE__ !== $_SERVER["SCRIPT_FILENAME"]) {
    return;
}
$start = microtime(true);
$parseTree = $jsonGrammar->parse(" { \"string\" : true, \"\\\"\" : false, \"\\u9874asdh\" : [ null, { }, -9488.44E+093 ] } ");
print "Parsing completed in " . (microtime(true) - $start) . " seconds\n";
var_dump(true);
// for successful parsing
// print_r($parseTree);
var_dump(count($parseTree) === 3);
var_dump($parseTree["string"] === true);
var_dump($parseTree["\""] === false);
var_dump($parseTree["顴asdh"] === array(null, array(), -9.488439999999999E+96));
Пример #2
0
var_dump(Utf8Parser::getBytes(0x10000) === "𐀀");
# 4-byte character
var_dump(Utf8Parser::getBytes(0x20000) === "𠀀");
# 4-byte character
var_dump(Utf8Parser::getBytes(0x4b042) === "񋁂");
# 4-byte character "񋁂"
try {
    # invalid character in XML (not in any safe range)
    Utf8Parser::getBytes(0xd800);
    var_dump(false);
} catch (Exception $e) {
    var_dump(true);
}
try {
    # code point too large, cannot be encoded
    Utf8Parser::getBytes(0xffffff);
    var_dump(false);
} catch (Exception $e) {
    var_dump(true);
}
print "7A\n";
$parser = new LazyAltParser(array(new StringParser("abc"), new StringParser("ab"), new StringParser("a")));
try {
    $parser->match("0", 1);
    var_dump(false);
} catch (ParseFailureException $e) {
    var_dump(true);
}
var_dump($parser->match("0a", 1) === array("j" => 2, "value" => "a"));
var_dump($parser->match("0ab", 1) === array("j" => 3, "value" => "ab"));
var_dump($parser->match("0abc", 1) === array("j" => 4, "value" => "abc"));