首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问V8引擎的抽象语法树

访问V8引擎的抽象语法树
EN

Stack Overflow用户
提问于 2012-02-26 14:24:03
回答 3查看 4K关注 0票数 11

对于给定的JavaScript代码,是否可以访问v8引擎的AST?我正在开发一个使用V8引擎的JavaScript静态分析器。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-04 22:53:47

这是相当古老的,但也许答案可以帮助偶然发现这一点的人。答案是肯定的,假设您愿意修改V8并编译您自己的版本。

如果是这样,那么在compiler.cc中,您会发现MakeCode在整个MakeFunctionInfo中都会被调用,从而将存储在传入的CompilationInfo对象中的AST转换为本机代码。您需要编写一个继承自AstVisitor的类,然后可以通过在调用MakeCode之前插入以下代码行来检查AST

代码语言:javascript
运行
复制
MyAstVisitor mAV;
// this will call VisitFunctionLiteral in your AST visitor
info->function()->Accept(mAV);

由于V8会在函数实际被调用时即时编译函数,因此在CompileLazy中还有一个地方,您必须执行相同的操作才能在调用脚本的整个执行过程中获得它们的As。

由于延迟编译,这可能无法让您进行静态分析,因为在您访问延迟编译内容的AST之前,执行已经在进行中了。但这就是如何获得ASTs。

票数 11
EN

Stack Overflow用户

发布于 2012-04-03 14:17:38

通过SetFlagsFromString使用--print-ast

票数 2
EN

Stack Overflow用户

发布于 2012-07-23 16:45:40

好吧,我不知道您想要实现什么,但是听起来您想要从C++代码内部修改AST (或者为它们编写JavaScript上下文的包装类?)。

我建议看一下头文件,它很好地解释了在V8的AST上使用的是什么:

http://v8.googlecode.com/svn/trunk/src/ast.h

~干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9451067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档