如何通过javascript文件进行解析?

如何通过javascript文件进行解析?,javascript,parsing,code-analysis,lexer,Javascript,Parsing,Code Analysis,Lexer,我想通过javascript进行解析,并从特定库中找到所有变量声明、属性和函数调用 最好的方法是什么:正则表达式,lexer,使用已经完成的东西(它存在吗?) 事实上,我想要的是确保对象名称空间和方法不会被修改,这是通过静态分析实现的 您可以从Mozilla使用。它是一个用Java编写的Javascript实现。1.7R3版本以后的版本有一个新的AST API。这些类在org.mozilla.javascript.ast中提供 如果您想在Javascript中实现这一点,请参阅下面的讨论 希望它

我想通过javascript进行解析,并从特定库中找到所有变量声明、属性和函数调用

最好的方法是什么:正则表达式,lexer,使用已经完成的东西(它存在吗?)

事实上,我想要的是确保对象名称空间和方法不会被修改,这是通过静态分析实现的

您可以从Mozilla使用。它是一个用Java编写的Javascript实现。1.7R3版本以后的版本有一个新的AST API。这些类在org.mozilla.javascript.ast中提供

如果您想在Javascript中实现这一点,请参阅下面的讨论


希望它能有所帮助。

您不能用正则表达式来实现它,而且您可能也不想编写自己的实现(这完全是一种过激行为)。
至于我,更确切地说,我喜欢谷歌的V8 javascript引擎。我建议你可以用它

如果您遇到问题,则存在我用于安装的代码(pip安装在我的x64系统中出错,因此我使用了源代码):

我记得这些命令并没有给我带来错误。(我复制粘贴了它,但它起了作用)

问题本身的答案:
更复杂的hello Wolld示例,列出全局对象的一些变量:

import PyV8

class Global(PyV8.JSClass):      # define a compatible javascript class
    def hello(self):               # define a method
        print "Hello World"

    def alert(self, message): # my own alert function
        print type(message), '  ', message

    @property
    def GObject(self): return self

    def __setattr__(self, key, value):
        super(Global, self).__setattr__(key, value)
        print key, '=', value

G = Global()
ctxt = PyV8.JSContext(G)
ctxt.enter()
ctxt.eval("var a=hello; GObject.b=1.0; a();")
list_all_cmd = '''for (myKey in GObject){
alert(GObject[myKey]);
}'''
ctxt.eval(list_all_cmd)
ctxt.leave()
(在浏览器中,您应该称自己为全局对象窗口)
此代码将输出:

b = 1
Hello World
<class '__main__.Global'>    <__main__.Global object at 0x7f202c9159d0>
<class '_PyV8.JSFunction'>    function () { [native code] }
<type 'int'>    1
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
b=1
你好,世界
函数(){[本机代码]}
1.
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}
函数(){[本机代码]}

浏览器已经很好地做到了这一点。您可以使用inspector/profiler查看解析结果。您是使用pyV8 for Windows还是Linux?我在安装boost.pythonSo时遇到了一些问题。以什么格式生成输出?我可以跟踪其中的一些变量吗?你能给出一个关于如何使用的示例链接吗?我已经在考虑pynoceros(python rhino端口)、Pynacissus和pyV8,所以感谢你确认我的aproach:),也感谢你对jslint解析器的建议。也许我还可以找到python的jslint端口,并查看正则表达式。我看到它是从像
这样的代码对象中构建的。我如何通过它跟踪变量?我不知道如何有效地使用它。
b = 1
Hello World
<class '__main__.Global'>    <__main__.Global object at 0x7f202c9159d0>
<class '_PyV8.JSFunction'>    function () { [native code] }
<type 'int'>    1
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }
<class '_PyV8.JSFunction'>    function () { [native code] }