返回跟踪JavaScript源代码中的表达式

时间:2012-07-04 19:32:31

标签: javascript python parsing static-analysis

对不起标题,无法想出更好的标题。

假设我们有JavaScript代码字符串:

var n = Math.floor(Math.random() * 10),
    className;

if (n === 1) {
    className = "a";
} else if (n === 2) {
    className = "b";
} else {
    className = "c";
}

document.querySelector("." + className);

我的想法是希望将所有可能的字符串发送到该特定函数(document.querySelector)。所以我想得到['.a', '.b', '.c']。也可能涉及多个变量,在代码中多次修改,因此列表会更长。

现在我如何在Python中执行此操作?我看过PyV8,但没有文档,所以这不是一个选项;同样适用于过时的python-spidermonkey。

2 个答案:

答案 0 :(得分:1)

这不是一个容易的问题。您正在寻找static code analysis来生成通过您的函数的所有可能路径。请考虑以下代码,并问自己如何确定是否将运行警报:

var n = Math.floor(Math.random() * 10),
if (Math.sqrt(n) > n) {
    alert('a');
}

电脑没有"知道" Math.sqrt(n)始终小于n。如果不运行代码,我如何确定警报不会显示?

在简单的情况下,库可能会这样做,但是当你的函数有许多可能的路径并使用许多函数时,你需要进行一些重要的分析才能得到正确的答案。

答案 1 :(得分:0)

嗯,您可以采用蒙特卡罗方法:记录传递给document.querySelector的所有参数,并针对各种输入运行代码。