编译原理课程笔记CH1 引论

CH1 引论


程序设计语言编译程序构造的基本 原理基本实现技术

编译程序基本概念

翻译程序

源语言—翻译程序---->目标语言程序

编译程序(compiler)

高级语言—编译程序–>低级语言

编译程序运行在宿主机

低级语言运行在目标机

低级语言

可直接运行

eg.汇编语言,机器语言(cpu指令级)

分类

可通过开关选择

诊断编译程序(diagnostic compiler)

用于开发和调试,发现错误排错

//不关注效率

优化编译程序(optimizing compiler)

生成高效代码

交叉编译程序(cross compiler)

在一个平台上生成另一个平台上的可执行代码

可变目标编译程序(retargetable complier)

根据不同的目标机运行平台,产生不同的目标程序,这些程序可运行在不同的目标机上

解释程序(interpreter)

把源语言写的源程序作为输入,但不产生目标程****序,边解释边执行

编译过程

词法分析

任务

输入源程序,对构成程序的字符进行扫描分解,识别处一个个单词符号

依循的原则

构词规则

描述工具

有限自动机/有限状态机

在这里插入图片描述

语法分析

任务

在词法分析的基础上,根据语法规则把单词符号串分解成各类语法单位(语法范畴)

依循的原则

语法规则

描述工具

上下文无关文法
在这里插入图片描述

= 赋值表达式

算术表达式+算术表达式

算术表达式*算术表达式

中间代码产生

任务

对各类语法单位按语言的语义的予以进行初步翻译

依循的规则

语义规则

描述工具

属性文法

分类
三元式
四元式

在这里插入图片描述

树形结构
。。。

优化

任务

对前阶段产生的中间代码进行加工变换,为了在最后阶段产生更高效的目标代码//可读+效率winwin

依循规则

程序的等价变换规则
在这里插入图片描述
before:
在这里插入图片描述
after:
在这里插入图片描述

将部分循环体内部分移除循环,等价变量转换

目标代码产生

依赖于硬件系统结构机器指令含义

任务

把中间代码变换成特定机器上的目标代码

形式
汇编指令代码

需要进行汇编

绝对指令代码

可直接运行

可重新定位指令代码

需要连接//从任何地址开始运行

//模块化软件独立开发

在这里插入图片描述

编译程序结构

编译程序总框

在这里插入图片描述
符号表管理/表格管理:编译过程中各种对象的存储、组织、修改,为各个阶段的分析提供依据

出错处理:纠错+定位错+修改建议

表格和表格管理

常见表格
符号表格

用于定义

常数表
符号表

goto(label)

名字信息

出错处理

出错处理程序

发现源程序的错误,把有关错误信息报告给用户(语法错误/语义错误)

语法错误

1.不符合语法/词法规则的错误

2.非法字符、括号不匹配、缺少;、。。。。

语义错误

1.不符合语义规则

2.说明错误、作用域错误、类型不一致

源程序/源程序的中间代码从头到尾扫描一次

遍&&阶段

编译前端和后端

在这里插入图片描述

编译前端

源语言有关,eg词法分析、语法分析,语义分析和中间代码产生,与机器无关的优化

编译后端

目标机有关,与目标机有关的优化,目标代码产生

好处

1.程序逻辑结构清晰

2.优化更充分,有利于移植//前端不变改后端->目标语言不同,反之源语言不同

汇编程序的生成

以机器语言和汇编语言为工具

优点

可以针对具体机器//发挥计算机效率

生成程序效率高

缺点

程序难读难写易出错难维护生产效率低

高级语言书写

在这里插入图片描述

程序易读、易理解、容易维护、生产效率高

//在同一机器实现不同语言

利用已有语言实现另一语言的编译程序

1.在这里插入图片描述P1:A的机器语言版本的编译程序,可以在A机器上直接运行,L1->A,A机器上的L1语言编译程序

2.在这里插入图片描述
P2:用L1语言执行不可以直接在A机器上运行

3.在这里插入图片描述

P2:可以在A机器上直接运行了

=====》推广

移植方法

把一种机器上的编译程序移植到另一种机器上

1.在这里插入图片描述
想要L-》B且以B机器代码,可直接运行在B机器上

2.在这里插入图片描述
3.在这里插入图片描述P2&&P2功能等价

4.在这里插入图片描述
5.在这里插入图片描述

自编译

L语言的核心部分L1:构造小的编译程序(高级/低级语言)

以L1为开发工具->更多语言成分

自展
在这里插入图片描述

编译程序自动产生

编译程序-编译程序/编译程序产生器/编译程序书写系统

(一个意思)

LEX:词法分析程序产生器

YACC:语法分析程序产生器

接受形式化描述产生编译程序
在这里插入图片描述

小结

编译程序

翻译
编译
解释

编译基本过程

词法分析
语义分析
中间代码生成
优化
目标代码产生

编译程序结果

阶段
前端/后端

编译程序生成方法

机器/汇编语言书写
高级语言书写
移植
自编译

词法分析程序产生器

YACC:语法分析程序产生器

接受形式化描述产生编译程序

[外链图片转存中…(img-UiHM7EqK-1678109890068)]

小结

编译程序

翻译
编译
解释

编译基本过程

词法分析
语义分析
中间代码生成
优化
目标代码产生

编译程序结果

阶段
前端/后端

编译程序生成方法

机器/汇编语言书写
高级语言书写
移植
自编译
自动生成
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值