Brainfuck-tulkki
Author: c00ler
Added: 5. maaliskuuta 2013 kello 16.23
Edited: 5. maaliskuuta 2013 kello 16.23
Category: Sekalaiset
Description
Yksinkertainen brainfuck-tulkki. En ole testaillut koodia paljon, joten bugeja/outouksia voi esiintyä.
Voi testata vaikka tällä: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. ---. +++++++. . +++. >++++++++++++++++++++++++++++++++. <++++++++. --------. +++. ------. --------. >+.
Code
Select all1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | Dim muisti(30000)
SetWindow "Brainfuck-tulkki"
If CommandLine() <> "" Then filu$ = CommandLine() : Goto alakysyos
vaarafilu:
Repeat
filu$ = Input("Tulkattavan tiedoston osoite: ")
DrawScreen
Until KeyHit(28)
CloseInput
ClearText
alakysyos:
If FileExists(filu$) = 0 Or IsDirectory(filu$) = 1 Then AddText "Tiedostoa '" + filu$ + "' ei löydy!" : Locate 0, 10 : Goto vaarafilu
f = OpenToRead(filu$)
While Not EOF(f)
rivi$ = ReadLine(f)
For i = 1 To Len(rivi$)
If oikeamerkki(Mid(rivi$, i, 1)) Then koodi$ = koodi$ + Mid(rivi$, i, 1)
Next i
Wend
For i = 1 To Len(koodi$)
Select Mid(koodi$, i, 1)
Case ">"
If m = 30000 Then m = 0
If m <> 30000 Then m = m + 1
Case "<"
If m = 0 Then m = 30000
If m <> 0 Then m = m - 1
Case "+"
If muisti(m) = 255 Then muisti(m) = 0
If muisti(m) <> 255 Then muisti(m) = muisti(m) + 1
Case "-"
If muisti(m) = 0 Then muisti(m) = 255
If muisti(m) <> 0 Then muisti(m) = muisti(m) - 1
Case "."
Cls
tulosteet$ = tulosteet$ + Chr(muisti(m))
Print Mid(tulosteet$, 1, 50)
For b = 1 To Len(tulosteet$) / 50
Print Mid(tulosteet$, b * 50 + 1, 50)
Next b
Case ","
While syote$ = ""
syote$ = Input("")
Wend
CloseInput
muisti(m) = Asc(syote$)
syote$ = ""
Case "["
If muisti(m) = 0 Then
For a = i To Len(koodi$)
If Mid(koodi$, a, 1) = "]" Then i = a + 1
Next a
EndIf
Case "]"
If muisti(m) <> 0 Then
b = i
For a = 1 To i
If Mid(koodi$, b, 1) = "[" Then i = b : Exit
b = b - 1
Next a
EndIf
EndSelect
Next i
Print
Print "Tulkkaus loppui! Paina mitä tahansa näppäintä sul-"
Print "keaksesi ohjelman!"
WaitKey
Function oikeamerkki(merkki$)
Select merkki$
Case ">", "<", "+", "-", ".", ",", "[", "]" : Return 1
EndSelect
Return 0
EndFunction
|
Comments
No comments. You can be first!
Leave a comment
You must be logged in to comment.