Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
-- The outer (text) interpreter - minimal version
-- (find-angg "LFORTH/README" "outer-mini")

p = {}
-- p.text = arg[1]
p.pos = 0
p.parseluare = function (errfunction, luare)
    local arr = pack(string.find(p.text, luare, p.pos+1))
    if arr[1] == nil then return errfunction(luare) end
    local startre = table.remove(arr, 1)
    local endre   = table.remove(arr, 1)
    if DBG then
      P(p.pos, luare, startre-p.pos-1, endre-startre+1, unpack(arr))
    end
    return startre-p.pos-1, endre-startre+1, unpack(arr)
  end

getword = function ()
  local _, nspaces = p.parseluare(nil, "^[ \t]*")
  p.pos = p.pos + nspaces
  local __, dpos, word = p.parseluare(nil, "^([^ \t\n]*)")
  if dpos == 0 then _, dpos, word = p.parseluare(nil, "^(\n?)") end
  p.pos = p.pos + dpos
  return word
end
getuntilluare = function (errfunction, luare)
  local arr = pack(p.parseluare(errfunction, luare))
  local _, len = table.remove(arr, 1), table.remove(arr, 1)
  p.pos = p.pos+_+len
  return unpack(arr)
end

dict = {}
dict[""] = os.exit		-- EOF
dict["\n"] = function () end	-- just skip the newline
dict["[lua"] = function ()
    assert(loadstring(getuntilluare(nil, "^(.-)lua%]")))()
  end

interpret = function ()
    local word = getword(); local d = dict[word]
    if d then d() else unknown(word) end
  end
outerloop = function (text)
    if text then p.text = text end
    while 1 do interpret() end
  end