function parse($input) { if (!self::$tokenizer) { self::$tokenizer = new NTokenizer(self::$patterns, 'mi'); } $input = str_replace("\r", '', $input); $input = strtr($input, "\t", ' '); $input = "\n" . $input . "\n"; self::$tokenizer->tokenize($input); $this->n = 0; $res = $this->_parse(); while (isset(self::$tokenizer->tokens[$this->n])) { if (self::$tokenizer->tokens[$this->n][0] === "\n") { $this->n++; } else { $this->error(); } } return $res; }