Pro vytváření nových slov se používají pouze dvě zabudovaná slova
To není tak docela pravda. Jde pouze o tzv. colon definitions. Nové slovo ve strojovém kódu vytvořím pomocí slova CODE jméno a tělo definuji buď přímo pomocí kódů instrukcí a operandů přes slova , (čárka), nebo si zapnu slovník ASSEMBLER a pak píšu v Assembleru (ten má obvykle ovšem také FORTHovskou notaci, tj. registry/operandy následované instrukcí). Definice takového slova se ukončuje slovem END-CODE (nebo C;). Je ale nutné si uvědomit, že základním slovem k vytvoření nového slova ve slovníku je CREATE (nebo <BUILDS), které je využito k definici všech možných typů slov, včetně proměnných a konstant přes slova VARIABLE a CONSTANT - protože konstanta je také jen slovo, jež zanechá na zásobníku odpovídající hodnotu, stejně jako proměnná, která na něm zanechá adresu. Slovo je i ( - tj. komentář, fungující tak, že dané slovo zkonzumuje a zahodí vše, až do symbolu pravé kulaté závorky včetně, nebo \ - tj. komentář, fungující tak, že toto slovo zkonzumuje a zahodí vše až do konce řádku. Dokonce mohu vytvořit zákeřnou definici 7 CONSTANT 5 a opepřit to : + - ; - FORTH buduje slovník jako zásobník, takže novější definice překryje starší, což se projeví v interpretačním režimu od tohoto okamžiku dále a u všech nově definovaných slov (dříve definovaná slova se budou stále odkazovat na původní definici). A ten první špek využívá toho, že FORTH se nejprve pokouší vstupní řetězec interpretovat jako slovo a teprve když se mu to nepodaří, zkusí to převést na číslo - v tomto případě ale ve slovníku narazí na slovo 5, jež na zásobník ukládá hodnotu 7. Teprve když se nepodaří vstupní řetězec interpretovat ani jako číslo, vyhlásí chybu. A jelikož mechanismus interpretace čísel se řídí proměnnou BASE, zajímavá situace nastane, vložíme-li do ní hodnotu 36 - tedy sdělíme-li interpretu, že veškerá čísla má očekávat v třicetšestkové soustavě. Jen nepovím, že v tom případě může platné číslo obsahovat znaky 0..9 a A..Z. ;)
jj já vím, ale nechtěl jsem hned v prvním článku do toho plést přechody do COMPILE atd. Myslel jsem to z pohledu běžného programátora - tomu si stačí zapamatovat : SLOVO ... ; Na to, jak to vypadá uvnitř, stejně přijde při implementaci vlastního FORTHu (a k tomu doiteruje možná každý, kdo FORTH používá :-)
Ja bych urcite zacal slovy jako DEPTH a S. (tecka neni konec vety, ale klasicka forthovina co kasle na to jak to delaji vsichni ostatni a pro efektivitu si to udela po svem, stejne jako slovo carka)
Kdybych ty slova pouzival od zacatku na testovani tak by me to hodne usnadnilo pouzivani. Primlouvam se za S. na konci kazde ukazky!
Extended fig-Forth by to mel umet.
https://www.atarimania.com/games/atari-400-800-xl-xe-utilities-extended-fig-forth-29927
Podle stranky 25 https://www.atarimania.com/8bit/files/Extended_Fig_Forth_rev_2.pdf
ale neni problem si to nejak sesmolit sam jako vetsinu slov z neceho co konkretni implementace umi
: .s depth dup ." <" 0 .R ." > " begin dup 0 > while dup pick . 1 - repeat drop ;
PS: Mimochodem na strane 24 je jako prvni slovo k debugovani uvedeno B? co ma vypisovat skrytou behovou promenou kde je ulozeno v jake soustave se vypisuji cisla.
Na strance 38 (pdf, nebo 29 ve vnitrnim cislovani) je videt ze to umi i BASE co prezilo dodnes.
https://forth-standard.org/standard/core/BASE
jj to je dobrý nápad. Jinak fig-FORTHovská slova jsou třeba tady https://github.com/ForthHub/FIG-Forth/blob/master/glossary.txt
Nemusis ani gforth instalovat, protoze na netu je hodne online stranek kde si to muzes vyzkouset.
: test 60 emit 62 emit cr ; : sto 100 ; sto . test hex sto . test : test 60 emit 62 emit cr ; : sto 100 ; sto . test dec sto . test
Az budes premyslet proc to posledni cislo je jinak nez cekas tak zacni premyslet nad devatym radkem, co tam je, co si myslis ze tam je a co tam skutecne je.
Emulátor pro opravdové muže:
https://pavel-krivanek.github.io/forth/teletype/
Nebo pro méně zmužilé měkejše:
https://pavel-krivanek.github.io/forth/crt/