CB Brainfuck

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

CB Brainfuck

Post by Eräs cb koodaaja »

Laitan nyt joululomalla tekemäni Brainfuck kääntäjän tänne.
Jos, et tiedä mikä Brainfuck on tässä ohjelmointiputkan opas.
Kääntäjän komennot:

LATAA -> Lataa koodin muistiin. Toimii näin -> LATAA testi.txt
AJA -> Ajaa muistiin ladatun koodin
TYHJENNÄ -> Tyhjentään näytöltä tekstit.
POISTU -> Poistuu ohjelmasta

Esc lopettaa ajon.
ÄLÄ KIRJOITA KOODI-TIEDOSTOON MITÄÄN MUUTA KUIN KOODIA, KOSKA KÄÄNTÄJÄ ON VIRHEHERKKÄ.
Lataa
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: CB Brainfuck

Post by Pettis »

CB:lläkö toteutit kääntäjän? Kääntääkö kääntäjäsi ihan binääriksi vai tavukoodiksi? Jos tavukoodiksi, niin millä toteutit sitten itse tulkin?
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: CB Brainfuck

Post by Eräs cb koodaaja »

CB:llä on tehty. Ohjelma suoritetaan ihan cb-komennoilla esim. pilkku vastaa getkeytä ja piste lisää muuttujaan paikan ASCII-arvon, joka taas tulostetaan CBSDK:n RowTextillä. Julkaisen tämä jossain vaiheessa open sourseksi, joten silloin tekniikka selviää.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Pie2
Member
Posts: 55
Joined: Mon Aug 27, 2007 8:14 pm
Location: Porvoo

Re: CB Brainfuck

Post by Pie2 »

Tjoo-o. Ihan kunnon BF. Vähän hankala käyttää. Pikanäppäimet tekis terää.

Päätinpä minäkin kokeilla omaani. Ethän pahastu jos julkaisen koodin täällä... :]
Koodi on kommentoitu. Näyttää myös virheilmoituksia.
EDIT: joo, tuo virhetsydeemi onkin pelkkää purkkaa.

Code: Select all

    //*****CB brainfuck*************//
    //Tehnyt: Pie2                  //
    //Nopeasti koodasin tämmössen.  //
    //Saa käyttää miten haluaa :)   //
    //////////////////////////////////

    //PERUSASETUKSET
        strict_run=1    //0 = ei olla niin ankaria väärille komennoille, voit laittaa 1 jos haluat ohittaa muistitarkastuksen
        make_error=0    //heittää erroria kun tulee virhe, ei huomaa "["
        show_unknown=1  //kun tulee tuntematon komento niin tulostuu "?"
        memo_size=255   //varattavien muistipalikoiden määrä
        console_size=255 //kuinka monta riviä "konsolissa" on
        loop_size=255   //maksimimäärä silmukoita "[" --> "]" 
    //INITIALISOIDAAN
        //MUISTI
        Dim memo(memo_size) As Byte   //muisti
        Global memo_p As integer      //muistin "pointeri"
        //KONSOLI
        Dim console(console_size) As String     //konsolin rivit
        Global console_p As integer   //konsolin "poineri" aka. millä rivillä mennään
        //KOODI
        Global code As String         //itse koodi
        Global code_len As integer    //koodin pituus
        //SILMUKAT
        Dim loop_start(loop_size) As integer //silmukan alku
        Global loop_p As integer             //silmukan "pointer"
        loop_p=-1
    //ANNETAAN ARVOT
    code="++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+."
    code_len=Len(code)-1
    For k=0 To code_len
        c$=com(k)  //haetaan komento
        SetWindow ""+k+"/"+code_len+"    "+c
        Select c
            Case "+"
                memo(memo_p)=memo(memo_p)+1    //lisätään pointerin kohdalla olevaa arvoa
            Case "-"
                memo(memo_p)=memo(memo_p)-1    //vähennetään pointerin kohdalla olevaa arvoa
            Case "."
                tex(Chr(memo(memo_p)))         //tulostetaan
                draw=1                         //optimoinnin vuoksi ruutu piirretään ainoastaan kun tulostetaan...
            Case ">"
                memo_p=memo_p+1                //liikutetaan pointeria oikealle
            Case "<"
                memo_p=memo_p-1                //liikutetaan pointeria vasemmalle
            Case ","
                tmp_timer=10                           
                tmp_blink=1
                ClearKeys()                    //jos suorituksen aikana on painettu jtn niin unohdetaan se
                Locate 0,-15    //siirretään input pois näkyvistä
                Repeat
                    //OTETAAN INPUT
                    f$=Left(Input(""),1)
                    //PIIRRETÄÄN konsoli
                    For i=0 To console_p
                        Text 0,i*15,console(i)
                    Next i
                    //PIIRRETÄÄN INPUT ja välkkyvä kursori
                    Text TextWidth(console(console_p)),console_p*15,f
                    If tmp_blink Then Text TextWidth(console(console_p)),console_p*15,"_"
                    //päivitetään välkkymistimeriä
                    tmp_timer=tmp_timer-1
                    If tmp_timer<0 Then tmp_timer=10:tmp_blink=Not tmp_blink
                   
                    DrawScreen
                Until KeyHit(28)
                Cls
                CloseInput()
                memo(memo_p)=Asc(f)  //asetetaan pointerin kohdalla olevalle muistille arvoksi juuri saatu näppäin
            Case "["
                loop_p=loop_p+1        //lisätään looppipoineria=uusi looppi
                loop_start(loop_p)=k   //laitetaan muistiin alkukohta
            Case "]"
                If loop_p=-1 Then
                    tex("E")                  //ohjelma kaatuisi koska sulkuja olisi liikaa
                    tmp_sulkuja=tmp_sulkuja+1  //lasketaan virheellisiä sulkuja
                    If make_error Then MakeError "Ylimääräinen sulku "+Chr(34)+c+Chr(34)+" kohta:"+k
                Else
                    If memo(memo_p)>0 Then
                        k=loop_start(loop_p)  //jos pointerin kohdalla oleva arvo ei ole 0 niin palataan
                    Else
                        loop_start(loop_p)=0  //...jos se taas on niin nollataan looppi muistista
                        loop_p=loop_p-1       // loopin pointeri takaisin=looppi loppui
                    EndIf
                EndIf
            Default
                If c<>" " And show_unknown Then tex("?")
                If c<>" " And make_error Then MakeError "Tuntematon komento "+Chr(34)+c+Chr(34)+" kohta:"+k
                If c<>" " Then tmp_komentoja=tmp_komentoja+1   //lasketaan komentovirheitä
        End Select
       
        If strict_run=0 Then
            //tarkistetaan muisti
            For i=0 To memo_size
                memo(i)=Max(0,Min(memo(i),255))  //maksimiarvo on 255 ja minimi 0
            Next i
            //tarkistetaan pointerit
            memo_p=Max(0,Min(memo_size,memo_p))
            console_p=Max(0,Min(console_size,console_p))
            loop_p=Max(-1,Min(loop_size,loop_p))
        EndIf
        //LOPPUVIESTI, kertoo virheet etc
        If k=code_len Then
            tex(Chr(10)):tex("======================VALMIS======================"):draw=1
            If loop_p>-1 Then tex("Sulkemattomia looppeja! ("+(loop_p+1)+")"):tex(Chr(10))
            If tmp_sulkuja>0 Then tex("Liikaa sulkuja ("+(tmp_sulkuja)+")"):tex(Chr(10))
            If tmp_komentoja>0 Then tex("Tuntemattomia komentoja ("+tmp_komentoja+")")
        EndIf
        //PIIRRETÄÄN (ainoastaan jos on juuri tulostettu jtn)
        If draw Then
            tmp_y=Max(0,console_p-19)
            For i=0 To Min(console_size,23) 'Max(0,console_p-23) To console_p
                Text 0,i*15,console(tmp_y+i)
            Next i
            DrawScreen
            draw=0
        EndIf
    Next k
    //LOPPU
    WaitKey
    End

    Function com(i)
        Return Mid(code,i+1,1)
    EndFunction

    Function tex(t$)
        While Len(console(console_p))>49
            console_p=console_p+1
        Wend
        If Asc(t)=10 Then
            console_p=console_p+1
        ElseIf Asc(t)=8 Then
            console(console_p)=Left(console(console_p),Len(console(console_p))-1)
        Else
            console(console_p)=console(console_p)+t
        EndIf
    EndFunction


Last edited by Pie2 on Wed Jan 23, 2008 1:10 pm, edited 1 time in total.
Since 24-March 05
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: CB Brainfuck

Post by Eräs cb koodaaja »

Ihan toimiva tuokin on. Enkä pahastu. Virheilmoitukset eivät toimi koodissasi, kun lisäsin silmukkaan yhden merkin, niin valitti kahdestakymmenestä virheellisestä merkistä. Minulla ongelmana on, kun virheet tehdään makeerrorilla niin ohjelman joutuu avaamaan uudelleen. Siitäkin päästään kunhan saan IDE:n valmiiksi ja siihen SDK:n Api-funktioilla virheilmotukset.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Pie2
Member
Posts: 55
Joined: Mon Aug 27, 2007 8:14 pm
Location: Porvoo

Re: CB Brainfuck

Post by Pie2 »

Eräs cb koodaaja wrote:Virheilmoitukset eivät toimi koodissasi, kun lisäsin silmukkaan yhden merkin, niin valitti kahdestakymmenestä virheellisestä merkistä.
Tuo johtuu siitä että ohjelma laskee virheet realliaikaisesti. Laitoit siis merkin silmukan sisään, ja koodi yritti lukea merkkiä 20 kertaa, lisäsin tuon virhesysteemin ihan lopuksi, voisin muokata sitä vähän.
Since 24-March 05
Guest

Re: CB Brainfuck

Post by Guest »

Eräs cb koodaaja wrote:Laitan nyt joululomalla tekemäni Brainfuck kääntäjän tänne.
Jos, et tiedä mikä Brainfuck on tässä ohjelmointiputkan opas.
Kääntäjän komennot:

LATAA -> Lataa koodin muistiin. Toimii näin -> LATAA testi.txt
AJA -> Ajaa muistiin ladatun koodin
TYHJENNÄ -> Tyhjentään näytöltä tekstit.
POISTU -> Poistuu ohjelmasta

Esc lopettaa ajon.
ÄLÄ KIRJOITA KOODI-TIEDOSTOON MITÄÄN MUUTA KUIN KOODIA, KOSKA KÄÄNTÄJÄ ON VIRHEHERKKÄ.
Lataa
Miten sillä käännetään?
Guest

Re: CB Brainfuck

Post by Guest »

Eikö kukaan tiedä?
Eräs cb koodaaja
Active Member
Posts: 126
Joined: Wed Aug 29, 2007 3:55 pm

Re: CB Brainfuck

Post by Eräs cb koodaaja »

1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA

Paina enteriä komennon kirjoittamisen jälkeen. ;)
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Guest

Re: CB Brainfuck

Post by Guest »

Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA

Paina enteriä komennon kirjoittamisen jälkeen. ;)
Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: CB Brainfuck

Post by koodaaja »

Guest wrote:
Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA

Paina enteriä komennon kirjoittamisen jälkeen. ;)
Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(
Siis wtf, tämähän nimenomaan on tulkki eikä kääntäjä. Etkai nyt tosissasi kuvitellut, että joku saisi CB:llä tehtyä ehdan kääntäjän? ( no, onkai sekin periaatteessa mahdollista, mutta kovasti olen skeptinen )
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: CB Brainfuck

Post by jabanii »

koodaaja wrote:
Guest wrote:
Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA

Paina enteriä komennon kirjoittamisen jälkeen. ;)
Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(
Siis wtf, tämähän nimenomaan on tulkki eikä kääntäjä. Etkai nyt tosissasi kuvitellut, että joku saisi CB:llä tehtyä ehdan kääntäjän? ( no, onkai sekin periaatteessa mahdollista, mutta kovasti olen skeptinen )
Tuosta kyllä saisi helposti tehtyä kääntäjän, mikä luo exe + data -tiedostoja. Vain exe:si kääntäminen on kyllä mahdotonta käyttäen tavukoodia. Itse joskus kauan sitten tein CB:llä ehdan kääntäjän, mikä loi exe + data -ohjelmia.
Guest

Re: CB Brainfuck

Post by Guest »

koodaaja wrote:
Guest wrote:
Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA

Paina enteriä komennon kirjoittamisen jälkeen. ;)
Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(
Siis wtf, tämähän nimenomaan on tulkki eikä kääntäjä. Etkai nyt tosissasi kuvitellut, että joku saisi CB:llä tehtyä ehdan kääntäjän? ( no, onkai sekin periaatteessa mahdollista, mutta kovasti olen skeptinen )
Mä en kuvittele vaan tiedä et CBlläkin voi tehdä kääntäjän. Sitä paitsi tuossa luki et Brainfuck kääntäjä ei tulkki.
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: CB Brainfuck

Post by jannepelaa »

Offtopic:
Yritin kirjoittaa yhdellä CB-ohjelmalla toisen CB-ohjelman loppuun, joka sitten lukisi sitä, mutta tuli "Executable Error(&FF-23A78DD)". Tämä varmaan johtuu siitä, että CB:kin käyttää tavukoodia, joten CB:n tulkki yritti siis varmaan ymmärtää omaa koodiani, joka ei onnistunut. Eli tuo kääntäjä-homma ei varmaan toimi. :(
jabanii
Member
Posts: 93
Joined: Tue Aug 28, 2007 9:23 pm

Re: CB Brainfuck

Post by jabanii »

jannepelaa wrote:Offtopic:
Yritin kirjoittaa yhdellä CB-ohjelmalla toisen CB-ohjelman loppuun, joka sitten lukisi sitä, mutta tuli "Executable Error(&FF-23A78DD)". Tämä varmaan johtuu siitä, että CB:kin käyttää tavukoodia, joten CB:n tulkki yritti siis varmaan ymmärtää omaa koodiani, joka ei onnistunut. Eli tuo kääntäjä-homma ei varmaan toimi. :(
OFFTOPIC:
En ole vielä testannut, mutta uskon CB:n käyttävän sellaista systeemiä, että 4 viimeistä tavua kertovat tavukoodin alun sijainnin. Tämä estää resurssien pistämisen, koska ne 4 tavua eivät ole enään viimeiset. Lisäksi ei kääntäjän tarvitse luoda stand-alone ohjelmia. Kääntäjä voi luoda myös exe + data ohjelmia.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: CB Brainfuck

Post by Koodiapina »

Executable error on tietääkseni Coolbasicin bugi, joka tulee kun muuttujan arvoa korotetaan joissakin tilanteissa. En sitten tiedä tarkoittiko Jabanii sitä. Yhden rivin esimerkki:

Code: Select all

lol + 1
Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: CB Brainfuck

Post by jannepelaa »

OFFTOPIC:
jabanii wrote:OFFTOPIC:
En ole vielä testannut, mutta uskon CB:n käyttävän sellaista systeemiä, että 4 viimeistä tavua kertovat tavukoodin alun sijainnin. Tämä estää resurssien pistämisen, koska ne 4 tavua eivät ole enään viimeiset.
Sittenhän voisi tehdä tälläisen systeemin:
Joku.exe:n rakenne: |ohjelma|oma tavukoodi|oman tavukoodin aloituspiste|cb:n tavukoodi|cb:n tavukoodin aloituspiste|
Eli kirjoitettaessa oma koodi kirjoitettaisiin cb:n tavukoodin ja ohjelman väliin. Oman koodin jälkeen laitettaisiin tuo kohta, josta oma koodi alkaa. Lopuksi cb:n tavukoodin aloituspisteen paikkaa siirrettäisiin oman koodin ja oman koodin aloituspisteen verran eteenpäin.
Kuulostaa sekavalta, mutta ainahan voi yrittää. :)

EDIT:
Grandi wrote:Executable error on tietääkseni Coolbasicin bugi, joka tulee kun muuttujan arvoa korotetaan joissakin tilanteissa. En sitten tiedä tarkoittiko Jabanii sitä. Yhden rivin esimerkki:

Code: Select all

lol + 1
Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.
Ehkäpä cb-ohjelma näyttää tuon virheen aina, jos tulkki saa jotain outoa vastaan.
_jabanii

Re: CB Brainfuck

Post by _jabanii »

jannepelaa wrote:OFFTOPIC:
jabanii wrote:OFFTOPIC:
En ole vielä testannut, mutta uskon CB:n käyttävän sellaista systeemiä, että 4 viimeistä tavua kertovat tavukoodin alun sijainnin. Tämä estää resurssien pistämisen, koska ne 4 tavua eivät ole enään viimeiset.
Sittenhän voisi tehdä tälläisen systeemin:
Joku.exe:n rakenne: |ohjelma|oma tavukoodi|oman tavukoodin aloituspiste|cb:n tavukoodi|cb:n tavukoodin aloituspiste|
Eli kirjoitettaessa oma koodi kirjoitettaisiin cb:n tavukoodin ja ohjelman väliin. Oman koodin jälkeen laitettaisiin tuo kohta, josta oma koodi alkaa. Lopuksi cb:n tavukoodin aloituspisteen paikkaa siirrettäisiin oman koodin ja oman koodin aloituspisteen verran eteenpäin.
Kuulostaa sekavalta, mutta ainahan voi yrittää. :)

EDIT:
Grandi wrote:Executable error on tietääkseni Coolbasicin bugi, joka tulee kun muuttujan arvoa korotetaan joissakin tilanteissa. En sitten tiedä tarkoittiko Jabanii sitä. Yhden rivin esimerkki:

Code: Select all

lol + 1
Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.
Ehkäpä cb-ohjelma näyttää tuon virheen aina, jos tulkki saa jotain outoa vastaan.
Tuo aloituspiste -systeemi on aika huono tapa mielestäni. Itse käytän GB:ssä (Gyber Basic) sellaista systeemiä, että tavukoodin alussa on kahdeksan tavua, mitkä tulkki etsii ja sen jälkeen alkaa lukemaan tavukoodia. Näin ei tule tuota CB:n erroria.
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: CB Brainfuck

Post by jannepelaa »

OFFTOPIC:
_jabanii wrote: Tuo aloituspiste -systeemi on aika huono tapa mielestäni. Itse käytän GB:ssä (Gyber Basic) sellaista systeemiä, että tavukoodin alussa on kahdeksan tavua, mitkä tulkki etsii ja sen jälkeen alkaa lukemaan tavukoodia. Näin ei tule tuota CB:n erroria.
Entäs jos jossakin kohtaa muualla on samat 8 tavua (voi olla aika harvassa)?
_jabanii

Re: CB Brainfuck

Post by _jabanii »

jannepelaa wrote:OFFTOPIC:
_jabanii wrote: Tuo aloituspiste -systeemi on aika huono tapa mielestäni. Itse käytän GB:ssä (Gyber Basic) sellaista systeemiä, että tavukoodin alussa on kahdeksan tavua, mitkä tulkki etsii ja sen jälkeen alkaa lukemaan tavukoodia. Näin ei tule tuota CB:n erroria.
Entäs jos jossakin kohtaa muualla on samat 8 tavua (voi olla aika harvassa)?
Se mahdollisuus on todella pieni ja jos näin todella käy, niin sen huomaa jo kehittämisvaiheessa. Tällöin vain lisätään pari tavua lisää.
Post Reply