Enterprise Forever
:HUN => Programozás => Topic started by: Povi 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ó.
-
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). :-)
-
És mi az a BF?
-
egy 8 utasítással rendelkező programozási nyelv:
http://en.wikipedia.org/wiki/Brainfuck
-
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 :-)
-
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.
-
ja, és a kilépés se működik normálisan... :oops:
-
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 ...
-
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)
-
List meg Edit nem lesz benne? :oops:
-
List meg Edit nem lesz benne? :oops:
Nem terveztem...
Edit-re ott a WP :-)
Vagy a Notepad :-)
-
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:
-
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:
+ 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:
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... :-)
-
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...
-
Nagyon rövid összefoglaló a Brainfuck fordítóról:
http://beac.uw.hu/bf.html