编译原理

我们知道计算机识别的语言并不是我们所看到的代码,而是对这些代码进行编译之后的机器语言,而将我们写的代码,转化成机器语言的过程,就被称为编译。

下面我们会来看一下计算机是如何对一段代码进行编译的,当然我们并不能清清楚楚的介绍每一步,只能说一下大概的步骤,而且真正详细的过程对我们来说也没有必要了解的清清楚楚。

传统的编译语言的流程中,大致可以分为三个步骤:
1. 分词/词法分析

这个过程很容易理解,就是将一段代码,分割成一个个的有意义的代码块,这些代码块被称为词法单元。比如 var a = 2;。分词之后就会产生 var,a,=,2,;。五个词法单元(也不一定是五个,其中的空格会不会被分割成单独的词法单元,要看不同语言对空格不同的解析了)
上面的解释中我们一直没有提词法分析这个词,其实词法分析就是计算机将 var a = 2;这句代码进行分析,转化为一个个词法单元的过程,带入这段代码来说就是分析var是一个词法单元,还是v,a,r三个。

2. 解析/语法分析

这个过程就是将词法单元流(词法单元组成的数组)转换成一个有元素逐级嵌套所组成的代表程序语法结构的树,称作抽象语法树(AST)

3. 代码生成

最后一步就是计算机能识别的代码的生成了,说白了就是将AST转换成可执行代码的过程。

这个过程中的具体细节我们不去了解,也很难理解清楚(滑稽),简单的说,就是var a = 2;转化成机器指令,计算机识别这条机器指令创建一个a的变量,分配内存等,并将2存储在a中。

大部分的语言都会在一开始先将代码进行编译,然后执行,但是我们要学习的JavaScript并不一样,JavaScript的编译发生在代码执行前的几微秒,甚至更短,说白了就是该执行var a = 2;这句代码了才将这句代码编译,然后就直接执行他。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值