Lua中,用户如何告诉io.read函数输入已经到达末尾了

我在学习Lua时看到有个马尔可夫链算法,代码如下

function allwords()
    local line = io.read()
    local pos = 1
    return function()
         while line do
             local s,e = string.find(line,"%w+",pos)
             if s then
                   pos = e+1
                   return string.sub(line,s,e)
             else
                  line = io.read()
                  pos = 1
             end
         end
         return nil
   end
end

-- 调用allwords函数,返回迭代器
for w in allwords() do
    insert(prefix(w1,w2),w)
    w1= w2; w2 = w
end

上面代码中在for循环中的insert和prefix函数都可以不用管,当成一个print输出
在for循环迭代器中调用allwords函数获取用户输入,但程序运行起来之后会一直卡在用户输入那里,一直在获取用户输入,请问应该输入什么字符才能结束输入,并运行后面的程序
io.read在读文件时,到了文件末尾读到nil会自动结束,但用户如何输入一个nil呢