Problems reported:

parser/patterns/skipOuterPattern_eof:2:3: Expected ';' after this.
  int var = 0;
  ^^^

parser/patterns/skipOuterPattern_eof:2:11: Expected an identifier, but got '='.
  int var = 0;
          ^

parser/patterns/skipOuterPattern_eof:1:8: Can't find '}' to match '{'.
main() {
       ^

beginCompilationUnit(main)
  beginMetadataStar(main)
  endMetadataStar(0)
  beginTopLevelMember(main)
    beginTopLevelMethod(UnmatchedToken({), null, null)
      handleNoType(UnmatchedToken({))
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        handleIdentifier(int, expression)
        handleNoTypeArguments(var)
        handleNoArguments(var)
        handleSend(int, int)
        handleRecoverableError(Message[Template(ExpectedAfterButGot), Expected ';' after this., null, {string: ;}], int, int)
        handleExpressionStatement(int, ;)
        beginMetadataStar(var)
        endMetadataStar(0)
        handleNoType(var)
        beginVariablesDeclaration(=, null, var)
          handleRecoverableError(Message[Template(ExpectedIdentifier), Expected an identifier, but got '='., Try inserting an identifier before '='., {lexeme: =}], =, =)
          handleIdentifier(, localVariableDeclaration)
          beginInitializedIdentifier()
            beginVariableInitializer(=)
              handleLiteralInt(0)
            endVariableInitializer(=)
          endInitializedIdentifier()
        endVariablesDeclaration(1, ;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(main, null, })
  endTopLevelDeclaration(})
  handleErrorToken(UnmatchedToken({))
  handleRecoverableError(Message[Template(UnmatchedToken), Can't find '}' to match '{'., null, {string: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
endCompilationUnit(1, )
