Like I said, splitting hairs, but you make an interesting point.RichardRussell wrote: ↑Sat Aug 10, 2019 9:26 pmIf the language knows about variable names at run time it makes it possible to support an EVAL() function, which accepts an arbitrary numeric or string expression (typically containing variable and perhaps user-defined function names) and 'evaluates it'. Using that criterion Liberty BASIC, like BBC BASIC, is an interpreter because it supports EVAL.
Liberty BASIC is a compiler in the sense that each statement is converted to an executable form one time, and this executable form is used exclusively to perform the action of the statement. The EVAL() function doesn't use an interpreter, but it uses the compiler at runtime to compile a BASIC expression on demand, but the EVAL() function itself is only compiled once per program invocation.
The actual variables in the compiled form do not know what their variable names are. There is a lookup table maintained so that the correct positions of the values can be resolved by name if needed.
So, more compiler than interpreter.