Verfasst: 12.04.2005 23:13
Na das kann ja heiter werden. Das würde sogar mich mal interessieren.
Code: Alles auswählen
NewList BF_Buffer.l()
NewList BF_Loop.l()
Procedure.l BF_Compile(*Text.BYTE)
Protected a.l, b.s
OpenConsole()
AddElement(BF_Buffer())
AddElement(BF_Loop())
While *Text\b
Select *Text\b & $FF
Case '+' : If BF_Buffer() < 255 : BF_Buffer() + 1 : EndIf
Case '-' : If BF_Buffer() > 0 : BF_Buffer() - 1 : EndIf
Case '['
AddElement(BF_Loop()) : BF_Loop() = *Text
If BF_Buffer() = 0 : a = 0 : Repeat
Select *Text\b : Case 0 : Break 2 : Case '[' : a + 1 : Case ']' : a - 1 : If a = 0 : Break : EndIf : EndSelect
*Text + 1 : ForEver : DeleteElement(BF_Loop())
EndIf
Case ']' : If BF_Buffer() = 0 : DeleteElement(BF_Loop()) : Else : *Text = BF_Loop() : EndIf
Case '<' : If PreviousElement(BF_Buffer()) = 0 : InsertElement(BF_Buffer()) : EndIf
Case '>' : If NextElement(BF_Buffer()) = 0 : AddElement(BF_Buffer()) : EndIf
Case '.' : Print(Chr(BF_Buffer()))
Case ',' : Repeat : b = Left(Inkey(), 1) : Delay(10) : Until b <> "" : a = Asc(b) : If a = 13 : a = 10 : PrintN("") : Else : Print(b) : EndIf : BF_Buffer() = a
EndSelect
*Text + 1
Wend
PrintN("")
Print("Interpreter Ende - Druecken sie eine beliebige Taste zum Fortsetzen...")
While Inkey() = "" : Delay(10) : Wend
CloseConsole()
ProcedureReturn #True
EndProcedure
BF.s = GetClipboardText()
BF_Compile(@BF)
Such mal im alten Forum/Archiv nach "Brainfuck", da ist einiges drin.NicTheQuick hat geschrieben:Wo gibt es denn noch andere in PureBasic geschriebene Brainfuck-Interpreter?