CB Brainfuck
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
CB Brainfuck
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
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
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: CB Brainfuck
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?
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: CB Brainfuck
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
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: CB Brainfuck
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.
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
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: CB Brainfuck
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
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: CB Brainfuck
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.Eräs cb koodaaja wrote:Virheilmoitukset eivät toimi koodissasi, kun lisäsin silmukkaan yhden merkin, niin valitti kahdestakymmenestä virheellisestä merkistä.
Since 24-March 05
Re: CB Brainfuck
Miten sillä käännetään?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
-
- Active Member
- Posts: 126
- Joined: Wed Aug 29, 2007 3:55 pm
Re: CB Brainfuck
1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
Tiimit ja tuotokset:
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
RE:Ydintuho
Drahtlose:Infernalisch, Pienet pelit
Re: CB Brainfuck
Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: CB Brainfuck
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 )Guest wrote:Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
Re: CB Brainfuck
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.koodaaja wrote: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 )Guest wrote:Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
Re: CB Brainfuck
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.koodaaja wrote: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 )Guest wrote:Ei se kyl ainakaan mulla käännä. Ainoastaan tulkkaa =(Eräs cb koodaaja wrote:1. Lataa koodisi LATAA- komennolla.
2. Aja koodi kirjoittamalla AJA
Paina enteriä komennon kirjoittamisen jälkeen.
-
- Active Member
- Posts: 101
- Joined: Tue Aug 28, 2007 2:27 pm
Re: CB Brainfuck
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.
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.
Re: CB Brainfuck
OFFTOPIC: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.
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.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: CB Brainfuck
Executable error on tietääkseni Coolbasicin bugi, joka tulee kun muuttujan arvoa korotetaan joissakin tilanteissa. En sitten tiedä tarkoittiko Jabanii sitä. Yhden rivin esimerkki:
Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.
Code: Select all
lol + 1
-
- Active Member
- Posts: 101
- Joined: Tue Aug 28, 2007 2:27 pm
Re: CB Brainfuck
OFFTOPIC:
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:
Sittenhän voisi tehdä tälläisen systeemin: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.
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:
Ehkäpä cb-ohjelma näyttää tuon virheen aina, jos tulkki saa jotain outoa vastaan.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:Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.Code: Select all
lol + 1
Re: CB Brainfuck
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 wrote:OFFTOPIC:Sittenhän voisi tehdä tälläisen systeemin: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.
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:Ehkäpä cb-ohjelma näyttää tuon virheen aina, jos tulkki saa jotain outoa vastaan.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:Eli tuon pistät yksinään ja käännät. Ja tämä oli siis puhdasta offtopicia, anteeksi siitä.Code: Select all
lol + 1
-
- Active Member
- Posts: 101
- Joined: Tue Aug 28, 2007 2:27 pm
Re: CB Brainfuck
OFFTOPIC:
Entäs jos jossakin kohtaa muualla on samat 8 tavua (voi olla aika harvassa)?_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.
Re: CB Brainfuck
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ää.jannepelaa wrote:OFFTOPIC:Entäs jos jossakin kohtaa muualla on samat 8 tavua (voi olla aika harvassa)?_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.