Problems reported:

parser/nnbd/issue_47020:3:12: Expected ';' after this.
    print(1)
           ^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null, null)
      handleVoidKeyword(void)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(Function)
        endMetadataStar(0)
        handleIdentifier(Function, typeReference)
        handleNoTypeArguments(?)
        handleType(Function, ?)
        beginVariablesDeclaration(f, null, null)
          handleIdentifier(f, localVariableDeclaration)
          beginInitializedIdentifier(f)
            beginVariableInitializer(=)
              handleNoTypeVariables(()
              beginFunctionExpression(()
                beginFormalParameters((, MemberKind.Local)
                endFormalParameters(0, (, ), MemberKind.Local)
                handleAsyncModifier(null, null)
                beginBlockFunctionBody({)
                  handleIdentifier(print, expression)
                  handleNoTypeArguments(()
                  beginArguments(()
                    handleLiteralInt(1)
                  endArguments(1, (, ))
                  handleSend(print, })
                  handleRecoverableError(Message[ExpectedAfterButGot, Expected ';' after this., null, {string: ;}], ), ))
                  handleExpressionStatement(print, ;)
                endBlockFunctionBody(1, {, })
              endFunctionExpression((, })
            endVariableInitializer(=)
          endInitializedIdentifier(f)
        endVariablesDeclaration(1, ;)
        handleIdentifier(f, expression)
        handleNoTypeArguments(()
        beginArguments(()
        endArguments(0, (, ))
        handleSend(f, ;)
        handleExpressionStatement(f, ;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration(})
endCompilationUnit(1, )
