是否可以在 Tcl 中使用非美元前缀变量



我正在研究一个新颖的、自动化的、EDA问题豁免。有问题的EDA工具/引擎打印出设置特定条件和条件的设备。条件如下所示:

"uvg -lvs > 7"

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

最简单的方法可能是使用正则表达式替换来完成繁琐的工作,然后将结果输入到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(?!truey|falsey)[a-zA-Z]w*y)s*(?![s(])} $theExpression {$1}]]
puts "evaluated '$theExpression' to get '$theResult'"
### evaluated 'uvg -lvs > 7' to get '0'

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

请注意,这根本不是一个安全的技巧 - 很有可能使它非常混乱,并且不属于任何通用库,除非对输入表达式施加了一些非常广泛的约束(例如不受$[字符的限制) - 但它在您的环境中可能没问题。

最新更新