LUAでの単純なBrainfuckの実装を教えていただけますか。これにより、プログラムの端末入力が必要で、有用なエラーメッセージが表示されますか？
Luaのブレインファック・インタープリターだ：

```lua
-- Brainfuck interpreter in Lua

-- Read the Brainfuck program from terminal input
local program = io.read("*line")

-- Initialize the memory tape as a table of 30000 zeros
local tape = {}
for i = 1, 30000 do
  tape[i] = 0
end

-- Set the initial tape pointer to zero
local tapePointer = 1

-- Set up a stack to keep track of loop positions
local loopStack = {}

-- Loop through each character in the program string
for i = 1, #program do
  local char = program:sub(i, i)
  
  -- Handle each Brainfuck command
  if char == ">" then
    tapePointer = tapePointer + 1
  elseif char == "<" then
    tapePointer = tapePointer - 1
  elseif char == "+" then
    tape[tapePointer] = tape[tapePointer] + 1
  elseif char == "-" then
    tape[tapePointer] = tape[tapePointer] - 1
  elseif char == "." then
    io.write(string.char(tape[tapePointer]))
  elseif char == "," then
    tape[tapePointer] = io.read(1):byte()
  elseif char == "[" then
    if tape[tapePointer] == 0 then
      -- Skip forward to the matching ]
      local loopDepth = 1
      while loopDepth > 0 do
        i = i + 1
        if i > #program then
          print("Error: unmatched [")
          return
        end
        if program:sub(i, i) == "[" then
          loopDepth = loopDepth + 1
        elseif program:sub(i, i) == "]" then
          loopDepth = loopDepth - 1
        end
      end
    else
      -- Push the current position onto the loop stack
      table.insert(loopStack, i)
    end
  elseif char == "]" then
    if tape[tapePointer] ~= 0 then
      -- Jump back to the matching [
      if #loopStack == 0 then
        print("Error: unmatched ]")
        return
      end
      i = loopStack[#loopStack]
    else
      -- Pop the loop stack
      table.remove(loopStack)
    end
  end
end
```

この実装では、ターミナル入力からBrainfuckプログラムを読み込み、メモリテープを30000個のゼロのテーブルとして初期化し、テープの初期ポインタをゼロに設定し、ループ位置を追跡するためのスタックをセットアップする。その後、プログラム文字列の各文字をループし、各 Brainfuck コマンドを以下のように処理する：

- `>`:テープポインタを右に移動する。
- `<`:テープポインターを左に移動
- `+`:現在のテープ位置の値をインクリメントする
- `-`:現在のテープ位置の値をデクリメントする。
- `.`:現在のテープ位置の値を文字として出力する
- `,`:端末入力から文字を読み取り、そのASCII値を現在のテープ位置に格納する
- `[`:現在のテープ位置の値がゼロの場合、一致する `]`.それ以外の場合は、現在の位置をループスタックにプッシュする。
- `]`:現在のテープ位置の値がゼロでない場合、一致する `[`.それ以外の場合はループスタックをポップする。

インタプリタは、マッチしない `[` と `]` 文字に対しても有用なエラーメッセージを出力する。