────INTERPRET────expression────;──────────────
INTERPRET is used to process instructions that have been built dynamically by evaluating expression.
The expression is evaluated, and is then processed (interpreted) as though the resulting string was a line inserted into the input file (and bracketed by a DO; and an END;).
Any instructions (including INTERPRET instructions) are allowed, but note that constructions such as DO ... END and SELECT ... END must be complete. For example, a string of instructions being interpreted cannot contain a LEAVE or ITERATE instruction (valid only within a repetitive DO loop) unless it also contains the whole repetitive DO ... END construct.
A semicolon is implied at the end of the expression during processing, as a service to the user.
Example:
data='FRED' interpret data '= 4' /* Will a) build the string "FRED = 4" */ /* b) execute FRED = 4; */ /* Thus the variable "FRED" will be set to "4" */
Example:
data='do 3; say "Hello there!"; end'
interpret data        /* Would display:         */
                      /*  Hello there!          */
                      /*  Hello there!          */
                      /*  Hello there!          */
Notes:
Example:
/* Here we have a small program. */ Trace Int name='Kitty' indirect='name' interpret 'say "Hello"' indirect'"!"'
when run, the following trace is displayed:
[C:\]kitty
kitty
     3 *-* name='Kitty'
       >L>   "Kitty"
     4 *-* indirect='name'
       >L>   "name"
     5 *-* interpret 'say "Hello"' indirect'"!"'
       >L>   "say "Hello""
       >V>   "name"
       >O>   "say "Hello" name"
       >L>   ""!""
       >O>   "say "Hello" name"!""
       *-*  say "Hello" name"!"
       >L>    "Hello"
       >V>    "Kitty"
       >O>    "Hello Kitty"
       >L>    "!"
       >O>    "Hello Kitty!"
Hello Kitty!
[C:\]
Lines 3 and 4 set the variables used in line 5. Execution of line 5 then proceeds in two stages. First the string to be interpreted is built up, using a literal string, a variable (INDIRECT), and another literal. The resulting pure character string is then interpreted, as though it were actually part of the original program. Since it is a new clause, it is traced as such (the second *-* trace flag under line 5) and is then executed. Again a literal string is concatenated to the value of a variable (NAME) and another literal, and the final result is then displayed as follows:
Hello Kitty!
say "Hello" value(indirect)"!"
INTERPRET is usually only required in special cases, such as when more than one statement is to be interpreted at once.