Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Conklin E.K.Forth programmer's handbook.2000.pdf
Скачиваний:
321
Добавлен:
23.08.2013
Размер:
2.04 Mб
Скачать

4. THE FORTH INTERPRETER AND COMPILER

Forth is primarily a development environment, usually presented as a fairly complete “integrated development environment” including programming tools, libraries, compiler, assembler, and (in many cases) an editor. This section describes features specific to the Forth compiler as well as Forth’s uniquely powerful ability to construct data objects of various types. Unlike more conventional compilers, the Forth compiler uses a text interpreter that is also available to the programmer for application use. Moreover, the tools used inside the Forth compiler and interpreter are available so that you can modify and extend both.

4.1 THE TEXT INTERPRETER

The text interpreter in Forth is used for terminal interaction and for processing text on disk (either in direct execution or in compilation). A brief description of its operation was given in Section 1.1.5. This section covers the text interpreter in more detail and discusses ways the programmer may use the text interpreter in application routines.

References Text interpreter, Section 1.1.5

4.1.1 Input Sources

The text interpreter always interprets from an input buffer (also called an input stream), which may or may not be a physically separate location. There are up to four sources for input: the user input device (almost always a keyboard), a character string, a text file, and a block file. The default source is the keyboard, and all systems have a keyboard input buffer (typically 80 characters long).

The Forth Interpreter and Compiler 119

Forth Programmer’s Handbook

All systems can also treat a character string in memory as an input buffer, if given the string’s address and length. When systems with source code in text files interpret from files, the current line in the current file is the input buffer. When systems with source code in blocks interpret from blocks, the current block (1024 bytes) is the input buffer.

The word SOURCE-ID returns a value that identifies the input source, unless it is a block. On systems that contain blocks, the variable BLK contains the block number that is the current input source, or zero if the input is not a block. On systems with all four inputs, checking BLK first and then SOURCE-ID will uniquely identify the input. See Table 7 below:

Table 7: Identifying the input source

Input Source

SOURCE-ID returns:

BLK @ returns:

User Input Device (keyboard)

0

0

Character String

-1

0

File

Text file fileid

0

Block

(undefined)

block number

Glossary

 

 

 

 

BLK

 

( — a-addr )

Block

 

 

Return the address of a cell containing zero or the number of the mass-storage

 

 

block being interpreted. If BLK contains zero, the input source can be identi-

 

 

fied by SOURCE-ID. “B-L-K”

 

SOURCE-ID

( — n )

Core Ext, File

 

 

Return a value indicating the current input source. The value is 0 if the source

 

 

is the user input device, -1 if the source is a character string, a fileid if the source

 

 

is a file, and undefined if the source is a block.

 

 

 

Block-based disk access, Section 3.4

 

References

 

 

 

File-based disk access, Section 3.5

 

120 The Forth Interpreter and Compiler

Forth Programmer’s Handbook

4.1.2 Source Selection and Parsing

The word QUIT is the basic idle behavior of the terminal task that controls the user input device. Executing QUIT makes the user input device the current input source, and awaits a line of input into the keyboard buffer. When this is received, the character pointer >IN is set to zero and interpretation begins. If interpretation completes normally, the system-defined prompt is displayed (typically OK), and QUIT awaits the next line of input.

EVALUATE directs interpretation to take place from a specified character string. When EVALUATE is executed, the address and count of a character string must be on the stack. EVALUATE saves the current input source specification, makes the character string the input buffer, sets >IN to zero and begins interpretation. When the parse area is empty (there are no more words to be interpreted in the string), the prior input source is restored.

Interpretation from a file usually is done with INCLUDE-FILE, INCLUDE, or INCLUDED. These and other file-handling words are described in detail in Section 3.5 of this manual.

Interpretation from blocks is done with LOAD or THRU. See Section 3.4 for details of block reading and writing.

The support words in the following list are connected with text interpretation. In general, they are used at the system level to create custom text interpretation words, and will not be needed by an application; for example, all standard source-selection words—such as EVALUATE, INCLUDE, and LOAD—automati- cally save and restore the current input source specification. Some lower-level words—such as READ-FILE and READ-LINE—do not, and might need explicit uses of SAVE-INPUT and RESTORE-INPUT.

Glossary

 

 

 

>IN

( — a-addr )

Core

 

 

Return the address of a cell containing the offset (in characters) from the start

 

 

of the input buffer to the start of the parse area. “to-in”

 

EVALUATE

( i*x c-addr u — j*x )

Core, Block

Save the current input source specification. Set SOURCE-ID to -1. Make the

The Forth Interpreter and Compiler 121

Forth Programmer’s Handbook

string at c-addr, length u, the input source and input buffer, set >IN to zero, and interpret. When the parse area is empty, restore the prior input source specification. Other stack effects are due to the word(s) that were EVALUATEd.

PARSE ( char — c-addr u ) Core Ext

Parse the input buffer until the delimiter char is encountered. Return the address and length of the parsed string. If the parse area was empty, u is zero and c-addr is undefined.

QUIT ( i*x — ); ( R: j*x — ) Core

Terminate execution of the current word (and all words that called it). Clear the return and data stacks. No indication is given to the terminal that a QUIT has occurred. Enter interpretation state and begin an infinite loop of awaiting a line of text from the input source and interpreting it. QUIT is the default idle behavior for terminals.

REFILL

( — flag )

Block Ext, Core Ext, File Ext

 

Attempt to fill the input buffer from the input source, returning a flag that is

 

true if successful. If no input is available from the current source, return false.

If the input source is the keyboard, await a line of input. If successful (a line of zero characters—i.e., only CR was pressed—is successful), set >IN to zero and return true.

If the input source is a string from EVALUATE, return false and take no other action.

If the input source is a block, make the next block the input source and buffer by adding one to BLK and setting >IN to zero. Return true if the new value of BLK is a valid block number, otherwise false.

If the input source is a text file, attempt to read the next line from the file. If successful, make the result the current input buffer, set >IN to zero, and return true; otherwise, return false.

RESTORE-INPUT

( xn … x1 n — flag )

Core Ext

Attempt to restore the input source specification to the state described by the

parameters on the stack. The number and content of the parameters are system dependent. Return true if the input source cannot be so restored. It is an error if the input source represented by the arguments is not the same as the current input source (i.e., SAVE-INPUT and RESTORE-INPUT are intended for re-posi-

122 The Forth Interpreter and Compiler

Соседние файлы в предмете Электротехника