1.编译原理
1.分词/词法分析
这些代码块被称为词法单元(token)。例如,var a = 2;。这段程序通常会被分解成为下面这些词法单元:var、a、=、2 、;
2.解析/语法分析
这个过程是将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为“抽象语法树”(Abstract Syntax Tree,AST)
<script> variabledeclaration identifier = a assignmentExpession numricliteral =2 </script>
3.代码生成
将AST转换为可执行代码的过程称被称为代码生成 。
3.编译原理的重要角色
引擎
从头到尾负责整个JavaScript程序的编译及执行过程。
编译器
引擎的好朋友之一,负责语法分析及代码生成等脏活累活。
作用域
引擎的另一位好朋友,负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限
4.RHS和LHS查询
如果查找的目的是对变量进行赋值,那么就会使用LHS查询;如果目的是获取变量的值,就会使用RHS查询
5.错误类型
ReferenceError同作用域判别失败相关,而TypeError则代表作用域判别成功了,但是对结果的操作是非法或不合理的。