JS引擎V8 Parser源码分析

c85e

贡献于2014-01-13

字数:0 关键词: JavaScript开发

JSJSJSJS引擎V8V8V8V8 Parser Parser Parser Parser 源码分析 V8版本号:2.2.14 版本号:0.01 版本更新、技术讨论请前往 http://www.seaforestmountain.com/bbs 作者:暗夜之眸 版权所有:www.seaforestmountain.com 作者邮箱:androidresearcher@gmail.com 1111 V8V8V8V8 parser parser parser parser 在V8V8V8V8架构中的地位 V8对js 的脚本的处理流程大体分为 本文所研究的正是这个流程第一步。 1.11.11.11.1 VVVV8888 parser parser parser parser 处理脚本的层次 1 进入FunctionLiteral* MakeAST(…),这里分辨出要处理时 json 还是普通的 js 脚本,普通 的js 脚本通过调用 parser.ParseProgram(…)处理 2 进入FunctionLiteral* Parser::ParseProgram(…),这是个 wrapper,主要工作是 2.1 构建该脚本运行时所需要的 scope,以及编译时需要的 Scanner, 2.2 对该脚本语法抽象树的生成工作主要由 void* Parser::ParseSourceElements(…)完成,生成 的结果放在准备的容器:ZoneListWrapper body(16)中。 2.3 根据生成结果生成 FunctionLiteral 类型的返回结果 3 进入void* Parser::ParseSourceElements(…),这里的逻辑很简单,就是用 Statement* parser 生成抽象语法树,这里将每一句 js 语句(statement) 生成为一个节点 本地代码引擎将抽象语法树生成对应的二进制代码,依次 取出每个节点,不同类型的节点有着不同代码生成方法 执行,遇到新的函数调用再次启动这个过程(这时 是 lazy_parser) Parser::ParseStatement(…)将每行 js 语句分析出来,每条 js 语句被解析成 Statement。 代码分析如下: class AstBuildingParser : public Parser { Handle