有没有办法(ab)使用 tcl C-API 来“解析”一个字符串,进行所有替换(包括方括号中的子命令),但在实际评估生成的命令行之前停止?
我想要做的是创建一个命令(在 C 中,但我会考虑做一个 tcl-wrapper,如果有一个优雅的方式来做它),它需要一个块作为参数(即花括号引用-细绳)。我想采用该块,将其拆分并以与执行相同的方式执行替换,但停在那里并解释结果行。
我考虑过创建一个命名空间,其中所有有效的第一个单词都被定义为命令,但是这个列表非常庞大(而且几乎是动态的),所以很快就会变得过于繁琐。我也尝试过这种方法,但使用unknown
命令来拦截不同的命令。但是,unknown
它用于一堆东西,并且不能绑定到命名空间,所以我必须在执行块时定义它,并在完成后将其设置回之前的状态,感觉很漂亮摇摇欲坠。最重要的是,我会冒与实际命令发生冲突的风险(相当低的风险,但不是零),所以我非常希望不使用该unknown
命令。
我能得到的最接近的是Tcl_ParseCommand
(以及家族的其他成员),它产生了一个解析树,我可以手动评估它。如果没有更好的解决方案,我想我会采用这种方式,但如果有“官方”方式,我当然更喜欢它。
我错过了什么吗?