Problems reported:

parser/coverage/string3:2:10: Expected ';' after this.
  return """
         ^^^^...

parser/coverage/string3:2:10: String starting with """ must end with """.
  return """
         ^^^^...

parser/coverage/string3: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({)
        beginReturnStatement(return)
          beginLiteralString("""
æbler""")
          endLiteralString(0, """
æbler""")
          handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {expected: ;}], """
æbler""", """
æbler""")
        endReturnStatement(true, return, ;)
      endBlockFunctionBody(1, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
  handleErrorToken(UnterminatedString("""))
  handleRecoverableError(Message[Template(UnterminatedString), String starting with """ must end with """., null, {openQuote: """, expectedCloseQuote: """}], UnterminatedString("""), UnterminatedString("""))
  handleErrorToken(UnmatchedToken({))
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '{'., null, {expected: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
endCompilationUnit(1, )
