function collectLevelInfo()
{
$level = 0;
$this->levels = [];
$this->tokensByLevel = [];
$this->levelBeginnings = [];
$this->levelEndings = [];
$this->tokensByLevelAndType = [];
foreach ($this->tokens as $offset => $token) {
$type = $token[self::TYPE_OFFSET];
switch ($type) {
case '(':
case '[':
case '{':
case T_CURLY_OPEN:
case T_DOLLAR_OPEN_CURLY_BRACES:
$level++;
Utils\appendUnder($this->levelBeginnings, $level, $offset);
break;
case ')':
case ']':
case '}':
Utils\appendUnder($this->levelEndings, $level, $offset);
$level--;
}
$this->levels[$offset] = $level;
Utils\appendUnder($this->tokensByLevel, $level, $offset);
Utils\appendUnder($this->tokensByLevelAndType, [$level, $type], $offset);
}
Utils\appendUnder($this->levelBeginnings, 0, -1);
Utils\appendUnder($this->levelEndings, 0, count($this->tokens));
}