Я вам верю что спектрум-бейсик это делает именно так.
Просто "определяет по одной таблице класс команд по типу и количеству операндов" - это звучит пугающе. А на самом-то деле раскидали по таблице токенов - первые 5 токенов = без операндов (cls, run), потом 10 с одним операндом (paper, border, peek), потом ещё 10 с двумя и т.п. - при грамотном порядке токенов "класс команды" определяется из её номера напрямую.
"потом парсит... операнды"
К сожалению у меня пробел в знаниях, поэтому я не знаю насколько это сложно. Но можно ж было как-то облегчить интерпретатору этот парсинг, чтобы он не тратил тыщи тактов на него.
"вычисляет операнды, каждый из которых может оказаться (а может и не оказаться, но интерпретатор не помнит этого) выражением весьма сложным"
в этом деле интерпретатор НЕ отличается от компилятора - и тот и другой считают выражения на встроенном калькуляторе. Ну и выражение сложное/простое - это ж одна проверка и один переход - ну два, ну три десятка тактов...
"потом только находит по второй таблице через токен и вызывает нужную процедуру"
ну и в чём проблема-то? LD A,код_токена: ADD A,A: LD H,адрес_таблицы: LD L,A: LD B,(HL): INC L : LD C,(HL): PUSH HL: RET = итого меньше 70 тактов получается
Если код токена известен и таблица удобно размещена, то вообще можно за 50 тактов сделать
Просто изначально непонятно ну зачем так тормозить ;(