Professional Documents
Culture Documents
Forth - Programski Jezik
Forth - Programski Jezik
ADNA ČORBO
PROFESOR:
DR.SCI. SAMIR RIBIĆ
KURS:
PROGRAMSKI JEZICI I PREVODIOCI
UVOD U FORTH .................................................................................................................................. 3
OSNOVA FORTH JEZIKA ................................................................................................................. 3
POCETAK FORTH-A .........................................................................................................................4
Pisanje programa u FORTH-u..................................................................................................4
Snalaženje u jeziku ..................................................................................................................... 5
Prednosti i mane .......................................................................................................................... 6
ARHITEKTURA FORTH-A ............................................................................................................... 7
VIRTUALNA MAŠINA................................................................................................................... 7
EFIKASNOST ................................................................................................................................. 7
STEKOVI .......................................................................................................................................... 7
Tumačenje i sastavljanje ........................................................................................................... 8
Faktoring ........................................................................................................................................ 9
SINTAKSA FORTH-A...................................................................................................................... 10
Definisanje riječi ........................................................................................................................ 12
Rječnik........................................................................................................................................... 12
Numerički unos .......................................................................................................................... 14
Komande za manipulisanje stekom .................................................................................... 16
Komentari .................................................................................................................................... 17
Stvaranje izlaza.......................................................................................................................... 18
Uvjeti i petlje ................................................................................................................................ 19
Varijable i konstante .................................................................................................................22
Nizovi ............................................................................................................................................ 24
Unos sa tastature ..................................................................................................................... 25
PODATKOVNI TIPOVI .....................................................................................................................26
PRIMJER FORTH PROGRAMA (SUDOKU) ...............................................................................29
REFERENCE .....................................................................................................................................32
Snalaženje u jeziku
Programi Fortha zadržavaju većinu svojih radnih varijabli na steku, a ne u
imenovanim varijablama, pa čitanje nekih odjeljaka koda može biti malo
zbunjujuće - čak i za iskusne. Tajna je u tome da su definicije kratke i
jednostavne.
Prednosti i mane
• PONIŠTENJE KEŠA
• KOMBINOVANA INTERAKTIVNOST
• IMENOVANJE
• MALI HARDVERSKI ZAHJTEVI
• NEMODULARNOST
• BRZINA RADA
STEKOVI
Forth sadrži dva steka, jedan za Ova vrsta podataka uključuje
spremanje povratnih adresa i jedan ograničenja i indekse petlje, podatke
za pohranu podataka. Prvi se niz uklonjene s nizom podataka, da bi se
naziva povratni stek, a drugi se zove smanjila količina manipulacija sa
stek podataka ili parametara. stekom koja bi se inače dogodila.
Povratni paket sadrži povratne Postoji niz riječi koje se koriste za
adrese svih riječi koje su pozvane, prijenos podataka između skupina.
ali još nisu preostale. Povratni stek Stek podataka je učinkovita metoda
koristi se i za spremanje prijenosa podataka između riječi
privremenih podataka koji mogu ući koje čine program Forth. Svaka riječ
u put samo ako se zadrže u steku kojoj su potrebni podaci uzima se s
podataka. vrha steka i vraća rezultate na vrh
steka.
Tumačenje i sastavljanje
Forth sadrži i prevoditelja i tumača. Tumačenje znači preuzimanje unesenog
teksta, pretvaranje u obrazac koji mašina može izvršiti, izvršavanje tog
obrasca i odbacivanje izvršnog obrasca. Sažimanje znači uzimanje ulaznog
teksta, potpuno pretvaranje u mašinski izvršni obrazac, zadržavanje
izvršnog oblika i odbacivanje teksta. To može stvoriti program koji se
pokreće vrlo brzo, ali ne možete ništa promijeniti ako prvo ne uredite izvorni
tekst, zatim ga sastavite (koristeći zaseban program koji se zove kompajler),
a zatim učitate izvršni kod kada ga želite pokrenuti. Bilo koji tekst predan
Forthu, bilo s tastature ili s hard diska, izvršava se ili sastavlja. Zapamtite,
sve naredbe Forth-a unaprijed su definisane 'riječi' u njegovim "rječnicima",
te stoga Forth može potražiti adresu određene riječi za kasnije izvršavanje.
Neke riječi u Forthu mijenjaju način na koji prevoditelj razumije tekst. Na
primjer, mogli bismo definisati riječ koja daje kvadrat vrijednosti.
Faktoring
Faktoring je izraz koji programeri Fortha koriste za podjelu složenih funkcija
na nekoliko manjih. Ključna je aktivnost u pisanju dobrog Forth-a. To je
ujedno i ključni razlog zašto su dobro napisani programi Fortha manji od onih
napisanih na mnogim drugim jezicima. Forth potiče ponovnu upotrebu koda u
finoj granici. Zbog dvosmjerne virtuelne mašine, režimi za faktoriranje,
performanse i veličina koda su vrlo niski. Nadmašuju ih prednosti
jednostavne ponovne upotrebe koda, što poboljšava kompaktnost koda,
pouzdanost i održivost. Veličina koda je smanjena jer se kôd zove, a ne
ponavlja. Pouzdanost je poboljšana, jer je mali kod lakše testirati.
Održavanje se poboljšava ako je kôd jednostavan i pojavljuje se samo
jednom.
Ako se kôd pojavljuje samo jednom i nema nuspojava poput izmjene varijabli,
može se u potpunosti prepisati s pouzdanjem pod uvjetom da učinak steka
ostane isti.
znači da Forth nije mogao pronaći definiciju za foo i to nije valjan broj.
Možemo stvoriti vlastitu definiciju fooa pomoću dvije posebne riječi pod nazivom:
(dvotačka) i; (tačka i zarez). Dvotačka je naš način kazivanja Forth-u da želimo
stvoriti definiciju. Prva riječ nakon : postaje naziv definicije, a ostale riječi (do ;) čine
tijelo definicije. Uobičajeno je da između imena i tijela definicije postoje dva
razmaka. Također Forth je case-insensitive tako da riječi foo, FOO kao i FoO
pozivaju istu komandu. Pokušajte unijeti sljedeće:
Rječnik
Rječnik sadrži sve izvršne rutine (ili riječi) koje čine Forthov sistem. Programske
rutine unosa su unaprijed definisane u rječniku i postaju dostupne pri pokretanju
sistema. Izborni materijali se po izboru sastavljaju nakon pokretanja sistema.
Korisnički definisane riječi su unosi koje korisnik dodaje. U konfiguraciji za više
korisnika sistemske, izborne definicije dostupne su svim korisnicima, dok su
korisnički definisane riječi dostupne samo korisniku koji ih definiše. Inače, nema
razlike u veličini, brzini ili strukturi. Korisničke riječi možete učiniti dostupnim
drugim korisnicima jednostavnim učitavanjem s ostalim izborima. Osnovni oblik tj.
najčešća vrsta definicije riječi je:
gdje je dddd jedna ili više važećih znamenki prema trenutnoj bazi ili radix,
neučinkovitom za korisnika. Korisnička varijabla BASE (Vratite adresu ćelije koja
sadrži trenutni radijski broj pretvorbe) uvijek se koristi kao radix. Svi numerički
nizovi moraju biti završeni praznim ili povratnim kolicima (carriage return) . Ako se
nađe drugi znak - tj. , pojavit će se znak koji nije valjan znak u trenutnoj bazi, niti
interpunkcijski znak niti znak razmaka – tada mogu prekinuti. Unutar broja ne
smije biti razmaka.
Na sistemima koji omogućuju ugrađeni interpunkcijski znak, znakovi prikazani u
tablici dva mogu se pojaviti u broju. Vodeći znak minus, ako postoji, mora
neposredno prethoditi prvom znaku ili interpunkcijskom znaku.
Daje rezultat:
<- Vrh steka
Daje rezultat:
<- Top
Daje rezultat:
<- Top
over uzima drugi element sa vrha steka i postavlja njegov dupikat na vrh steka:
Daje rezultat:
<- Top
Daje rezultat:
<- Top
Komentari
Komentari ugrađeni u jezgru Fortha nalaze se u zagradama. Na primjer:
Riječ mora imati razmak iza nje, tako da se može prepoznati i izvršiti kao naredba
(za početak komentara). Nije potreban razmak prije ograničavača desne zagrade
koji se zatvara. Na većini sustava znak \ (kosa crta) je također definisana, što
ukazuje da je cijeli ostatak trenutnog retka izvornog koda komentar.
Riječ (Imajte na umu prethodnu tačku) je poput ( ali započinje komentar koji će
se prikazati kad se nađe. Ako se dogodi unutar definicije, tekst će se prikazati kada
je definicija sastavljena, a ne kada se izvršava .Obično se koristi u izvornom kodu
za označavanje napretka u izvršavanju, npr .:
Rezultat daje:
emit može se koristiti za ispis brojeva kao ascii znakova. Baš kao . izlazi broj na
vrhu snopa, emitira izlaze tog broja kao ascii znak. Na primjer:
Za razliku od., emit ne daje nikakav prostor nakon svakog znaka, omogućujući vam
da izgradite proizvoljne nizove izlaza.
Daje rezultat:
Rezultat je:
Uvjeti i petlje
Forth, kao i većina drugih jezika, ima uvjete i petlje za kontrolu protoka vašeg
programa. Da bismo shvatili kako oni funkcioniraju, prvo moramo razumjeti
booleans u Forthu.
Booleans
U Forthu zapravo ne postoji logični tip. Broj 0 tretira se kao lažni, a bilo koji drugi
broj je istinit, mada je kanonska stvarna vrijednost -1 (svi logički operateri vraćaju
0 ili -1).
Za provjeru da li su dva broja jednaka koristimo :
Prvi redak jednak je 3 <4 i 20 <30 u jeziku koji se temelji na C. Drugi redak je
ekvivalent 3 <4 | 20> 30. Treći redak jednak je! (3 <4).
and, or, i invert sve su bitne operacije. Za dobro oblikovane zastave (0 i -1) oni će
raditi kako se očekuje, ali će dati pogrešne rezultate za proizvoljne brojeve.
IF THEN
Sada napokon možemo doći do uvjeta. Uvjeti u Forthu mogu se koristiti samo
unutar definicija. Najjednostavnija uvjetna izjava u Forthu je IF THEN, što je
ekvivalentno standardu IF izjava u većini jezika. Evo primjera definicije koja
upotrebljava IF i THEN. U ovom primjeru također koristimo mod, koja vraća modul
gornja dva broja na steku. U ovom slučaju, gornji broj je 5, a drugi je ono što je bilo
postavljeno na stek prije nego što pozovete buzz ?. Stoga je 5 mod 0 = boolov izraz
koji provjerava je li vrh steka djeljiv sa 5.
Rezultat:
Izlaz:
Ovog puta IF klauza je sve između IF i ELSE, a ELSE klauza je sve između ELSE i
THEN.
DO LOOP
DO petlja u Forthu najviše nalikuje na FOR petlju za većinu jezika temeljenih na C. U
tijelu DO petlje, posebna riječ i gura trenutni indeks petlje na stek.
Gornje dvije vrijednosti na steku daju početnu vrijednost (uključivo) i završnu
vrijednost (ekskluzivno) za vrijednost i. Početna vrijednost uzima se s vrha steka.
Evo primjera:
Varijable i konstante
Forth vam također omogućuje spremanje vrijednosti u varijabli i konstanti.
Varijable vam omogućuju da pratite promjene vrijednosti bez potrebe da ih
pohranjujete u stek. Konstante vam daju jednostavan način navođenja vrijednosti
koja se neće promijeniti.
Varijable
Budući da ulogu lokalnih varijabli uglavnom igra stek, varijable u Forthu se više
koriste za spremanje stanja koje će možda biti potrebno u više riječi.
Definisanje varijabli je veoma jednostavno:
Na hrpi biste trebali vidjeti vrijednost 1000. Ova Forth implementacija proizvoljno
započinje spremanje varijabli na memorijsku lokaciju 1000.
Riječ ! pohranjuje vrijednost na memorijskoj lokaciji na koju se odnosi varijabla, a
riječ @ preuzima vrijednost s memorijskog mjesta:
Nizovi
Forth ne podržava tačno nizove, ali vam omogućuje da dodijelite područje
međusobne memorije, slično poput nizova u C. Da biste dodijelili ovu memoriju,
upotrijebite riječ.
Ovaj primjer stvara memorijsku lokaciju zvanu brojevi i zadržava tri dodatne
memorijske ćelije nakon ove lokacije, dajući ukupno četiri memorijske ćelije.
(ćelije se množe samo sa širinom ćelije, što je u ovoj implementaciji 1)
numbers 0 + daje adresu prve ćelije u nizu. 10 numbers 0 +! pohranjuje vrijednost 10
u prvu ćeliju niza.
Unos sa tastature
Forth ima posebnu riječ koja se zove , a koja se koristi za prihvaćanje unosa s
tastature. Kad se izvrši riječ , izvršenje se zaustavlja dok se ne pritisne tipka.
Nakon pritiska na tipku, kôd te tipke se gura na stek.
Ovaj kod radi sljedeće:
Kada pokrenemo ovaj kod nista se ne dešava. To je zato što tumač čeka na unos
vaše tastature. Kada pritisnemo A, broj 65 se pojavljuje sto je njegova ASCII
vrijednost. Isto vrijedi i za B(66) i za C(67) i trebalo bi izgledati ovako:
Notacija Opis
byte 8-bitna vrijednost
cell Fiksna veličina ćelije definisana implementacijom određena je u
adresnim jedinicama i odgovarajućem broju bita. Elementi skupa
podataka, elementi povratnog steka, adrese, izvršni tokeni, zastave i
cijeli brojevi su jedna ćelija.