protected function needDefined()
    {
        if ($this->defined) return;
        $this->defined = true;

        $name = $pattern = $note = null;

        if (preg_match(PARSER_PATTERN, $this->definition, $matches)) {
            $body = $matches[1];
            $name = $matches[2];
            $note = $matches[3];

            $pos = strpos($name, '|');
            if ($pos !== false) {
                $pattern = $this->assertPattern(trim(substr($name, $pos + 1)));

                $name = trim(substr($name, 0, $pos));
            }
        } else {
            $body = $this->definition;
        }

        $this->define($body, $name, $pattern, $note);
    }