Почти все из них. Интерпретация из потока токенов сложная (а интерпретация без даже токенизатора еще сложнее ), так как вам все равно придется выполнять большую часть работы по синтаксическому анализу (только на этот раз специально , без помощи генераторов парсера, смешивая логику парсера с логикой интерпретатора). Для начала, правильное определение приоритета оператора, по-видимому, требует потенциально бесконечной ретрансляции / обратного отслеживания, если вы попробуете это без построения промежуточных структур данных (AST).
Единственным исключением могут быть языки сценариев оболочки из-за их невероятно простого синтаксиса (в основном, это просто вызовы внешних программ, назначения переменных, которые в любом случае работают со строками, и простые структуры цикла), хотя я бы не стал на это ставить. Редактировать: Нет, bash имеет грамматику yacc , и zsh, похоже, также имеет полноценный анализатор .
Многие из этих языков также не останавливаются на AST, а продолжают компилировать их в байт-код (даже если они не сохраняют его для последующих запусков по умолчанию - например, PHP) и интерпретируют , что .