在Tcl中使用非美元前缀变量可能吗?

时间:2015-03-09 09:38:58

标签: python ruby variables tcl

我正致力于一项新颖的,自动化的EDA问题豁免。有问题的EDA工具/引擎打印设置一定条件的设备和条件。条件类似于:

"uvg -lvs > 7"

条件几乎总是由两个字符串组成,1个以" l2开头,另一个用" u",中间字符是" v",最后一个字符可以是几个字母。内部引擎(具有Tcl 8.5 API)获取uvg和lvs的值,并检查它们。然而,我的算法如何找到比EDA引擎找到的更真实的差值(不是绝对值)。因此,我希望再次重新评估这一情况。我将值赋给(在我们的例子中)uvg,lvs,并评估条件。有没有更好的"除此之外的其他方式: 1.在Ruby或Python中运行它,其中变量'名称不必以美元符号开头。 2.解析条件,并添加美元符号? 感谢。

1 个答案:

答案 0 :(得分:1)

最简单的方法可能是使用正则表达式替换来执行脏工作,然后将结果提供给expr

# Sample data; use your own!
set uvg 123; set lvs 321

# Here's the expression we want to evaluate
set theExpression "uvg -lvs > 7"

# Do the evaluation 
set theResult [expr [regsub -all {(\y(?!true\y|false\y)[a-zA-Z]\w*\y)\s*(?![\s(])} $theExpression {$\1}]]

puts "evaluated '$theExpression' to get '$theResult'"
### evaluated 'uvg -lvs > 7' to get '0'

正则表达式有点复杂,因为我们不想接受函数调用或数字或布尔文字。

请注意, 根本不是一个安全的伎俩 - 它很可能使非常混淆,并且不属于任何通用库,除非在输入表达式上放置了一些非常广泛的约束(例如,不受$[字符的限制) - 但它可能适合您的环境。