将JavaScript解析为工具代码

将JavaScript解析为工具代码,javascript,python,parsing,spidermonkey,Javascript,Python,Parsing,Spidermonkey,我需要将JavaScript文件拆分为单个指令。比如说 a = 2; foo() function bar() { b = 5; print("spam"); } 必须分为三个说明。(赋值、函数调用和函数定义) 基本上我需要插入代码,在这些指令之间注入代码来执行检查。用“;”分隔显然不起作用,因为您也可以用换行符结束指令,也许我不想在函数和类定义中插入代码(我还不知道)。我参加了一门关于语法的课程,但在本例中,这个规则的语义操作是“打印解析树中的所有子体,并将我的代码放在末尾”

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

a = 2;
foo()
function bar() {
    b = 5;
    print("spam");
}
必须分为三个说明。(赋值、函数调用和函数定义)

基本上我需要插入代码,在这些指令之间注入代码来执行检查。用“;”分隔显然不起作用,因为您也可以用换行符结束指令,也许我不想在函数和类定义中插入代码(我还不知道)。我参加了一门关于语法的课程,但在本例中,这个规则的语义操作是“打印解析树中的所有子体,并将我的代码放在末尾”,我认为这是基本Bison无法做到的。我该怎么做?我还需要拆分代码,因为我需要使用Python spidermonkey与Python接口。
或是否已经有一个图书馆可以让我免于重新发明轮子?它不必是Python语言。

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

为什么不使用现有的JavaScript解释器,比如(Java)或(不确定这个解释器是否仍然有效)?它将解析JS,然后您可以检查生成的解析树。我不确定重新创建原始代码有多容易,但这主要取决于插入指令的代码的可读性。如果没有人看它,只需生成一个非常紧凑的表单

可能也有兴趣;这是一个Python到JavaScript的transpiler

[编辑]虽然乍一看这并不能解决您的问题,但您可以将其用于另一种方法:不插入JavaScript,而是用Python编写代码(可以很容易地插入指令;所有工具都已经存在),然后将结果转换为JavaScript


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

为什么不试试javascript美化器呢

比如说


或者看看

JavaScript很难解析;您需要一个完整的JavaScript解析器。 可以解析完整的JavaScript并构建相应的。
然后可以使用AST操作符遍历树以“拆分它”。然而,更简单的方法是应用源到源转换,寻找一种表面语法(JavaScript)模式,并用另一种模式替换它。您可以使用这样的转换将插入插入到代码中,而不是拆分代码以保留插入。转换完成后,DMS可以重新生成有效的JavaScript代码(如果不受影响,则使用原始注释完成)。

忘记我的解析器。是一个伟大而完整的解析器。我在这里修复了几个它的bug:

我研究了ANTLR,但看起来非常复杂:-(我已经计划使用python spidermonkey,但我需要首先正确地拆分代码:execute(“函数foo(){”)给出了一个错误。我只是认为还有另一种方法……如果我将python对象提供给js上下文,我可以将回调放在那里的python代码中。但这似乎相当复杂,我对这种语言的接口非常陌生(我也是js新手),像ANTLR这样的工具“非常复杂”因为他们正在处理非常复杂的问题。很多人试图用某种字符串黑客来操纵代码;结果几乎总是很糟糕,因为字符串黑客无法可靠地处理复杂的问题。你是第二个说我可以用python spidermonkey解析代码的人……我弄错了吗?似乎没有任何解析功能。代码显然必须在某个地方进行解析,但它是在spidermonkey引擎的深处完成的,python接口没有提供它的挂钩。我只看到“执行”、“添加全局”、“rem\u全局”和“gc”为python程序员公开。我遗漏了什么吗?不幸的是,分析页面重定向是项目的一部分。我无法编写javascript代码:-)恶意网站会千方百计地混淆它们的代码。好吧,我会尝试jQuery AOPI,但没有看到这个建议得到跟进。我已经安装了大型javascript库。我希望您尝试一下,它很容易使用。