将JavaScript解析为仪器代码

时间:2009-05-09 16:05:34

标签: javascript python parsing spidermonkey

我需要将JavaScript文件拆分为单个指令。例如

a = 2;
foo()
function bar() {
    b = 5;
    print("spam");
}

必须分为三个指令。 (赋值,函数调用和函数定义)。

基本上我需要检测代码,在这些指令之间注入代码以执行检查。分裂为“;”显然不会起作用,因为你也可以用换行结束指令,也许我不想在函数和类定义中设置代码(我还不知道)。我使用flex / Bison学习了关于语法的课程,但在这种情况下,此规则的语义操作将“打印解析树中的所有后代并将我的代码放在最后”,这可以'我认为用基本的野牛完成。我该怎么做呢?我还需要拆分代码,因为我需要使用python-spidermonkey与Python接口。 或者......那里是否有一个图书馆可以让我免于重新发明轮子?它不一定是在Python中。

5 个答案:

答案 0 :(得分:4)

为什么不使用JavaScript解析器?有很多,包括用于ANTLR的Python API和围绕SpiderMonkey的Python包装器。

答案 1 :(得分:2)

解析JavaScript很棘手;你需要一个完整的JavaScript解析器。 DMS Software Reengineering Toolkit可以解析完整的JavaScript并构建相应的AST。 然后可以使用AST运算符遍历树以“拆分它”。但是,更简单的方法是应用寻找一种表面语法(JavaScript)模式的源到源转换,并将其替换为另一种。您可以使用此类转换将检测插入到代码中,而不是将代码拆分为保留以进行插入。转换完成后,DMS可以重新生成有效的JavaScript代码(如果不受影响,则完成orignal注释)。

答案 2 :(得分:0)

为什么不使用现有的JavaScript解释器,如Rhino(Java)或python-spidermonkey(不确定这个是否还活着)?它将解析JS,然后您可以检查生成的解析树。我不确定重新创建原始代码会有多容易,但这主要取决于检测代码的可读性。如果没有人看过它,只需生成一个非常紧凑的形式。

pyjamas也可能有意义;这是一个Python到JavaScript的转换器。

[编辑]虽然乍一看这并不能解决您的问题,但您可能会将其用于不同的方法:而不是使用JavaScript,而是用Python编写代码(可以很容易地进行检测;所有工具都已经那里)然后将结果转换为JavaScript。

最后,如果你想在Python中解决问题,但找不到解析器:使用Java引擎为代码添加注释,然后可以在Python中搜索以检测代码。

答案 3 :(得分:0)

答案 4 :(得分:0)

忘记我的解析器。 https://bitbucket.org/mvantellingen/pyjsparser是完美的解析器。我在这里修复了一些错误:https://bitbucket.org/nullie/pyjsparser