1.javascript解析机制
2.预编译期
(1)js是一种解释型语言,而不是编译型语言
(2)解释型语言: 代码在执行时才被解释器一行行动态编译和执行,而不是在执行之前就完成了编译
简单的说,解释型语言就是边编译边执行,而编译型语言是先编译后执行,两者的操作过程不同
(3)编译器的组成
(4)编译器编译流程
(4-1)词法分析:js解释器先将脚本代码的字符流转换为记号流
例如:把字符流
a=(b-c);
转换为记号流:
NAME "a"
EQUALS
OPEN_PARENTHESIS
NAME "b"
MINUS
NAME "c"
CLOSE_PARENTHESIS
SEMICOLON
词法分析器是编译器中与源程序直接接触的部分,因此词法分析器可以实现
去掉注释,自动生成文档
提供错误的位置(可以通过记录行号来提供),当字符流变成记号流以后,就没有了行的概念
完成预处理
词法分析是对js脚本代码进行逐一分析的过程,它相当于语言翻译
(4-2)语法分析:将词法分析所产生的记号生成语法树。通俗的说就是把程序中收集的信息存储到数据结构中,请注意:编译中的数据结构包括两种:符号表和语法树
符号表:在程序中用来存储所有符号的一个表,包括所有的字符串变量,直接量字符串,还有函数和类。
语法树:就是程序结构中的一个树形表示,并将使用这个树形结构来生成中间代码。
例如:下面是一个简单的条件结构和输出信息代码段,被语法分析器转换为语法树之后,如图:
if(typeof a == "undefined"){
a=0;
}else{
a=a;
}
alert(a);
3.执行期