Есть ли способ (ab) использовать tcl C-API, чтобы «проанализировать» строку, выполнив все замены (включая подкоманды в квадратных скобках), но остановившись перед фактической оценкой результирующей командной строки?
То, что я пытаюсь сделать, это создать команду (в C, но я рассмотрю возможность сделать tcl-обертку, если есть элегантный способ сделать это там), которая принимает блок в качестве параметра (т.е. curly- брекет-кавычки строки). Я хотел бы взять этот блок, разделить его и выполнить замены таким же образом, как если бы он должен был быть выполнен, но остановимся на этом и интерпретируем получающиеся строки вместо этого.
Я рассмотрел создание пространства имен, в котором все действительные первые слова определены как команды, однако этот список настолько обширен (и в значительной степени динамичен), что быстро становится слишком громоздким. Я также попробовал этот подход, но с помощью команды unknown
для перехвата различных команд. Тем не менее, unknown
используется для множества вещей и не может быть привязан к пространству имен, поэтому мне придется определять его всякий раз, когда я выполняю блок, и возвращать его к тому, что было раньше, когда я закончил, который чувствует себя довольно шатким. Кроме того, я бы столкнулся с риском (довольно низким, но не нулевым) столкновения с реальной командой, поэтому я бы предпочел не использовать команду unknown
.
Самое близкое, что я могу получить - это Tcl_ParseCommand
(и остальная часть семейства), которое создает дерево разбора, которое я мог бы оценить вручную. Думаю, я прибегну к этому, если нет лучшего решения, но я бы, конечно, предпочел бы, если бы был «официальный» путь ..
Я что-то упустил?