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, {expected: ;}], 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, {expected: }, lexeme: {}], UnmatchedToken({), UnmatchedToken({))
endCompilationUnit(1, )
