$text = $tree->sub_results[1]->sub_results[0]->sub_results[1]->sub_results[0]->full_text($this->stream); switch ($tree->sub_results[1]->sub_results[0]->sub_results[1]->index) { case 1: // escaped $object->def($case, $text); break; case 2: // non escaped if (array_key_exists($text, $this->rules)) { $object = unserialize(serialize($this->rules[$text])); $object->__construct($omit, $non); } else { $object->def($case, $text); } break; } break; } return $object; } function Parse($rule, $stream) { $stream->position = 0; return $this->rules[$rule]->Parse($stream); } } $x = new Parser(); $x->CreateParser("z case cat | |"); $file = new Stream("CATabcdefghijklmn"); $result = $x->rules["z"]->Parse($file); echo $result->full_text($file);
<?php include 'parser_compiler.php'; $output = ''; $input = ''; $ok = true; if (isset($_POST['input'])) { $input = $_POST['input']; $p = new Parser(); $rules_text = <<<'RULESTEXT' ws omit list set \32\\13\\10\ | min 0 | | identifier list set case abcdefghijklmnopqrstuvwxyz | | | block and ws identifier ws { ws blocks ws } | | blocks list block min 0 | | RULESTEXT; $p->CreateParser($rules_text); $s = new Stream($input); $result = $p->rules["block"]->Parse($s); $output = $result->text($s); $ok = $result->ok; } ?> <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <style> #output { background-color: #EEE; width:1000px; border: 1px solid #A0A0A0;
header('Content-Type: text/plain'); include 'parser_compiler.php'; ini_set('html_errors', false); $rules = <<<RULES \t\tname list set case abcdefghijklmnopqrstuvwxyz | | | \t\tnumber list set 0123456789 | | | \t\tevery and omit / number | | \t\trange and number omit - number opt every | | | \t\tmember or range number | | \t\tgroup and omit ( list element del omit , | omit ) | | \t\telement and opt ~ | or group member | opt subarray | | | \t\tarray and opt name | omit : list element del omit , | | | \t\tsubarray and omit { array omit } | | RULES; $x = new Parser(); $x->CreateParser($rules); $file = new Stream("H:1{M:1,2,3},(5-20,23){M:4},~12-17/2"); $result = $x->rules["array"]->Parse($file); if ($result->ok) { //echo $result->text($file); $set = ParseSet($result, $file); print_r($set); } else { die('not matched'); } function ParseSet($tree, $file) { echo "\n"; // echo $tree->nodes{0}->text($file); $class = $tree->nodes[0]->text($file); switch ($class) {