代码编译原理,编译原理及实现
本文已经给大家带来了一些关于javascript的知识,主要整理了介绍的相关问题。Javascript是从Netscape的LiveScript发展而来的原型化和继承的面向对象和区分大小写的客户机脚本语言。下面就来看看吧,希望对你有帮助。
【相关推荐:javascript视频教程,web前端】
1.分词/词法分析
首先说一下分词。分词是将字符串分解成对编程语言有意义的代码块。这些代码块被称为词汇单元。比如var a=2,会分解成下面的词法单元。具体来说:var,a,=,2。注意:分词其实就是将上面的整段代码进行一个拆分为一段一段。
2.解析/语法分析
解析是将词法单元流转化为元素逐步嵌套的树,表示程序的语法结构。这棵树叫做:抽象语法树。鉴于此处标准字较长,我就不考虑了。我就直接用更直观的形式表现出来。具体数字如下:
解析:抽象语法树会有一个var的顶级节点,后面是一个变量为A的子节点和一个带赋值器的节点=赋值器下还有一个2的子节点。它对应于代码var a=2。
3.代码生成
将抽象语法树转换成可执行代码的过程称为代码生成。这个过程与语言和目标平台密切相关。简单来说,有某种方法可以把var a=2的抽象语法树转换成机器指令。用于创建名为的变量并将值存储在中。
4.LHS和RHS查询
执行JavaScript代码主要靠引擎。当引擎执行var a=2时,它将查找变量a,以确定它是否已被声明。的查找过程由范围辅助。在查询过程中,引擎会对变量A进行LHS(左查询),对值进行右查询。简单来说,当变量出现在赋值操作的左侧时,进行LHS查询,出现在右侧时,进行RHS查询。更准确地说,LHS查询试图找到变量的容器本身,而RHS查询获得它的源值。
注意:在函数中,将会有LHS和RHS查询。因为在传递参数的过程中,社交代码会进行隐式赋值。
5.异常
当变量尚未声明时,LHS查询和RHS查询的行为是不同的。
函数foo(a){
console . log(a b);
b=a;}foo(2)注意:B的第一个右查询找不到该变量,即它是一个未声明的变量,因为它在任何相关的作用域中都找不到。如果RHS在嵌套范围内找不到所需的变量,引擎将抛出一个异常。
6.小测验
函数foo(a){
var b=a;
返回a b;
}
Var=foo (2)问题:找出所有LHS查询和RHS
答案:LHS(c=…,a=2,b=…)和RHS(foo(2…,=a,a…,…b))
【相关推荐:javascript视频教程,web前端】以上是详细了解JavaScript编译原理的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。