编译原理1-引论

1 什么是编译

编译:将高级语言(源语言)翻译成汇编语言或机器语言(目标语言)的过程

源语言目标语言过程名称
高级语言机器语言编译
汇编语言机器语言编译
高级语言汇编语言汇编

步骤

  • 源程序经过预处理器(将分块的源程序聚合到一起)得到预处理的源程序
  • 预处理的程序经过编译器得到汇编语言
  • 汇编语言通过汇编器得到可重定位机器语言(起始位置不定,可变化)
  • 可重定位机器语言通过链接器(解决外部内存地址问题,将对各可重定位代码和库文件进行链接)与加载器得到目标机器代码。

编译的步骤
词法分析,语法分析,语言分析,中间代码生成,机器无关代码优化,目标代码生成,机器相关代码的生成。

1.1 词法分析

将所有的词素都都用次法单元(token)作为输出

token:<token-name,attribute-value>  (<种别码,属性值>)

标识符采用多词一码,其他类别的类型,如单词类型,关键字,常量,运算符,界限符等都采用一词一码或一型一码

例:

代码:position=inital+rate*60
position<id,1>
=<=>
inital<id,2>
+<+>
rate<id,3>
*<*>
60<60>
得:<id,1><=><id,2><+><id,3><*><60>
1.2 语法分析

用词法分析生成的词汇单元创建语法树

1.3 语义分析

使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致,同时也手机属性信息供生成中间代码使用

1.4 中间代码生成

中间代码应选择易于生成,并且能被轻松翻译为目标机器上的语言,常用表示为三地址代码。

三地址代码:由类型汇编语言的指令序列组成,每个地址最多三个操作数,有些三地址指令运算分量少于三个。

1.5 代码优化与目标代码生成

主要进行的工作是自动识别并删除重复冗余运算,将高代价运算换低代价运算等等,目的是希望程序运行加快,暂用空间减少。

目标代码生成的重要任务是为程序使用的变量合理分配寄存器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值