是否可以访问给定JavaScript代码的v8引擎AST?我正在使用V8引擎开发JavaScript静态分析器。
是否可以访问给定JavaScript代码的v8引擎AST?我正在使用V8引擎开发JavaScript静态分析器。
这篇文章可能有些旧了,但或许对那些偶然遇到这个问题的人有所帮助。答案是肯定的,前提是你愿意修改V8并编译自己的版本。
如果是这样,那么在compiler.cc中,你可以找到在MakeFunctionInfo中调用MakeCode的地方,该函数将存储在传入的CompilationInfo对象中的AST转换为本地代码。你需要编写一个从AstVisitor继承的类,然后在调用MakeCode之前插入以下行以检查AST:
MyAstVisitor mAV;
// this will call VisitFunctionLiteral in your AST visitor
info->function()->Accept(mAV);
使用 SetFlagsFromString
来启用 --print-ast
嗯,我不知道你想要实现什么,但听起来你想从C++代码内部修改AST(或者为JavaScript上下文编写包装类?)。
我建议查看头文件,这些文件相当详细地解释了V8的AST中可用的内容:
http://v8.googlecode.com/svn/trunk/src/ast.h
祝福您一切顺利