我正在尝试用 X++ 编写一个 halstead 复杂性度量(语言并不重要),我认为最好的方法是在源代码上使用正则表达式。
我已经完成了其中的 90%,但在变量名上遇到困难。
如何识别一段代码中的变量名。
给定以下代码
public void main()
{
int a, b, c, av;
className class;
strFmt("%1 %2 %3", a, b, c);
av = (a + b + c) / 3;
info("avg = %1");*/
if(a)
{
a++;
class.add(a);
}
else
{
b++;
class.subtract(b)
}
this.main();
}
我希望返回“a”“b”“c”“av”“class”
有了 halstead,它需要计算它们的实例。我的想法是将上面的内容存储在列表中,然后在正则表达式查询中使用列表中的任何内容。迎合变量的所有可能用途将是疯狂的。
最佳答案
我认为您必须反射(reflection) AOT 才能获得不同的变量。
您可以将反射与 TreeNode
一起使用,或者您可以使用 XPPCompiler 来获取有关您正在处理的对象的信息以提供帮助:
info(strFmt("%1", new xppCompiler().dumpClass('salesformletter')));
关于regex - 如何识别一段代码中的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384113/