编译器各个步骤的介绍
233
词法分析:scanning
将字符流变成词素序列。每个词素使用 <token-name, attribute-vallue> 格式的词法单元(token)表示。
position = initial + rate * 60 转换成 <id, 1> <=> <id,2> <+> <id,3> <*> <60>
语法分析:parsing
创建树形的中间表示形式。表示词法单元流的语法结构。
语义分析:semantic analyzer
检查代码是否符合语义。将类型信息存入语法树或符号表中,包括类型检查和类型自动转换。
中间代码生成:
翻译成目标代码的过程中,编译器可能构造出多个中间表示形式,语法树是其中一种表示形式,通常在语法分析与语义分析中使用。
在完成语义分析后,还需要生成一个明确的低级的或类机器语言的中间表示形式。考虑使用三地址代码的中间表示形式。它 由一组类似汇编语言的指令组成,每个指令有三个运算分量。
指令的最右部最多只有一个运算符,并且这些指令确定了运算完成的顺序。
代码生成器:
以源程序的中间表示形式作为输入,映射到目标语言。如果目标语言是机器代码,那么必须为程序使用的每个变量选择寄存器或内存位置。这样,中间指令将被翻译成能够完成相同任务的机器指令序列。
转载于:https://www.cnblogs.com/lemos/p/9221078.html
编译器各个步骤的介绍相关推荐
- 编译器设计(一)——简单介绍一个编译器的结构
一个编译器的结构 一.语言处理器 二.编译器的结构 三.词法分析 四.语法分析 五.语义分析 六.中间代码生成 七.机器无关代码代码优化 一.语言处理器 计算机很笨,只能认识0和1,而人呢,脑子的存储 ...
- 腾讯小程序php,微信小程序实现使用腾讯地图SDK步骤详细介绍
这篇文章微信小程序实现使用腾讯地图SDK步骤详细介绍的相关资料,需要的朋友可以参考下 微信小程序 使用腾讯地图SDK详解及实现步骤 近期在做一款彩票服务类项目中用到了腾讯地图提供的小程序解决方案,拿来 ...
- 【转】LINUX内核编译步骤详细介绍
from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...
- LINUX内核编译步骤详细介绍
LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf Linux-2.6.18.2.tar.bz2 -C /usr/ ...
- 安装WebBuilder详细步骤和介绍,本人亲测!(遇到的一些问题及解决办法)
安装WebBuilder详细步骤和介绍,本人亲测!(遇到的一些问题及解决办法) 参考文章: (1)安装WebBuilder详细步骤和介绍,本人亲测!(遇到的一些问题及解决办法) (2)https:// ...
- 阿里云服务器购买该如何选择?阿里云服务器购买步骤流程介绍...
很多第一次购买阿里云服务器,不知该如何选择适合自已的服务器.其实购买阿里云服务器,主要是根据自已网站的流量来决定的. 如果网站流量不大,一天只有几百ip,一般选择1核cpu,1G内存,1MB带宽就可以 ...
- 1t硬盘怎么分区最好_win7系统硬盘怎么分区 win7系统硬盘分区步骤【介绍】
我们在使用win7系统的过程当中,经常都会把硬盘分成几个盘,不过因为一些原因,需要把硬盘进行重新分区,不过很多用户都不知道在不重装系统的情况下进行分区,那么win7系统硬盘如何分区呢?今天为大家分享w ...
- 电脑脱机状态怎么解除_win7系统如何解除脱机工作 win7系统解除脱机工作步骤【介绍】...
最近有位win7系统用户反映,自己打开网页的时候就会弹出一个脱机工作的窗口,用户不知道怎么解决,为此非常苦恼,其实脱机工作就是浏览器不连接网络时的一种工作方式,那么win7系统怎么解除脱机工作呢?今天 ...
- win7全屏_win7电脑屏保如何设置 win7电脑屏保设置步骤【介绍】
我们在使用电脑的时候,经常会看到别人的电脑上有非常酷炫的屏保画面,不过自己的电脑却没有任何屏保,其实我们可以自己对电脑的屏保进行设置,那么win7电脑屏保怎么设置呢?今天为大家分享win7电脑屏保设置 ...
- 关于网络营销步骤简单介绍
什么是网络营销 享客网简单介绍下 网络营销(On-line Marketing或E-Marketing)就是以国际互联网络为基础,利用数字化的信息和网络媒体的交互性来辅助营销目标实现的一种新型的市场营 ...
最新文章
- 一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现
- sql查询 关联帖子_从零学会sql,复杂查询
- Python实现 灰色关联分析 与结果可视化
- 深度技术揭秘 | 大促狂欢背后,如何有效评估并规划数据库计算资源?
- 朴素Paxos(Basic Paxos)算法java简易实现
- 关于dlg和pro的问题
- Java DataOutputStream writeByte()方法与示例
- 修改PHP上传文件的大小限制
- 201912-4 区块链(CCF CSP认证)
- C语言26L,LNBH26L - 双路LNBS电源和控制IC,带升压和I²C接口 - STMicroelectronics
- 2015-ResNet讲解
- 北京市城八区廉租住房和经济适用住房保障家庭收入、住房、资产标准已确定
- android 文件下载
- 线性代数学习笔记(一)——二阶和三阶行列式
- error: failed to push some refs to如何解决
- 快乐共享(By Robinvane Suen)
- Android软件开发Log实时查看方式(无需数据线)
- Sketch学会这五招,快速提升工作效率!
- android 点击震动,Android 实现为点击事件添加震动效果
- js 正则替换非数字的字符的几种情况