编译器编写(1)

编译器编写(1)

Java从源程序编译为一种字节码的形式,意在减少Java应用程序的下载时间。
Java程序是通过在对应的JVM上运行字节码来实现的,JVM是一种字节码的解释器,许多JVM都包括了JIT编译器,运行时执行的编译器,将字节码转换成本机码。
虚拟机是处理器的模拟器,是针对本机指令集的解释器。

编译器使用的算法知识:
贪心算法(寄存器分配)、启发式搜索技术(表调度)、图算法(死代码消除)、动态规划(指令选择)、有限自动机和下推自动机(词法分析和语法分析)、以及不动点算法(数据流分析)。

编译器结构:
单盒模型指出,编译器必须理解输入的源程序并将其功能映射到目标机,这两项功能决定了编译器分为前端和后端两部分。
前端:将源程序的认识编码到某种结构(IR)中,以供后端使用(词法分析、语法分析和加工)
IR: 编译器使用一些数据结构来表示他处理的代码,称为中间表示
后端:将IR程序映射到目标机的指令集和有限的资源上,后端仅处理IR(指令选择、指令调度、寄存器分配)
中间部分:将IR程序作为输入,产生一个语义上等价的IR程序作为输出,称为优化器。

前端
词法分析:在一趟处理中将单词归入相应的类,词法分析器以字符流作为输入,并将其转化为已归类单词的流,已归类单词是形如(p,s)的对,p是单词的词类,s是单词的拼写 eg:(noun:“bag”);
语法分析:找出各词性组成的可能正确的组合,与待验证句子进行比对,自动查找推导的过程称为解析(或语法分析,parsing)。

中间表示

优化器
分析和转换

后端
对于每个IR操作,后端都会选择相应的目标机操作来实现它
指令选择:将IR操作重写为目标机操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值