protected function parseArrayExpression()
{
$line = $this->stream->getCurrentToken()->getLine();
$elements = array();
do {
$token = $this->stream->getCurrentToken();
if ($token->test(Token::OPERATOR, ']')) {
break;
}
if ($token->test(Token::NAME) || $token->test(Token::STRING) || $token->test(Token::NUMBER)) {
if ($token->test(Token::NAME) || $token->test(Token::STRING)) {
$key = new Expression\ConstantExpression(strval($token->getValue()), $line);
} else {
if (preg_match('/\\./', $token->getValue())) {
$key = new Expression\ConstantExpression(floatval($token->getValue()), $line);
} else {
$key = new Expression\ConstantExpression(intval($token->getValue()), $line);
}
}
$this->stream->next();
if ($this->stream->consume(Token::OPERATOR, array('=>'))) {
$element = $this->parseExpression();
$elements[] = array($key, $element);
} else {
$elements[] = $key;
}
} else {
$elements[] = $this->parseExpression();
}
$this->stream->consume(Token::OPERATOR, ',');
} while (!$this->stream->test(Token::OPERATOR, ']'));
return new Expression\ArrayExpression($elements, $line);
}