regex Tcl中字符串到数学函数的转换

wj8zmpe1  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(246)

假设我有一个字符串,为了简单起见,可能是“Enable && Signal”。
我想把这个字符串转换成tcl中的标准&&操作,这样,如果任何一个值为假,Enable && Signal将返回0,只有当两个值都为真时才返回1。
有没有一个简单的方法可以做到这一点,就我的情况而言,我需要一个泛型方法,其中参数的数量可以是任意的,并执行逻辑/关系操作,如&&||==〈=〉!=等等
任何帮助和见解将不胜感激。
谢谢
我最初尝试将参数拆分为条件列表和数据列表,但无法处理操作的优先级。像==这样的操作需要在n^n个组合的第一个和后面的&&操作中完成

hvvq6cgz

hvvq6cgz1#

我假设在你的例子中,Enable和Signal都是Tcl变量。所以,要将字符串传递给expr,所需要做的就是在所有标识符前面加上一个'$'。这可以通过regsub来完成,如下所示:

set str "Enable && Signal"
regsub -all {\m[A-Za-z]\w*\M} $str {$&} expr
set result [expr $expr]

由于\m\M的原因,这个方法会适当地保留1 e3这样的数字。但是如果你还想使用sin(x)这样的函数,这个方法福尔斯不够用了。如果这也是一个要求,那么一个负的前瞻可能会有帮助:

set str "sin(x) * cos(y)"
regsub -all {\m[A-Za-z]\w*\M(?!\()} $str {$&} expr
puts $expr

这将产生:sin($x) * cos($y)

相关问题