/**
* Parses the given token. If the value returned is a ListValue, its values will be merged to the list of parsed
* tokens instead of adding the value itself. Another check is done to ensure that successive string tokens are
* merged.
*
* @param array $parsedTokens
* @param TokenParserInterface $parser
* @param Token $token
*
* @return ValueInterface[]|string[] Parsed tokens
*/
private function parseToken(array $parsedTokens, TokenParserInterface $parser, Token $token) : array
{
$parsedToken = $parser->parse($token);
$parsedToken = $parsedToken instanceof NestedValue ? $parsedToken->getValue() : [$parsedToken];
foreach ($parsedToken as $value) {
$parsedTokens[] = $value;
}
return $parsedTokens;
}