京冀共建密云上游生态清洁小流域 促农民增收
Pojawienie si? |
百度 如果去有小婴儿的家庭走亲访友,也可送上“苍猊犬包屁衣”。
1970 |
---|---|
Paradygmat |
proceduralny, zorientowane stosowo, refleksyjny, concatenative |
Typowanie |
brak |
Implementacje |
SwiftForth (Forth, Inc.) |
Twórca | |
Strona internetowa |
Forth – j?zykiem programowania wysokiego poziomu, nale??cy jednocze?nie do kategorii j?zyków tzw. bliskich sprz?towi, czasem (potocznie) u?ywa si? okre?lenia asemblerowy j?zyk programowania wysokiego poziomu.
Charakterystyka j?zyka Forth
[edytuj | edytuj kod]Do cech charakterystycznych tego j?zyka nale??:
- natychmiastowa interpretacja wprowadzonych s?ów,
- natychmiastowa kompilacja definicji nowych s?ów,
- wykonywanie operacji za po?rednictwem stosu,
- zapis wyra?eń arytmetycznych w odwrotnej notacji polskiej.
Specyfika j?zyka sprawia, ?e jest to j?zyk dla specjalistów, g?ównie z dziedziny automatyki. Jego g?ówne zastosowania to systemy czasu rzeczywistego i sterowanie urz?dzeniami.
Twórc? j?zyka jest Amerykanin Charles H. Moore, który stworzy? pod koniec lat 60. pierwsz? jego implementacj?.
Program napisany w Forth sk?ada si? z sekwencji s?ów rozdzielonych separatorami (jeden ze znaków: spacja, znak o kodzie zero #0, powrót karetki #13). S?owa pami?tane s? w s?owniku, w którym mo?na tworzy? pods?owniki i dowolnie je rozszerza? (a? do granic mo?liwo?ci systemu komputerowego). Nowo definiowane s?owa s? natychmiast kompilowane i gotowe do u?ycia.
Specyfika tego j?zyka prowadzi do programowania od do?u do góry (od szczegó?u do ogó?u).
Interpreter i kompilator
[edytuj | edytuj kod]W trakcie swojego dzia?ania interpreter j?zyka mo?e znajdowa? si? w jednym ze stanów:
- definiowania,
- wykonywania.
Je?eli Forth znajduje si? w stanie wykonywania, wprowadzane s?owa s? natychmiast interpretowane i wykonywane. W?ród s?ów j?zyka Forth znajduj? si? s?owa, tzw. kompilatory (w nomenklaturze Forth), standardowe (np. ?:”, ?CONSTANT”) lub zdefiniowane przez programist?, które powoduj? przej?cie systemu w stan definiowana. W tym stanie kolejne s?owa s? traktowane jako cz??? definicji nowego – w?a?nie definiowanego – s?owa, a? do napotkania s?owa kończ?cego definicj? (standardowo ?;”). Taka definicja podlega kompilacji, a nowo zdefiniowane s?owo umieszczone zostaje w s?owniku.
S?owa
[edytuj | edytuj kod]S?owa j?zyka mog? nale?e? do kategorii:
- operatorów biernych,
- operatorów czynnych (które wykonywane s? tak?e wtedy, gdy interpreter znajduje si? w stanie definiowania, chyba ?e programista u?yje s?owa, które spowoduje umieszczenie w polu nowej definicji adresu tego operatora zamiast jego wykonanie).
Kompilatory
[edytuj | edytuj kod]Poj?cie kompilatora w Forth
[edytuj | edytuj kod]Kompilatorem (w nomenklaturze Forth), nazywa si? s?owo, które powoduje przej?cie systemu Forth w stan definiowania, zinterpretowanie najbli?szego s?owa jako nazwy nowego operatora (s?owa j?zyka Forth) i w konsekwencji skompilowanie kolejnych s?ów zawartych w aktualnie przetwarzanej definicji wed?ug zadanych (zawartych w definicji kompilatora) instrukcji oraz umieszczenie nowego s?owa w s?owniku (ewentualnie w pods?owniku).
W Forth wbudowane s? standardowe kompilatory, takie mi?dzy innymi jak: ?:” – podstawowy kompilator operatorów, ?CONSTANT” – definiowanie sta?ych i inne. Programista ma tak?e mo?liwo?? definiowania w?asnych kompilatorów.
(POTEGA 3; a -- b)
- POW DUP DUP * *;
5 POW
Zdefiniowano operator bierny POW, który jest podprogramem w rozumieniu ?tradycyjnych” j?zyków programowania – podniesienie do 3 pot?gi, który zostaje skompilowany i umieszczony w s?owniku. Po tej operacji mo?e by? u?ywany tak jak s?owa standardowe. Umieszczenie na stosie liczby 5 (w stanie wykonywania) i wykonanie operatora POW powoduje umieszczenie na stosie wyniku operacji (5*5*5). Podprogram taki nie definiuje parametrów, pobiera po prostu okre?lon? w jego definicji liczb? argumentów ze stosu. Cz?sto stosowan? konwencj? jest umieszczenie w komentarzu opisu parametru (liczby pobieranych argumentów) i zwracanych na stos warto?ci (ich liczby). W powy?szym przyk?adzie, okre?lono jeden parametr ?a” (nazwa nieistotna) i jedn? warto?? stanowi?c? rezultat ?b” (nazwa nieistotna) podprogramu.
Kompilatory standardowe
[edytuj | edytuj kod]J?zyk Forth posiada zdefiniowane kompilatory standardowe:
- CONSTANT nazwa (a --): definicja operatora (s?owa o w?a?ciwo?ciach sta?ej) o nazwie jak najbli?sze s?owo wej?ciowe nazwa i warto?ci a pobranej ze stosu,
- VARIABLE nazwa (a --): definicja operatora (s?owa o w?a?ciwo?ciach zmiennej) o nazwie jak najbli?sze s?owo wej?ciowe nazwa i warto?ci a pobranej ze stosu; wykonanie operatora powoduje umieszczenie adresu danej na stosie,
- nazwa s?owa_definiuj?ce ; (--): utworzenie operatorów, które mo?na przez analogi? porówna? do podprogramu w j?zykach programowania ogólnego przeznaczenia,
- USER: podstawowy kompilator niskopoziomowy, wiele s?ów standarodwych jest utworzonych za pomoc? tego kompilatora,
- VOCABULARY: utworzenie s?ownika.
Definiowanie kompilatorów
[edytuj | edytuj kod]Definicja nowego kompilatora ma posta?:
- nazwa
<BUILDS s?owa kompiluj?ce DOES> s?owa wykonawcze
Instrukcje strukturalne
[edytuj | edytuj kod]Wprowadzenie
[edytuj | edytuj kod]Forth posiada, jak wi?kszo?? j?zyków programowania wysokiego poziomu, zestaw standardowych instrukcji strukturalnych umo?liwiaj?cych programowanie z?o?onych problemów i algorytmów. Jednak jego znamienn? cech? jest rozszerzalno?? przejawiaj?ca si? m.in. mo?liwo?ci? definiowania w?asnych, nowych instrukcji strukturalnych.
Standardowe instrukcje strukturalne
[edytuj | edytuj kod]warunek IF instrukcje wykonywane gdy warunek spe?niony [ELSE instrukcje wykonywane gdy warunek nie spe?niony] THEN | ENDIF
przy czym warunek jest po prostu ci?giem instrukcji j?zyka Forth, a operator IF bada czy na stosie jest warto?? ró?na od zera:
- je?eli tak to wykonywane s? instrukcje wykonywane gdy warunek spe?niony,
- je?eli nie to wykonywane s? instrukcje wykonywane gdy warunek nie spe?niony lub instrukcje po s?owie THEN (lub ENDIF co jest równowa?ne) je?eli fraza ELSE zosta?a pomini?ta.
SELECT KEY 10 = IF + ELSE * THEN; 2 3 SELECT
przed_DO DO instrukcje LOOP | +LOOP po_LOOP
Operator DO ustala (na podstawie warto?ci ze stosu) dwa parametry iteracji: ograniczenie – warunek zakończenia, oraz warto?? pocz?tkow?. Dla s?owa LOOP krok wynosi +1, dla +LOOP warto?? kroku pobierana jest ze stosu, przy czym mo?e to by? warto?? ujemna. Cykl wykonywany jest co najmniej jednokrotnie, gdy? sprawdzenie warunku wykonywane jest na końcu. Operator I udost?pnia warto?? zmiennej steruj?cej cyklem.
CIAG 10 2 DO I. 2 +LOOP; (wyprowadzenie liczb 2 4 6 8)
- instrukcja repetycyjna
BEGIN przed_WHILE WHILE po_WHILE REPEAT
Po wykonaniu przed_WHILE operator WHILE sprawdza warto?? na stosie, je?eli jest to zero to kończy instrukcj? REPEAT, je?eli nie to wykonywane jest po_WHILE a operator REPEAT powoduje skok do BEGIN i powtórzenie cyklu.
WAINT_SP BEGIN KEY 32 = 0= WHILE REPEAT
BEGIN instrukcje AGAIN
Definiowanie w?asnych instrukcji strukturalnych
[edytuj | edytuj kod]J?zyk ten umo?liwia definiowanie w?asnych instrukcji strukturalnych przy pomocy operatorów skoków warunkowych i bezwarunkowych 0BRANCH i BRANCH.
Stosy w systemie j?zyka Forth
[edytuj | edytuj kod]System Forth pos?uguje si? dwoma stosami:
- stosem parametrów,
- stosem powrotów.
Stos parametrów
[edytuj | edytuj kod]Stos parametrów jest to podstawowy element systemu, równie? dla u?ytkownika, na którym wykonywane s? operacje. S?u?y przede wszystkim do przekazywania argumentów operacji i przekazywania wyników operacji (podprogramów).
Stos powrotów
[edytuj | edytuj kod]Stos powrotów w zasadzie pe?ni rol? stosu systemowego. Lista operacji podstawowych na stosie powrotów jest do?? ograniczona. Do najwa?niejszych z nich nale??:
- >R (a --): przeniesienie danej s?owowej a ze stosu parametrów na stos powrotów,
- R> (-- a): umieszczenie danej s?owowej a na stosie parametrów ze stosu powrotów,
- R (-- a): skopiowanie danej s?owowej a na stosie parametrów ze stosu powrotów,
- RP! (--): usuni?cie wszystkich danych ze stosu powrotów,
- RP@ (-- a): umieszczenie na stosie parametrów adresu szczytu stosu powrotów,
- R0 (-- a): umieszczenie na stosie parametrów adresu pustego stosu powrotów (pocz?tku).
Jak wida? s? to g?ównie operacje steruj?ce, s?u??ce nast?puj?cym celom (dla których przeznaczony jest stos powrotów):
- przechowywanie ?ladów wzajemnych wywo?ań operatorów (podprogramów),
- przechowywanie parametrów instrukcji strukturalnych,
- pomocniczy stos roboczy dla danych,
- chwilowa pami?? podr?czna dla u?ytkownika (programisty),
- inne.
System j?zyka Forth automatycznie wykorzystuje stos powrotów do przechowywania licznika interpretera IP steruj?cego wywo?ywaniem kolejnych s?ów (jako podprogramów).
S?ownik
[edytuj | edytuj kod]S?ownik w j?zyku Forth skupia w sobie wszystkich zdefiniowane i dost?pne do u?ycia s?owa. Jest on struktur? drzewiast?, podzielon? na pods?owniki, które mog? by? podzielone na kolejne pods?owniki, przy czym g?ówny s?ownik nosi nazw? FORTH i skupia podstawowe operacje w tym zdefiniowane w kodzie maszynowym. Dodatkowo zwykle definiowane s? tak?e:
- EDITOR: s?owa dotycz?ce edytora,
- ASSEMBLER: umo?liwiaj?cy programowanie hybrydowe.
Zawsze jeden s?ownik jest s?ownikiem bie??cym, od którego rozpoczyna si? poszukiwanie definicji s?owa. Bezpo?rednio po uruchomieniu bie??cym jest s?ownik FORTH. Operacje s?ownikowe:
- VOCABULARY nazwa IMMEDIATE: zdefiniowanie nowego s?ownika (w bie??cym s?owniku definiowania),
- nazwa: ustalenie bie??cego s?ownika,
- CONTEXT: zmienna przechowuj?ca odniesienie do bie??cego s?ownika,
- nazwa DEFINITIONS: zmiana s?ownika definiowania,
- CURRENT: zawiera odniesienie do bie??cego s?ownika definiowania.
Nale?y zauwa?y?, ?e przy takiej organizacji mo?na definiowa? wielokrotnie to samo s?owo w ró?nych s?ownikach w ró?ny sposób, a to, która definicja zostanie u?yta, zdeterminowane b?dzie kolejno?ci? przeszukiwania s?owników. Mo?na to uzna? za rodzaj przeci??ania nazw.
Zobacz te?
[edytuj | edytuj kod]Bibliografia
[edytuj | edytuj kod]- Jan Ruszczyc, Poznajemy FORTH, SOETO Warszawa 1987 r., Seria: Informatyka mikrokomputerowa
- Jan Bielecki, J?zyk FORTH, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, Seria: Mikrokomputery, ISBN 83-204-0930-6.
- Roland Wac?awek, Przewodnik po informatyce, Wydawnictwa Szkolne i Pedagogiczne, Warszawa 1989, ISBN 83-02-03482-7.
- Mike Duck, J?zyki mikrokomputerów Przewodnik dla pocz?tkuj?cych. Basic, Pascal, Logo, Prolog, Comal, Forth, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, t?umaczenie: Marcin Turski, ISBN 83-204-0966-7.