Python中的JavaScript解析器
至少在C和Java(Mozilla)、JavaScript(Mozilla)和Ruby中都有JavaScript解析器。目前有Python的版本吗 本质上,我不需要JavaScript解释器,只需要一个符合ECMA-262标准的解析器 快速的谷歌搜索没有发现即时的答案,所以我正在询问so社区 ,另一个用于语言识别的工具,是一个语言工具,它提供了一个框架,用于根据包含各种目标语言中动作的语法描述构造识别器、解释器、编译器和翻译器 该网站提供了许多语法,包括 碰巧有一个可用的-因此您可以直接从Python调用语法生成的lexer(识别器)(祝您好运)。您可以试试 它是一个包装器,上面是Mozilla的javascript C实现的代码名。正如pib所提到的,是一个用Python编写的javascript标记器。它似乎有一些粗糙的边缘,但到目前为止一直在为我想要完成的工作 更新:对Pynacissus进行了另一次破解,下面是在类似访问者模式的系统中使用Pynacissus的工作方向。不幸的是,我当前的客户购买了我的下一次迭代实验,并决定不将其公开。下面代码的一个更简洁的版本是gistPython中的JavaScript解析器,javascript,python,parsing,compiler-construction,Javascript,Python,Parsing,Compiler Construction,至少在C和Java(Mozilla)、JavaScript(Mozilla)和Ruby中都有JavaScript解析器。目前有Python的版本吗 本质上,我不需要JavaScript解释器,只需要一个符合ECMA-262标准的解析器 快速的谷歌搜索没有发现即时的答案,所以我正在询问so社区 ,另一个用于语言识别的工具,是一个语言工具,它提供了一个框架,用于根据包含各种目标语言中动作的语法描述构造识别器、解释器、编译器和翻译器 该网站提供了许多语法,包括 碰巧有一个可用的-因此您可以直接从Pyt
如今,至少有一种更好的工具,称为: SlimIt是一个用Python编写的JavaScript迷你程序。它编译 JavaScript转换成更紧凑的代码,以便下载和运行 更快 SlimIt还提供了一个包含JavaScript解析器的库, lexer,漂亮的打印机和树访客 演示: 假设我们有以下javascript代码:
$.ajax({
type: "POST",
url: 'http://www.example.com',
data: {
email: 'abc@g.com',
phone: '9999999999',
name: 'XYZ'
}
});
现在我们需要从数据
对象获取电子邮件
、电话
和姓名
值
这里的想法是实例化一个slimit
解析器,访问所有节点,过滤所有赋值并将它们放入字典:
from slimit import ast
from slimit.parser import Parser
from slimit.visitors import nodevisitor
data = """
$.ajax({
type: "POST",
url: 'http://www.example.com',
data: {
email: 'abc@g.com',
phone: '9999999999',
name: 'XYZ'
}
});
"""
parser = Parser()
tree = parser.parse(data)
fields = {getattr(node.left, 'value', ''): getattr(node.right, 'value', '')
for node in nodevisitor.visit(tree)
if isinstance(node, ast.Assign)}
print fields
它打印:
{'name': "'XYZ'",
'url': "'http://www.example.com'",
'type': '"POST"',
'phone': "'9999999999'",
'data': '',
'email': "'abc@g.com'"}
我已经将esprima.js翻译成Python: 这是一个手动翻译,所以速度非常快,解析
angular.js
文件大约需要1秒(每秒10万个字符)。它支持整个ECMAScript 5.1和版本6的一部分,例如箭头函数、const
、let
或者,您也可以使用更新版本的esprima to python,它工作得很好,支持整个JavaScript 6antlr3的两个ecmascript/javascript语法都已损坏且未维护。这是一条红鲱鱼。ANTLR 4似乎活着回来。不幸的是蜘蛛门钥匙死在上游。这太棒了!您还可以通过字典访问每个值,例如:
print fields['url']
这个2013年的库似乎无法解析Javascript类。Slimit很不错,但只支持ES5:(这不能从已解析的AST中发出JavaScript,是吗?我想修改AST并发出新的JavaScript,但它似乎不能做到这一点。@GSING2011不,它在解析方面有点困难,所以用另一种方式做已经远远超出了它的能力。我建议scrapinghub的js2xml:经过测试,工作得很好。你可以使用它并重新构建。)例如,爬虫从中捕获一些JSON数据。
{'name': "'XYZ'",
'url': "'http://www.example.com'",
'type': '"POST"',
'phone': "'9999999999'",
'data': '',
'email': "'abc@g.com'"}