Articles

Mai departe

2007 școli Wikipedia selecție. Subiecte înrudite: programare de calculator

Forth

Charles H. Moore, inventatorul Forth

enlarge

Charles H. Moore, inventatorul forth

paradigma:

procedural, orientat spre stivă

a apărut în:

anii 1970

proiectat de:

Charles H. Moore

dactilografiere disciplina:

Typeless

implementări majore:

Forth, Inc. dialecte:

colorForth, FCode

influențat de:

Burroughs large systems, Lisp, APL

influențat:

PostScript, Factor

Forth este un limbaj de programare și un mediu de programare, dezvoltat inițial de Charles H. Moore la Observatorul Național de radio astronomie din SUA la începutul anilor 1970. a fost formalizată în 1977 și standardizată de ANSI în 1994. Forth este uneori scris cu majuscule în urma utilizării obișnuite în anii anteriori, deși numele nu este un acronim.

un limbaj de programare procedural, orientat spre stivă și reflectorizant, fără verificarea tipului, Forth prezintă atât execuția interactivă a comenzilor (făcându-l potrivit ca shell pentru sistemele care nu au un sistem de operare mai formal), cât și capacitatea de a compila secvențe de comenzi pentru execuția ulterioară. Unele versiuni ulterioare (în special cele timpurii) compilează Cod filetat, dar multe implementări generează astăzi cod de mașină optimizat ca și alte compilatoare de limbi.

Forth este numit astfel pentru că ” fișierul care ține interpretul a fost etichetat FORTH, pentru software – ul 4th (next) generation-dar sistemul de operare a restricționat numele fișierelor la 5 caractere.”Utilizarea de către Moore a expresiei software de generația a 4-A (următoare) pare să fie anterioară definiției limbajelor de programare de generația a patra; el a văzut mai departe ca un succesor al compilați-link-go a treia generație limbaje de programare, sau software pentru hardware-ul „a 4-a generație”, nu un 4GL așa cum a ajuns să fie folosit termenul.

Prezentare generală

Forth oferă un mediu de programare independent format dintr-un interpret și compilator incremental orientat spre stivă, interactiv. Programarea în Forth este un proces interactiv, iterativ. Un sistem Forth este format din cuvinte (termenul folosit pentru subrutine Forth); cuvintele noi sunt definite în termeni de cuvinte vechi și nu se face nicio distincție între cuvintele care definesc al patrulea limbaj și cele pe care programatorul le creează. Un pachet tipic Forth constă dintr-un nucleu precompilat al cuvintelor de bază, pe care programatorul îl folosește pentru a defini cuvinte noi pentru aplicație. Aplicația completată poate fi salvată ca imagine, cu noile cuvinte deja compilate. În general, programatorii extind nucleul inițial cu cuvinte care sunt utile tipurilor de aplicații pe care le scriu și salvează acest lucru ca fundație de lucru.

Forth folosește stive separate pentru stocarea parametrilor subrutinei și a înregistrărilor de activare a subrutinei. Parametrul sau stiva de date (denumită în mod obișnuit stiva) este utilizată pentru a transmite date cuvintelor și pentru a stoca rezultatele pe care le returnează cuvintele. Legătura sau stiva de returnare (denumită în mod obișnuit rstack) este utilizată pentru a stoca adresele de returnare atunci când cuvintele sunt imbricate (echivalentul unui apel de subrutină) și pentru a stoca variabile locale. Există cuvinte standard pentru a muta datele între stive și pentru a încărca și stoca variabile pe stivă.

structura logică a Forth seamănă cu o mașină virtuală. Forth, în special versiunile timpurii, implementează un interpret interior care urmărește codul mașinii cu filet indirect, oferind un cod compact și rapid la nivel înalt care poate fi compilat rapid. Multe implementări moderne generează cod de mașină optimizat ca și alte compilatoare de limbi.

Forth a devenit foarte popular în anii 1980, deoarece era potrivit pentru microcomputerele mici din acea vreme, deoarece este compact și portabil. Cel puțin un computer de acasă, britanicul Jupiter ACE, avea mai departe în sistemul său de operare rezident în ROM. Forth este încă folosit astăzi în multe sisteme încorporate (dispozitive computerizate mici) datorită portabilității sale, utilizării eficiente a memoriei, timpului scurt de dezvoltare și vitezei rapide de execuție. Acesta a fost implementat eficient pe procesoarele RISC moderne și au fost produse procesoare care folosesc mai departe ca limbaj de mașină. Alte utilizări ale Forth includ ROM-urile de pornire a Firmware-ului deschis utilizate de Apple, IBM și Sun și ca controler de pornire în prima etapă a sistemului de operare FreeBSD.

Forth este un limbaj simplu, dar extensibil; modularitatea și extensibilitatea sa permit scrierea de programe la nivel înalt, cum ar fi sistemele CAD. Cu toate acestea, extensibilitatea îi ajută și pe programatorii săraci să scrie cod de neînțeles, ceea ce a dat o reputație de limbaj „doar pentru scriere”. Forth a fost folosit cu succes în proiecte mari și complexe, în timp ce aplicațiile dezvoltate de profesioniști competenți și disciplinați s-au dovedit a fi ușor de întreținut pe platforme hardware în evoluție de-a lungul deceniilor de utilizare.

perspectiva programatorului

Forth se bazează foarte mult pe utilizarea explicită a unei stive de date și a notației poloneze inverse (notație RPN sau postfix), utilizate în mod obișnuit în calculatoarele de la Hewlett-Packard. În RPN, operatorul este plasat după operanzii săi, spre deosebire de notația infix mai comună în care operatorul este plasat între operanzii săi. Notația Postfix face ca limba să fie mai ușor de analizat și extins; Forth nu folosește o gramatică BNF și nu are un compilator monolit. Extinderea compilatorului necesită doar scrierea unui cuvânt nou, în loc să modifice o gramatică și să schimbe implementarea de bază.

folosind RPN, s-ar putea obține rezultatul expresiei matematice(25 * 10 + 50) în acest fel:

25 10 * 50 + .300 ok

această linie de comandă pune mai întâi numerele 25 și 10 pe stiva implicită.

cuvântul* înmulțește cele două numere din partea de sus a stivei și le înlocuiește cu produsul lor.

apoi numărul 50 este plasat pe stivă.

cuvântul+ îl adaugă la produsul anterior. În cele din urmă, comanda . imprimă rezultatul pe terminalul utilizatorului.

chiar și caracteristicile structurale ale Forth sunt bazate pe stivă. De exemplu:

: FLOOR5 ( n -- n' ) DUP 6 < IF DROP 5 ELSE 1 - THEN ;

acest cod definește un cuvânt nou (din nou,”word”este termenul folosit pentru o subrutină) numit FLOOR5 folosind următoarele comenzi: DUP duplică numărul de pe stivă; < compară cele două numere din stivă și le înlocuiește cu o valoare true-or-false; IF ia o valoare true-or-false și alege să execute comenzi imediat după aceasta sau să treacă la ELSEDROP aruncă valoarea din stivă; șiTHEN încheie condiționalul. Textul din paranteze este un comentariu, sfătuind că acest cuvânt așteaptă un număr pe stivă și va returna un număr posibil modificat. Rezultatul net îndeplinește în mod similar cu această funcție scris în limbajul de programare C:

int floor5(int v) { return v < 6 ? 5 : v - 1; }

facilități

interpret

Mai departe parsare este simplu, deoarece nu are nici o gramatică explicită. Interpretul citește o linie de intrare de la dispozitivul de introducere a utilizatorului, care este apoi analizat pentru un cuvânt folosind spații ca delimitator; unele sisteme recunosc caractere suplimentare de spațiu alb. Când interpretul găsește un cuvânt, încearcă să caute cuvântul în dicționar. Dacă cuvântul este găsit, interpretul execută codul asociat cuvântului și apoi revine pentru a analiza ceea ce a mai rămas din fluxul de intrare. Dacă cuvântul nu este găsit, se presupune că cuvântul este un număr și se încearcă transformarea acestuia într-un număr și împingerea acestuia pe stivă; dacă are succes, interpretul continuă să analizeze fluxul de intrare. În caz contrar, dacă atât Căutarea, cât și conversia numărului eșuează, interpretul imprimă cuvântul urmat de un mesaj de eroare care indică faptul că cuvântul nu este recunoscut, spală fluxul de intrare și așteaptă introducerea de noi utilizatori.

compilator

definiția unui cuvânt nou este pornită cu cuvântul: (colon) și se termină cu cuvântul; (semi-colon). De exemplu

: X DUP 1+ . . ;

va compila cuvântulX. Când este executat prin tastarea 10 Xla consola aceasta va imprima11 10.

Assembler

majoritatea sistemelor includ un assembler specializat care produce cuvinte executabile. Asamblorul este un dialect special al compilatorului. Asamblorii Forth folosesc adesea o sintaxă reverse-polish în care parametrii unei instrucțiuni preced instrucțiunea. Designul obișnuit al unui asamblor Forth este de a construi instrucțiunea pe stivă, apoi copiați-o în memorie ca ultimul pas. Registrele pot fi menționate prin denumirea utilizată de producător, numerotată (0..n, așa cum este utilizat în codul de operare real) sau numit pentru scopul lor în al patrulea sistem: de exemplu, „s” pentru registrul utilizat ca indicator de stivă.

sistem de Operare, fișiere și multitasking

sistemele clasice Forth folosesc în mod tradițional nici un sistem de Operare, nici un sistem de fișiere. În loc să stocheze codul în fișiere, codul sursă este stocat în blocuri de disc scrise pe adrese fizice de disc. CuvântulBLOCK este folosit pentru a traduce numărul unui bloc de spațiu pe disc de dimensiuni 1K în adresa unui tampon care conține datele, care este gestionat automat de sistemul Forth. Unele implementează fișiere de disc contigue utilizând accesul la disc al sistemului, unde fișierele sunt localizate la intervale fixe de blocuri de disc. De obicei, acestea sunt implementate ca înregistrări binare cu lungime fixă, cu un număr întreg de înregistrări pe bloc de disc. Căutarea rapidă se realizează prin accesul hash pe datele cheie.

Multitasking, cel mai frecvent de cooperare round-robin programarea, este în mod normal disponibil (deși cuvinte multitasking și suport nu sunt acoperite de standardul ANSI Forth). Cuvântul PAUSE este utilizat pentru a salva contextul de execuție al activității curente, pentru a localiza următoarea activitate și pentru a restabili contextul de execuție. Fiecare sarcină are propriile stive, copii private ale unor variabile de control și o zonă de zgârieturi. Schimbarea sarcinilor este simplă și eficientă; ca rezultat, multitaskers Forth sunt disponibile chiar și pe microcontrolere foarte simple, cum ar fi Intel 8051, Atmel AVR și TI MSP430.în schimb ,unele sisteme Forth rulează sub un sistem de operare gazdă, cum ar fi Microsoft Windows, Linux sau o versiune de Unix și utilizează sistemul de fișiere al sistemului de operare gazdă pentru fișiere sursă și date; standardul ANSI Forth descrie cuvintele folosite pentru I/O. alte facilități non-standard includ un mecanism pentru emiterea de apeluri către sistemul de operare gazdă sau sistemele de ferestre și multe oferă extensii care utilizează programarea furnizată de sistemul de operare. De obicei, ei au un set mai mare și diferit de cuvinte de stand-alone Forth ‘ s PAUSE cuvânt pentru crearea de sarcini, suspendarea, distrugerea și modificarea priorității.

auto compilare și compilare încrucișată

Un sistem complet cu tot codul sursă se va compila, o tehnică numită în mod obișnuit meta-compilare de către programatorii Forth (deși termenul nu se potrivește exact cu meta-compilare așa cum este definit în mod normal). Metoda obișnuită este de a redefini mâna de cuvinte care plasează biți compilați în memorie. Cuvintele compilatorului folosesc versiuni special numite de fetch and store care pot fi redirecționate către o zonă tampon din memorie. Zona tampon simulează sau accesează o zonă de memorie care începe de la o altă adresă decât tamponul de cod. Astfel de compilatoare definesc cuvinte pentru a accesa atât memoria computerului țintă, cât și memoria computerului gazdă (compilarea).

după preluarea și stocarea operațiunilor sunt redefinite pentru spațiul de cod, compilatorul, asamblorul etc. sunt recompilate folosind noile definiții ale fetch și store. Acest lucru reutilizează în mod eficient tot codul compilatorului și interpretului. Apoi, codul sistemului Forth este compilat, dar această versiune este stocată în tampon. Tamponul din memorie este scris pe disc și sunt furnizate modalități de încărcare temporară în memorie pentru testare. Când noua versiune pare să funcționeze, este scrisă peste versiunea anterioară.

există numeroase variații ale unor astfel de compilatoare pentru diferite medii. Pentru sistemele încorporate, codul poate fi în schimb scris pe un alt computer, o tehnică cunoscută sub numele de compilare încrucișată, pe un port serial sau chiar pe un singur bit TTL, păstrând în același timp numele cuvintelor și alte părți neexecutante ale dicționarului în computerul original de compilare. Definițiile minime pentru un astfel de compilator forth sunt cuvintele care aduc și stochează un octet și cuvântul care comandă executarea unui cuvânt forth. Adesea, partea cea mai consumatoare de timp a scrierii unui port la distanță este construirea programului inițial pentru implementarea preluării, stocării și executării, dar multe microprocesoare moderne au funcții de depanare integrate (cum ar fi Motorola CPU32) care elimină această sarcină.

structura limbii

structura de date de bază a Forth este „dicționarul” care mapează „cuvintele” la codul executabil sau la structurile de date numite. Dicționarul este așezat în memorie ca o listă legată cu legăturile care pornesc de la cel mai recent (cel mai recent) cuvânt definit la cel mai vechi, până când se găsește o Santinelă, de obicei un pointer nul.

un cuvânt definit constă în general din cap și corp cu capul format din câmpul de nume (NF) și câmpul de legătură (LF) și corpul format din câmpul de cod (CF) și câmpul de parametri (PF).

capul și corpul unei intrări din dicționar sunt tratate separat, deoarece este posibil să nu fie contigue. De exemplu, atunci când un program Forth este recompilat pentru o nouă platformă, capul poate rămâne pe computerul de compilare, în timp ce corpul merge la noua platformă. În unele medii (cum ar fi sistemele încorporate) capetele ocupă memoria inutil. Cu toate acestea, unii compilatori încrucișați pot pune capete în țintă dacă se așteaptă ca ținta în sine să susțină un interactiv mai departe.

intrare în dicționar

formatul exact al unei intrări în dicționar nu este prescris, iar implementările variază. Cu toate acestea, anumite componente sunt aproape întotdeauna prezente, deși dimensiunea exactă și ordinea pot varia. Descris ca o structură, o intrare în dicționar ar putea arăta astfel:

structure byte: flag \ 3bit flags + length of word's name char-array: name \ name's runtime length isn't known at compile time address: previous \ link field, backward ptr to previous word address: codeword \ ptr to the code to execute this word any-array: parameterfield \ unknown length of data, words, or opcodesend-structure forthword

câmpul Nume începe cu un prefix care dă lungimea numelui cuvântului (de obicei până la 32 de octeți) și câțiva biți pentru Steaguri. Reprezentarea caracterului numelui cuvântului urmează apoi prefixul. În funcție de implementarea particulară a Forth, pot exista unul sau mai mulți octeți NUL (‘\0’) pentru aliniere.

câmpul link conține un pointer către cuvântul definit anterior. Indicatorul poate fi o deplasare relativă sau o adresă absolută care indică următorul frate mai vechi.

indicatorul câmpului de cod va fi fie adresa cuvântului care va executa codul sau datele din câmpul parametrilor, fie începutul codului mașinii pe care procesorul îl va executa direct. Pentru cuvintele definite cu două puncte, indicatorul câmpului de cod indică cuvântul care va salva indicatorul curent de instrucțiuni (IP) pe stiva de returnare și va încărca IP-ul cu noua adresă de la care să continue executarea cuvintelor. Acest lucru este la fel ca ceea ce face instrucțiunile de apel/returnare ale unui procesor.

structura compilatorului

compilatorul în sine constă din mai multe cuvinte vizibile pentru sistem, nu un program monolitic. Acest lucru permite unui programator să schimbe cuvintele compilatorului în scopuri speciale.

steagul „timp de compilare” din câmpul Nume este setat pentru cuvintele cu comportament „timp de compilare”. Majoritatea cuvintelor simple execută același cod, indiferent dacă sunt tastate pe o linie de comandă sau încorporate în cod. La compilarea acestora, compilatorul plasează pur și simplu codul sau un pointer filetat la cuvânt.

cuvintele de compilare sunt de fapt executate de compilator. Exemplele clasice de cuvinte în timp de compilare sunt structurile de control precum IF și WHILE. Toate structurile de control ale Forth și aproape toate compilatoarele sale sunt implementate ca cuvinte în timp de compilare.

starea de compilare și starea de interpretare

cuvântul: (două puncte) Ia un nume ca parametru, creează o intrare în dicționar (o definiție a două puncte) și intră în starea de compilare. Interpretul continuă să citească cuvinte delimitate de spațiu de pe dispozitivul de introducere a utilizatorului. Dacă se găsește un cuvânt, interpretul execută semantica de compilare asociată cuvântului, în loc de semantica de interpretare. Semantica implicită de compilare a unui cuvânt trebuie să adauge semantica sa de interpretare la definiția curentă.

cuvântul; (semi-colon) termină definiția curentă și revine la starea de interpretare. Este un exemplu de cuvânt a cărui semantică de compilare diferă de cea implicită. Semantica de interpretare a ; (semi-colon) și alte câteva cuvinte sunt nedefinite în Ans Forth.

starea interpretului poate fi modificată manual cu cuvintele (paranteză dreapta) care intră în starea de interpretare sau, respectiv, în starea de compilare. Aceste cuvinte pot fi folosite cu cuvântul LITERAL pentru a calcula o valoare în timpul unei compilări și pentru a insera valoarea calculată în definiția curentă a colonului. LITERAL are semantica de compilare pentru a lua un obiect din stiva de date și pentru a adăuga semantica la definiția curentă a colonului pentru a plasa acel obiect pe stiva de date.

în ANS Forth, starea actuală a interpretului poate fi citită din steagulSTATE care conține valoarea true atunci când este în stare de compilare și false altfel. Acest lucru permite implementarea așa-numitelor cuvinte inteligente de stare cu comportament care se schimbă în funcție de starea actuală a interpretului.

cuvinte fără nume și jetoane de execuție

în Ans mai departe, cuvintele fără nume pot fi definite cu cuvântul:NONAME care compilează următoarele cuvinte până la următorul; (semi-colon) și lasă un jeton de execuție pe stiva de date. Jetonul de execuție oferă un mâner opac pentru semantica compilată, similar cu indicatoarele funcționale ale limbajului de programare C.jetoanele de execuție pot fi stocate în variabile. Cuvântul EXECUTE ia un jeton de execuție din stiva de date și efectuează semantica asociată. CuvântulCOMPILE, (compilare-virgulă) ia un jeton de execuție din stiva de date și adaugă semantica asociată la definiția curentă.

cuvântul' (bifați) ia numele unui cuvânt ca parametru și returnează jetonul de execuție asociat cu acel cuvânt în stiva de date. În starea de interpretare,' RANDOM-WORD EXECUTE este echivalent cuRANDOM-WORD.

parsarea cuvintelor și comentariilor

cuvintele: (două puncte),POSTPONE' (bifați) și:NONAME sunt exemple de parsare cuvinte care iau argumentele lor de la dispozitivul de introducere a utilizatorului în loc de stiva de date. Un alt exemplu este cuvântul ( (paren) care citește și ignoră următoarele cuvinte până la și inclusiv următoarea paranteză dreaptă și este folosit pentru a plasa comentarii într-o definiție de două puncte. În mod similar, cuvântul \ (backslash) este utilizat pentru comentarii care continuă până la sfârșitul liniei curente. Pentru a fi analizat corect, ( (paren) și \ (backslash) trebuie separate prin spațiu alb de următorul text de comentariu.

structura codului

în majoritatea sistemelor, corpul unei definiții de cod constă fie din limbajul mașinii, fie dintr-o formă de cod filetat. În mod tradițional, a fost folosit codul cu filet indirect, dar forturile cu filet direct și subrutină au fost, de asemenea, populare. Cele mai rapide forturi moderne folosesc filetarea subrutinei, introduc cuvinte simple ca macro-uri și efectuează optimizarea vizorului sau alte strategii de optimizare pentru a face Codul mai mic și mai rapid.

obiecte de date

când un cuvânt este o variabilă sau alt obiect de date, CF indică codul runtime asociat cuvântului definitoriu care l-a creat. Un cuvânt definitoriu are o caracteristică „comportament definitoriu” (crearea unei intrări în dicționar plus eventual alocarea și inițializarea spațiului de date) și specifică, de asemenea, comportamentul unei instanțe a clasei de cuvinte construite de acest cuvânt definitoriu. Exemplele includ:

VARIABLEdenumește o locație de memorie neinițializată, cu o singură celulă. Comportamentul instanță a unuiVARIABLEreturnează adresa pe stivă.CONSTANTdenumește o valoare (specificată ca argument pentruCONSTANT). Comportamentul instanței returnează valoarea.CREATEdenumește o locație; spațiul poate fi alocat în această locație sau poate fi setat să conțină un șir sau altă valoare inițializată. Comportamentul instanță returnează adresa de la începutul acestui spațiu.

Forth oferă, de asemenea, o facilitate prin care un programator poate defini noi cuvinte definitorii specifice aplicației, specificând atât un comportament definitoriu personalizat, cât și un comportament de instanță. Câteva exemple includ tampoane circulare, biți numiți pe un port I/O și matrice indexate automat.

obiectele de date definite de aceste cuvinte și cuvinte similare sunt globale în domeniu. Funcția furnizată de variabilele locale în alte limbi este furnizată de stiva de date din Forth. Stilul de programare Forth folosește foarte puține obiecte de date numite în comparație cu alte limbi; de obicei, astfel de obiecte de date sunt utilizate pentru a conține date care sunt utilizate de un număr de cuvinte sau sarcini (într-o implementare multitasked).

Forth nu impune consecvența utilizării tipului de date; este responsabilitatea programatorului să utilizeze operatori adecvați pentru a prelua și stoca valori sau pentru a efectua alte operațiuni asupra datelor.

programare

cuvintele scrise în Forth sunt compilate într-o formă executabilă. Implementările clasice „cu filet indirect” compilează liste de adrese ale cuvintelor care urmează să fie executate la rândul lor; multe sisteme moderne generează cod real al mașinii (inclusiv apeluri către unele cuvinte externe și cod pentru altele extinse în loc). Unele sisteme au compilatoare de optimizare. În general, un program Forth este salvat ca imagine de memorie a programului compilat cu o singură comandă (de exemplu, RUN) care este executată atunci când versiunea compilată este încărcată.

în timpul dezvoltării, programatorul folosește interpretul pentru a executa și testa fiecare piesă mică pe măsură ce este dezvoltată. Prin urmare, cei mai mulți programatori susțin un design liber de sus în jos și o dezvoltare de jos în sus, cu testare și Integrare Continuă.

designul de sus în jos este de obicei separarea programului în „vocabulare” care sunt apoi utilizate ca seturi de instrumente la nivel înalt pentru a scrie programul final. Un program Forth bine conceput citește ca limbajul natural și implementează nu doar o singură soluție, ci și seturi de instrumente pentru a ataca problemele conexe.

abordarea tool-box este unul dintre motivele pentru care Forth este atât de dificil de stăpânit. În timp ce învățarea sintaxei este ușoară, stăpânirea instrumentelor livrate cu un sistem profesional Forth poate dura câteva luni, lucrând cu normă întreagă. Sarcina este de fapt mai dificilă decât rescrierea propriului sistem Forth de la zero. Din păcate, o rescriere pierde, de asemenea, experiența acumulată într-un set de instrumente profesionale tipice Forth.

Exemple de cod

Hello world

o posibilă implementare:

: HELLO ( -- ) CR ." Hello, world!" ;HELLO

cuvântulCR face ca următoarea ieșire să fie afișată pe o linie nouă. Cuvântul de analiză ." (dot-quote) citește un șir delimitat de două citate și adaugă cod la definiția curentă, astfel încât șirul analizat să fie afișat la execuție. Caracterul spațial care separă cuvântul ." de șirul Hello, world! nu este inclus ca parte a șirului. Este necesar pentru ca parserul să recunoască ." ca un cuvânt mai departe.

Un sistem standard Forth este, de asemenea, un interpret și aceeași ieșire poate fi obținută tastând următorul fragment de cod în consola Forth:

CR .( Hello, world!)

.( (dot-paren) este un cuvânt imediat care analizează un șir delimitat de paranteze și îl afișează. Ca și în cazul cuvântului ."caracterul spațial care separă.(deHello, world! nu face parte din șir.

cuvântulCR vine înainte de textul de tipărit. Prin convenție, interpretul Forth nu pornește de ieșire pe o nouă linie. De asemenea, prin convenție, interpretul așteaptă intrarea la sfârșitul rândului anterior, după un prompt ok. Nu există nicio acțiune implicită de”tampon de culoare”în Forth ‘s CR, așa cum se întâmplă uneori în alte limbaje de programare.

mixarea stării de compilare și a stării de interpretare

Iată definiția unui cuvânt EMIT-Q care atunci când este executat emite un singur caracterQ:

: EMIT-Q 81 ( the ASCII value for the character 'Q' ) EMIT ;

această definiție a fost scrisă pentru a utiliza valoarea ASCII a caracteruluiQ (81) direct. Textul dintre paranteze este un comentariu și este ignorat de compilator. Cuvântul EMIT ia o valoare din stiva de date și afișează caracterul corespunzător.

în urma redefinirii EMIT-Q foloseste cuvinte (dreapta-suport), CHAR și LITERAL pentru a comuta temporar la interpret de stat, se calculează valoarea ASCII a Q caracter, reveni la elaborarea de stat și adăugați valoarea calculată a curentului de colon definiție:

: EMIT-Q LITERAL EMIT ;

parsarea cuvântul CHAR este nevoie de un spațiu delimitat cuvânt ca parametru și locuri de valoarea de primul său personaj pe date stivă. Cuvântul este o versiune imediată a CHAR. Folosind , definiția exemplului pentru EMIT-Q ar putea fi rescrisă astfel:

: EMIT-Q Q EMIT ; \ Emit the single character 'Q'