Problems reported:

parser/coverage/interpolated_eof:2:13: Expected ';' after this.
  print("${(
            ^...

WARNING: Reporting at eof --- see below for details.

parser/coverage/interpolated_eof:2:12: Can't find ')' to match '('.
  print("${(
           ^

parser/coverage/interpolated_eof:2:10: Can't find '}' to match '${'.
  print("${(
         ^

parser/coverage/interpolated_eof:2:9: String starting with " must end with ".
  print("${(
        ^^^^

parser/coverage/interpolated_eof:2:8: Can't find ')' to match '('.
  print("${(
       ^

parser/coverage/interpolated_eof:1:12: Can't find '}' to match '{'.
void foo() {
           ^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(UnmatchedToken({), null, null)
      handleVoidKeyword(void)
      handleIdentifier(foo, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(print, expression)
        handleNoTypeArguments(()
        beginArguments(()
          beginLiteralString(")
            beginParenthesizedExpressionOrRecordLiteral(()
            endRecordLiteral((, 0, null)
            handleInterpolationExpression(${, })
            handleStringPart(")
          endLiteralString(1, ))
        endArguments(1, (, ))
        handleSend(print, ))
        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], , )
        // WARNING: Reporting at eof for .
        handleExpressionStatement(print, ;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
  handleErrorToken(UnmatchedToken(())
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find ')' to match '('., null, {string: ), lexeme: (}], UnmatchedToken((), UnmatchedToken(())
  handleErrorToken(UnmatchedToken(${))
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '${'., null, {string: }, lexeme: ${}], UnmatchedToken(${), UnmatchedToken(${))
  handleErrorToken(UnterminatedString("))
  handleRecoverableError(Message[Template(UnterminatedString), String starting with " must end with "., null, {string: ", string2: "}], UnterminatedString("), UnterminatedString("))
  handleErrorToken(UnmatchedToken(())
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find ')' to match '('., null, {string: ), lexeme: (}], UnmatchedToken((), UnmatchedToken(())
  handleErrorToken(UnmatchedToken({))
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '{'., null, {string: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
endCompilationUnit(1, )
