public function __construct(EmailLexer
$lexer, CommentStrategy
$commentStrategy) { $this->lexer =
$lexer;
$this->commentStrategy =
$commentStrategy;
} public function parse(): Result
{ if ($this->lexer->current->
isA(EmailLexer::S_OPENPARENTHESIS
)) { $this->openedParenthesis++;
if ($this->
noClosingParenthesis()) { return new InvalidEmail(new UnclosedComment(),
$this->lexer->current->value
);
} } if ($this->lexer->current->
isA(EmailLexer::S_CLOSEPARENTHESIS
)) { return new InvalidEmail(new UnOpenedComment(),
$this->lexer->current->value
);
} $this->warnings
[WarningComment::CODE
] =
new WarningComment();
$moreTokens = true;
while ($this->commentStrategy->
exitCondition($this->lexer,
$this->openedParenthesis
) &&
$moreTokens) {