generated/Parser/ParserImpl.php
protected function parseExpression()
    {
        $a = [];

        if ($this->type !== 'T_DELIM_START') { return $this; }
        $a[] = $this->consume();

        if (null === ($parsed = yield 'Statement')) { $this->error("Error parsing \"Expression\" on line %s:"); }
        $a[] = $parsed;

        // ( '|' Filter )*
        $a2 = [];
        while (true) {
            $o2 = $this->offset;
            $c2 = [];

            if ($this->type !== '|') { $o2 = null; break; }
            $c2[] = $this->consume();

            if (null === ($parsed = yield 'Filter')) { $this->error("Error parsing \"Expression\" on line %s:"); }
            $c2[] = $parsed;

            $a2[] = $c2;
        }

        $a[] = $a2;

        if ($this->type !== 'T_DELIM_END') { $this->error("Error parsing \"Expression\" on line %s:"); }
        $a[] = $this->consume();

        return ($this->action)('Expression', 'parseExpression', $a);
    }
protected function parseExpression()
    {
        $a = [];

        if ($this->type !== 'T_DELIM_START') { return $this; }
        $a[] = $this->consume();

        if (null === ($parsed = yield 'Statement')) { $this->error("Error parsing \"Expression\" on line %s:"); }
        $a[] = $parsed;

        // ( '|' Filter )*
        $a2 = [];
        while (true) {
            $o2 = $this->offset;
            $c2 = [];

            if ($this->type !== '|') { $o2 = null; break; }
            $c2[] = $this->consume();

            if (null === ($parsed = yield 'Filter')) { $this->error("Error parsing \"Expression\" on line %s:"); }
            $c2[] = $parsed;

            $a2[] = $c2;
        }

        $a[] = $a2;

        if ($this->type !== 'T_DELIM_END') { $this->error("Error parsing \"Expression\" on line %s:"); }
        $a[] = $this->consume();

        return ($this->action)('Expression', 'parseExpression', $a);
    }
Expression ::= T_DELIM_START Statement ( '|' Filter )* T_DELIM_END