Forth

Forth wurde wesentlich von ChuckMoore entwickelt und folgt dem Prinzip KeepItSimpleSmall.

Forth zeichnet sich deswegen durch Kompaktheit, hohe Portabilität und PostfixNotation aus und ist besonders für Microcontroller geeignet. Durch seine einfache Struktur war es möglich kostengünstige Forth-prozessoren (Stack-CPUs) zu bauen. Infos sh. Literatur (unten).

Forth ist mit Lisp (LispLanguage) und Postscript (PostScript) verwandt, aber dennoch ganz anders.

Forth wird sowohl interpretiert als auch compiliert, hier ein Beispiel für die Berechnung der Primzahlen mit dem Sieb Eratosthenes.

Auch wenn : angeblich in den "compiler mode" schaltet, was hat das eigentlich mit einem Compiler zu tun? Sieht für mich aus wie ein ordinärer Interpreter, so wie in PerlLanguage etwa.

Hier die Antwort (http://www.forth-ev.de/forth.html): Forth arbeitet immer in einem von zwei Modi; Interpretation oder Compilation. Ein Textinterpreter verarbeitet den Eingabestrom, der von Tastatur oder einem Massenspeicher kommt, und zerlegt ihn in eine Folge von durch Leerzeichen getrennte Zeichenketten. Diese Zeichenketten werden im Wörterbuch gesucht und im Interpretermodus wird ihr zugehöriger Code aufgerufen. Zahleneingaben werden entsprechend konvertiert und auf dem Stack abgelegt. Der : (Colon) ist ein Forth-Wort wie alle anderen; er legt jedoch einen neuen Wörterbucheintrag mit dem Namen des neuen Wortes an und schaltet den Compilermodus ein. Nun werden für die meisten Worte aus dem Eingabestrom entsprechende Aufrufe in das neu angelegte Wort kompiliert. Demzufolge besteht ein kompiliertes Forth-Wort aus einer Folge von Aufrufen anderer Wörter, die dann entsprechend abgearbeitet werden.

Einige Worte mit einem speziellen Immediate-Flag werden im Compilermodus nicht kompiliert sondern statt dessen ausgeführt. Diese Immediate-Worte sind Compiler-Hilfsworte, die dem Aufbau spezieller Sprachkonstrukte dienen. Ein IF kompiliert z. B. eine entsprechende Sprungstruktur in das neue Wort. Das abschließende THEN (in älteren Dialekten manchmal ENDIF) kann dann auf eine korrekte Verschachtelung prüfen und Sprungziele auflösen. Ein weiteres Immediate-Wort ist das ; welches die Definition beendet und das System zurück in den Interpretermodus versetzt. Da der Programmierer selbst Immediate-Worte schreiben kann, hat er damit die Möglichkeit auch den Compiler selbst zu erweitern.

Eine weitere Besonderheit sind Definitionsworte, die zur Erzeugung von Datenstrukturen verwendet werden. Sie kombinieren eine CREATE-Teil, in dem alle Aktionen beschrieben werden, die zum Anlegen der neuen Datenstruktur erforderlich sind (Reservierung von Speicher, Initialisierung, ...) mit einem DOES>-Teil, in dem das Laufzeitverhalten der aller mit diesem Wort erzeugten Datenstrukturen beschrieben werden kann. oder zum besseren Verständnis: http://www.tinyboot.com/fig1.gif (http://www.tinyboot.com/forth.html)

Beispiele

100 constant upperbound create sieve upperbound 1 + cells allot
: clearsieve upperbound 0 do true sieve i cells + ! loop ;
: fillsieve dup 2 * upperbound swap do false sieve i cells + ! dup +loop drop ;
: showprimes cr upperbound 2 do sieve i cells + @ if i . cr then loop ;
: calcprimes clearsieve upperbound 2 / 2 do sieve i cells + @ if i fillsieve then loop ;
: primes clearsieve calcprimes showprimes ;
primes

Der : leitet ein neues Wort ein bis zum nächsten ;

Wenn man schnell die Antwort auf die Frage nach dem Leben, dem Universum und den ganzen Rest berechnen will:

7 6 * .

;-)

Muß das nicht 7 9 * . heißen?

Forth-Projekte

Forth-Compiler

Standard

Literatur

Forth wikis


CategoryLanguage

GAOSWiki: ForthLanguage (last edited 2008-05-22 18:49:28 by localhost)

Ersteller von Seiten stellen Inhalt unter der GeneralPublicLicense zur Verfügung Alle Seiten unter http://gaos.org, (c)2001-2038 GAOS e.V., Impressum