连载《Chrome V8 原理讲解》第三篇 看V8编译流程,学习词法分析

292 阅读1分钟

原创处出:www.anquanke.com/post/id/253…

本篇内容

本次是第三篇,讲解V8中词法分析(scanner)的实现,这中间涉及到几个重要的数据结构和一些相关的编译知识,本文也尽量全面讲解相关的编译知识,争取让读者有一个全面的认识。注:本文不涉及V8的优化编译

 

1.V8编译流程

总体来说,V8的编译过程是同步实现的,主体流程是扫描在初始化时先生成一个token字,并放入缓存(cache),然后开始分析(parser),从缓存中取一个token做分析,然后生成抽象语法树的一个节点,再取下一个token进行分析,如此循环。如果缓存未命中(cache miss),便启动扫描去生成token,如图1所示。

下面看一下V8中的代码实现,Parser::ParseProgram方法,是图1中扫描器(scanner)的入口点。在这段代码中可以看到scanner_.Initialize()和FunctionLiteral* result = DoParseProgram(isolate, info),这两个方法的作用是:

1.初始化扫描器(scanner)  生成第一个token字,scanner.c0_指向第一个开始的字符,也就是要扫描的第一个字符。

2.DoParseProgram(isolate, info):  读取token字,生成AST的body,最终所有body汇聚成AST语法树。

...... ......

文章排版很费事,请移步原创位置:www.anquanke.com/post/id/253…

微信:qq9123013 备注:v8交流学习 邮箱:v8blink@outlook.com