编译原理(第一天:编译、编译器、词法分析)

编译:一个类似翻译的过程,将 源语言 翻译成 目标语言( 高级语言 --> 汇编语言 / 机器语言 )

汇编语言的缺点:编写效率低,与机器有关,非程序员难以使用,语法与人一般使用的区别较大

编译过程:( 此处表示编译器的地位 )

1    源程序 ( 经过预处理器 )--> 经过预处理的源程序

2 ( 编译器 )--> 汇编语言程序

3 ( 汇编器 )--> 可重定位的机器代码 重定位:在内存中存放位置不固定

4 ( 链接器 / 加载块 )--> 目标机器代码         加载块:修改可重定位地址;将修改后的指令和数                                                                                           据放在内存中合适位置

                                                                         链接器:将多个可重定位的机器代码文件(包括库                                                                             文件)连接在一起;解决外部内存地址问题

编译器的结构

词法分析器:将 字符流 翻译成 词法单元流

语法分析器:将 词法单元流 翻译成 语法树

语义分析器:将 语法树 翻译成 语法树

中间代码生成器:将 语法树 生成为 中间表示形式

机器无关代码优化器:中间表示形式

目标代码生成器:生成目标代码语言

机器相关代码优化器:目标机器语言

由于物理实现不同,中间的部分可能整合为一个,实现多个操作。

词法分析:

任务:从左到右逐行扫描源程序字符,识别并确定单词类型,进而转换成对应的机内表示-----语法单元 token 形式       token:< 种别码,属性值 >

单词类型:关键字、标识符、常量、运算符、界限符

       关键字:一词一码           标识符:多词一码          常量:一型一码

        运算符:一词一码或一型一码                               界限符:一词一码

while( t < 0 ){  ; }

while  -->   < WHILE ,   >

(       -->   <SLP,   >

t      -->    <IDN,   t>       

   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值