Seite 2 von 2

Verfasst: 12.04.2005 23:13
von NicTheQuick
Na das kann ja heiter werden. Das würde sogar mich mal interessieren.

Verfasst: 12.04.2005 23:21
von Rob
> Das würde sogar mich mal interessieren.

Eigene Sprache oder BF2D-Optimierung?

Eigene Sprache ist auch eine gute Idee, doch braucht man dafür wieder viel mehr Wissen und Interesse an der Sache. Soviele Mitglieder haben wir hier auch nicht und nur wenige, die sich eigene Sprachen ausdenken. Mal sehn, vielleicht danach.

Ich lade das englische Forum dann auch wieder ein, wird bestimmt lustig :)

Verfasst: 13.04.2005 07:55
von orange-blue
yeah bin mal gespannt auf die Ergebnisse.

Verfasst: 13.04.2005 23:18
von NicTheQuick
Na, Rob?

Was ist jetzt? Schon was überlegt?

Ich warte schon die ganze Zeit auf einen neuen Wettbewerb. :mrgreen:

Verfasst: 13.04.2005 23:46
von Rob
Morgen oder Freitag Nacht.

Verfasst: 14.04.2005 17:50
von AndyX
OMG :o :o :o :o :shock: :shock:

Das ist echt krank!!! :o

Geht schon die Sprache lern ich :lol: :lol: :lol: :mrgreen:

Mfg,
AndyX

Verfasst: 15.04.2005 19:37
von NicTheQuick
Hier ist übrigens noch mein kleiner BrainFuck-Interpreter. Hab ich eben mal auf die Schnelle gecodet. Er benutzt keine Arrays, sondern LinkedLists, die man dafür wunderbar verwenden kann. Somit sind auch Pointer kleiner als Null und über mehreren tausend möglich bis eben der Speicher voll ist. Außerdem können Schleifen soweit verschachtelt sein wie sie wollen. Es klappt immer. Zumindest bis der Speicher voll ist. :D
Hier gibt es ein paar Codes zu finden.

Aber hier ist erstmal der Code:

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)
Was?? Ihr findet den Code unübersichtlich?? Naja, ich wollte eben etwas Platz sparen. :mrgreen:

Primzahl-Test gefälligst?

Verfasst: 16.04.2005 17:38
von NicTheQuick
Wo gibt es denn noch andere in PureBasic geschriebene Brainfuck-Interpreter?

Verfasst: 16.04.2005 19:05
von Danilo
NicTheQuick hat geschrieben:Wo gibt es denn noch andere in PureBasic geschriebene Brainfuck-Interpreter?
Such mal im alten Forum/Archiv nach "Brainfuck", da ist einiges drin.

Meiner ist da: Danilos kleiner Brainfuck-Interpreter ;)