Welcome, Guest. Please login or register.


Author Topic: Brainf*ck (Read 3732 times)

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Brainf*ck
« on: 2014.October.05. 21:31:04 »
Hiánypótló programot készítettem: Brainfuck fordító ENTERPRISE-ra! :-)

Jelenleg még nem végleges verzió, mert a forrásfájl betöltésnél nem lehet megadni fájlnevet, csak a "PROBA.BF" fájlt hajlandó beolvasni.

Forrásfájl betöltése után a "2" megnyomásával fordítódik le a program a 4000h címre, majd rögtön le is fut.

Tehát kihangsúlyoznám, hogy nem interpreter, hanem fordító!!! (életem első fordítóprogramja :-)). Nem tudom, van-e igény, hogy 5-ös fejlécű programot is fordítson? :mrgreen: Bár az már nem lenne igazán nagy munka. Viszont fordítás-optimalizálást még akarok bele tenni.

A képen a factor.b program futási eredménye látható.
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #1 on: 2014.October.05. 21:32:40 »
Ja, és hibaellenőrzés sincs, se a fájl-beolvasásnál, se a fordítás közben, feltételezi, hogy a "[" utasításnak meg van a "]" párja (oda-vissza). :-)
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Brainf*ck
« Reply #2 on: 2014.October.05. 21:36:25 »
És mi az a BF?

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #3 on: 2014.October.05. 21:38:10 »
egy 8 utasítással rendelkező programozási nyelv:
http://en.wikipedia.org/wiki/Brainfuck
*** Speicherplatz zu klein

Offline SzörG

  • EP fan
  • *
  • Posts: 224
  • Country: hu
    • ReTRo Tauta
Re: Brainf*ck
« Reply #4 on: 2014.October.05. 22:22:08 »
Povi :-) nem mondod hogy készítettél BrainF*ck-ot Ep-re ? :-D ennek nagyon örülök :-) még anno sok sok éve
vacakoltunk ilyen programozással a főiskolán poénból :-) ezt valószínűleg ki fogom próbálni :-)

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #5 on: 2014.October.05. 22:24:25 »
ennek örülök! :-)

rögtön rakok is fel egy javított verziót, ezen már van jobban megy a karakterbevitel (eddig is működött, csak nem írta ki a gépelt karaktert).

meg egy másik "bf" forráskódot, érdemes rögtön azzal kipróbálni :-)

Persze a bf fájlokat nem én írtam, hanem a netről szedegettem le őket.
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #6 on: 2014.October.05. 22:26:24 »
ja, és a kilépés se működik normálisan... :oops:
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Brainf*ck
« Reply #7 on: 2014.October.05. 23:41:55 »
Nem is tudom melyik volt az az "extrem" programozasi nyelv, amiben nagy hir, ha valaki tud _barmi_ mukodot csinalni, annyira extrem :-P Mondjuk sok ertelme annak mar nincs, a BF ehhez kepest meg mindig egyszeru, bar bizonyosan ide sorolhato az "extrem" nyelvek koze, mivel celszerusege szigoruan logikus elvek alapjan nem feltetlen optimalis, de ugye pont nem is ez volt a celja :)

Hmm, talan a Malbolge volt az, de csak guglizok eppen ...
« Last Edit: 2014.October.06. 01:13:06 by lgb »

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #8 on: 2014.October.07. 22:48:50 »
Itt egy véglegesnek szánt verzó a brainfuck fordítóból, a JS emuban, floppy image-n mintafájlokkal.
http://ep.lgb.hu/jsep/demo/?disk=http%3A%2F%2Fbeac.uw.hu%2Fbf1&mem=128&zt=no&autostart=yes&skiplogo=yes

Létezik egy mandelbrot-halmaz rajzoló brainfuck program is, de nem raktam fel a lemezre, mert 80 karakternél szélesebb képernyő kéne neki a futáshoz. (meg nem is volt türelmem kivárni, míg elkészül, míg max. sebességen se)
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Brainf*ck
« Reply #9 on: 2014.October.07. 23:05:30 »
List meg Edit nem lesz benne? :oops:

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #10 on: 2014.October.08. 07:23:12 »
Quote from: Zozosoft
List meg Edit nem lesz benne? :oops:
Nem terveztem...
Edit-re ott a WP :-)
Vagy a Notepad :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #11 on: 2014.October.08. 10:16:42 »
találtam is egy hibát a fordítóban:

túl kicsi a verem, és lefagy a rot13 fordítása közben... :oops:
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #12 on: 2014.October.08. 23:51:06 »
Itt a javított bf compiler:
http://ep.lgb.hu/jsep/demo/?disk=http%3A%2F%2Fbeac.uw.hu%2Fbf3&mem=128&zt=no&autostart=yes&skiplogo=yes

Ebben már bőven van verem, de jelenleg maximum 255 egymásba ágyazott ciklus lehet, ha ennél több van, fordításkor hibaüzenettel megáll. Ugyancsak hibaüzenettel megáll, ha páratlan "[", vagy "]" utasítás van a forráskódban (ez már az előző verzióban is meg volt).

A lefordított kódnak 16kB-ba bele kell férnie, de ha ennél nagyobb, nem kapunk hibaüzenetet, de nem fog működni. A fordított kód a 0x4000 - 0x7fff cím között kell lennie, ha ennél nagyobb, átlóg már 0x8000 fölé, ott pedig a Brainfuck definició szerint 30000 byte-os adatmemória kezdődik.

Szóval az az igazság, hogy maga a fordító baromi egyszerű, de ahhoz, hogy hülyebiztos legyen nagyon sok sallangot kell még írni hozzá... :-)

Egyébként azon is gondolkodom, hogy vajon ez fordító, vagy assembler? Van egy fickó, aki épített CPU-t FPGA-ból, ami közvetlenül futtatta a BF kódot.
Elég egyértemű a Bf utasítások és a Z80 utasítások között a megfeleltetés:
Code: [Select]
+    inc (hl)

-    dec (hl)

>    inc hl

<    dec hl

.    call outchar

,    call inchar

[    ld a,(hl)
     or a
     jp z,matching_address

]    jp matching_address
Még a teljesítményre lehetne rámenni, hogy ha pl. több "+" utasítás van egymás után, akkor azt ne inc (hl)-ek sorozatára fordítsa, hanem:
Code: [Select]
ld a,(hl)
add a,number
ld (hl),a
már két inc (hl) helyett is megéri, 22T helyett csak 21T (a fordítóm egyébként pontosan így fordít) -> de ezt majd a többi utasításra is meg kéne csinálni... :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #13 on: 2014.October.14. 21:28:43 »
Itt a legújabb (1.4-es) verzió a Brainfuck fordítóból, ezt most már tényleg véglegesnek szánom... :-)
http://ep.lgb.hu/jsep/demo/?disk=http%3A%2F%2Fbeac.uw.hu%2Fbf4&mem=128&zt=no&autostart=yes&skiplogo=yes
Az előző disk image-ket kitöröltem, szóval nem fognak működni a korábbi linkek.
Részletek majd később...
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Brainf*ck
« Reply #14 on: 2014.October.20. 10:47:05 »
Nagyon rövid összefoglaló a Brainfuck fordítóról:
http://beac.uw.hu/bf.html

*** Speicherplatz zu klein