Login Register
Frontpage Code library Pastebin

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 all
 1
 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.