Kannst du mir eine einfache Brainfuck-Implementierung in Lua geben, die eine Eingabe über das Terminal für das Programm akzeptiert und hilfreiche Fehlermeldungen ausgibt?
Natürlich, hier ist ein Brainfuck-Interpreter in Lua:

```lua
-- Brainfuck-Interpreter in Lua

-- Lese das Brainfuck-Programm von der Eingabe über das Terminal
local program = io.read("*line")

-- Initialisiere das Speicherband als Tabelle mit 30000 Nullen
local tape = {}
for i = 1, 30000 do
  tape[i] = 0
end

-- Setze den initialen Bandzeiger auf Null
local tapePointer = 1

-- Erstelle einen Stack, um die Schleifenpositionen zu verfolgen
local loopStack = {}

-- Gehe jeden Buchstaben im Programmstring durch
for i = 1, #program do
  local char = program:sub(i, i)
  
  -- Behandle jeden Brainfuck-Befehl
  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
      -- Springe vorwärts zum passenden ]
      local loopDepth = 1
      while loopDepth > 0 do
        i = i + 1
        if i > #program then
          print("Fehler: unpassendes [")
          return
        end
        if program:sub(i, i) == "[" then
          loopDepth = loopDepth + 1
        elseif program:sub(i, i) == "]" then
          loopDepth = loopDepth - 1
        end
      end
    else
      -- Füge die aktuelle Position dem Schleifenstack hinzu
      table.insert(loopStack, i)
    end
  elseif char == "]" then
    if tape[tapePointer] ~= 0 then
      -- Springe zurück zum passenden [
      if #loopStack == 0 then
        print("Fehler: unpassendes ]")
        return
      end
      i = loopStack[#loopStack]
    else
      -- Entferne das oberste Element aus dem Schleifenstack
      table.remove(loopStack)
    end
  end
end
```

Diese Implementierung liest das Brainfuck-Programm von der Eingabe über das Terminal, initialisiert das Speicherband als Tabelle mit 30000 Nullen, setzt den initialen Bandzeiger auf Null und erstellt einen Stack, um die Schleifenpositionen zu verfolgen. Anschließend durchläuft sie jeden Buchstaben im Programmstring und behandelt jeden Brainfuck-Befehl wie folgt:

- `>`: Bewege den Bandzeiger nach rechts
- `<`: Bewege den Bandzeiger nach links
- `+`: Erhöhe den Wert an der aktuellen Bandposition um eins
- `-`: Verringere den Wert an der aktuellen Bandposition um eins
- `.`: Gib den Wert an der aktuellen Bandposition als Zeichen aus
- `,`: Lies ein Zeichen von der Eingabe über das Terminal und speichere seinen ASCII-Wert an der aktuellen Bandposition
- `[`: Wenn der Wert an der aktuellen Bandposition Null ist, springe vorwärts zum passenden `]`. Andernfalls füge die aktuelle Position dem Schleifenstack hinzu.
- `]`: Wenn der Wert an der aktuellen Bandposition ungleich Null ist, springe zurück zum passenden `[`. Andernfalls entferne das oberste Element aus dem Schleifenstack.

Der Interpreter gibt auch hilfreiche Fehlermeldungen für unpassende `[` und `]`-Zeichen aus.