protected function parseAttributeExpression($node)
{
$token = $this->stream->getCurrentToken();
if ($this->stream->consume(Token::OPERATOR, '.')) {
$attr = new Expression\ConstantExpression($this->parseName()->getValue(), $token->getLine());
} else {
$this->stream->expect(Token::OPERATOR, '[');
$attr = $this->parseExpression();
$this->stream->expect(Token::OPERATOR, ']');
}
$args = false;
if ($this->stream->consume(Token::OPERATOR, '(')) {
$args = array();
while (!$this->stream->test(Token::OPERATOR, ')')) {
if (count($args)) {
$this->stream->expect(Token::OPERATOR, ',');
}
$args[] = $this->parseExpression();
}
$this->stream->expect(Token::OPERATOR, ')');
}
return new Expression\AttributeExpression($node, $attr, $args, $token->getLine());
}