Interpréteur Brainfuck :)
Publié : mar. 17/janv./2017 18:59
Le Brainfuck, c'est cool
C'est bien pour les tordus qui se font chier, pour ceux qui n'on rien d'autre à faire, ou se prennent pour des illuminatis confirmés
. Partant de ces constats simples, je me suis dit qu'en faire un interpréteur en PB serait un petit exercice sympa... Cool non? D'avoir ainsi perdu un quart d'heure sur quelquechose de trés peu utile ^^
M'enfin bref, voici un petit interpréteur de Brainf*ck pour PB 
Bonne destruction de neurones, adoptez le BF c'est simple et à fortiori pas compliqué, voire peux difficultueux ou même facile de type non difficile... Enfin presque




Code : Tout sélectionner
#MEMSIZE = 1024
#MAXLPLEVEL = 32
OpenConsole("Brain Not Found")
ConsoleColor(0,7)
PrintN("############################ Interpréteur Brainfuck ############################")
ConsoleColor(7,0)
Dim memory.a(#MEMSIZE)
Dim loops(#MAXLPLEVEL)
Define ptr, loopLevel, bfScript$, i, len, inpt$, errCount
Declare Error(Text.s)
ConsoleColor(10,0)
Print("$iBF$>")
ConsoleColor(14,0)
bfScript$ = Input()
len = Len(bfScript$)
ConsoleColor(2,0)
PrintN("Exécution en cours...")
ConsoleColor(7,0)
For i=1 To len
Select Asc(Mid(bfScript$,i,1))
Case '+'
memory(ptr) +1
Case '-'
memory(ptr) -1
Case '>'
ptr +1
Case '<'
ptr -1
If ptr < 0
Error("Segmentation error : pointer out of memory : "+Str(ptr)+" Must be [0~1024]")
errCount +1
Break
EndIf
Case '.'
Print(Chr(memory(ptr)))
Case ':'
Print(Str(memory(ptr)))
Case ','
ConsoleColor(10,0)
Print("$>")
ConsoleColor(7,0)
inpt$ = Input()
memory(ptr) = Val(inpt$)
Case '['
loopLevel +1
loops(loopLevel) = i
Case ']'
If memory(ptr) = 0
loopLevel -1
Else
i = loops(loopLevel)
EndIf
EndSelect
Next
ConsoleColor(2,0)
PrintN(~"\nExécution terminée, erreurs : "+Str(errCount))
ConsoleColor(10,0)
Print("Pressez Entrée pour quitter.")
Input()
Procedure Error(Text.s)
ConsoleColor(12,0)
PrintN(Text)
ConsoleColor(7,0)
EndProcedure
Hello World a écrit :++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>+.+++++++..+++.<<++.>+++++++++++++++.>.+++.------.--------.<<+.<.
Le chiffre illuminati a écrit :++++++++++:>++:>:
Les instructions sont celles du Brainfuck traditionnel + le ":" qui permet d'afficher la valeur brute de l'octet pointé, ce qui est pratique quand on ne veut pas afficher le caractére ASCII correspondant, mais qui du coup repréente une légére digression au but du BF, qui est d'est chiant à coder ^^Le Brainfuck (à propos de lui-même) a écrit :-[------->+<]>+++.-[--->++++<]>+.--[--->+<]>-.+[->++<]>.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.-[++>---<]>+.+[->+++<]>.[->+++<]>--.-[--->+<]>+++.[--->+<]>----.+.[---->+<]>+++.+[->+++<]>.++++++++++++..---.[++>---<]>--.---[->++<]>.--[->++++++<]>.
Bonne destruction de neurones, adoptez le BF c'est simple et à fortiori pas compliqué, voire peux difficultueux ou même facile de type non difficile... Enfin presque
