ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第一章 导论

2021-09-13 21:34:31  阅读:232  来源: 互联网

标签:思维 源程序 程序 导论 第一章 编译 计算 编译程序


第一章 导论

一、什么是编译程序

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

翻译程序(Translator)

​ 把某一种语言程序(称为源语言程序)等价地转换成另─种语言程序(称为目标语言程序)的程序。

image-20210912214206120


编译程序(Compiler)

​ 把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序。

image-20210912214349393

​ 诊断编译程序(Diagnostic Compiler)

​ 优化编译程序(Optimizing Compiler)

​ 交叉编译程序(Cross Compiler)

​ 可变目标编译程序(Retargetable Compiler)


解释程序(Interpreter)

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

image-20210912214843970


image-20210912215031423

image-20210912215144413



二、为什么要学习编译原理

学习目的

​ 从计算机科学与技术中学什么?

​ ◆理解计算系统

​ ◆设计计算系统

​ ◆训练计算思维(Computational Thinking)


计算思维

image-20210912220308860

​ 计算思维是什么[J.Wing,2006]

计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括了一系列广泛的计算机科学的思维方法。

​ 计算思维和阅读、写作和算术一样,是21世纪每个人的基本技能,而不仅仅属于计算机科学家。

​ 计算思维在生物、物理、化学、经济学、统计学等其他学科中的影响已经显现。

包括一系列广泛的计算机科学的思维方法抽象

​ ◆自动化

​ ◆问题分解

​ ◆递归

​ ◆权衡

​ ◆保护、冗余、容错、纠错和恢复

​ ◆利用启发式推理来寻求解答

​ ◆在不确定情况下的规划、学习和调度等

关于编译理论与技术

编译理论与技术

​ 计算机科学与技术中理论和实践相结合的最好典范

​ 体现了很多典型的计算思维方法

ACM图灵奖

​ 授予在计算机技术领域作出突出贡献的科学家

​ 程序设计语言、编译相关的获奖者是最多的


抽象(Abstraction)

​ 忽略一个主题中与当前问题(或目标)无关的那些方面,以便更充分地注意与当前问题(或目标)有关的方面

​ 从众多的事物中抽取出共同的、本质性的特征,舍弃其非本质的特征

​ 是—种从个体把握一般、从现象把握本质的认知过程和思维方法

image-20210913190613313

图灵机

​ —条无限长的纸带一个读写头

​ 一个状态寄存器

​ 一套控制读写头工作的规则

邱奇-图灵论题(The Church-Turing thesis)

​ 所有计算或算法都可以由一台图灵机来执行

​ 可计算=图灵可计算


编译原理中的"抽象"

​ 有限自动机

​ 形式文法等


自动化(Automation)

​ 将抽象思维的结果在计算机上实现,是一个将计算思维成果物化的过程,也是将理论成果应用于技术的实践

​ 自动化的思维方法不仅体现在编译程序本身的工作机制上,更体现在了编译程序的生成工具的研究和设计上

编译原理中的"自动化:

​ 有限自动机

​ 预测分析程序

​ 算符优先分析

​ LR分析等


分解(Decomposition)

​ 将大规模的复杂问题分解成若干个较小规模的、更简单的问题加以解决

​ 对问题本身进行明确描述,并对问题解法作出全局性决策

​ 把问题分解成相对独立的子问题

​ 再以同样的方式对每个子问题进—步分解,直到获得对问题的明确的解答

image-20210913191526652

编译原理中的"问题分解":

​ 编译程序引入中间语言

​ 编译分成多个阶段

​ 分析过程分成多遍


递归(Recursion)

​ 问题的解决依赖于类似问题的解决,只不过后者的复杂程度或规模较原来的问题更小

​ —旦将问题的复杂程度和规模化简到足够小时,问题的解法其实非常简单

编译原理中的"递归":

​ 递归下降分析

​ 基于树遍历的属性计算

​ 语法制导翻译等


权衡(折衷,Tradeoff )

​ 理论可实现vs.实际可实现

​ 理论研究重在探寻问题求解的方法,对于理论成果的研究运用又需要在能力和运用中作出权衡

编译原理中的"权衡":

​ 用上下文无关文法来描述和处理高级程序设计语言

​ 优化措施的选择等


学习编译原理的意义

学习编译程序构造原理,技术

​ ◆提高对计算机系统总体认识

​ ◆感悟计算思维

​ ◆更好地理解“计算”

更好地理解高级语言

运用编译原理和方法构造实用工具

​ ◆用“计算”的眼光看世界

​ ◆用计算解决实际问题



三、编译过程

​ 编译程序是怎样把高级语言(如C++)翻译成低级语言(如机器指令)的?

​ The compiler can translate a program from source language to target language.

​ 编译程序能够把一个程序从源语言翻译成目标语言。

把英文翻译为中文 编译程序工作的五个阶段

​ ◆识别出句子中的一个个单词 词法分析

​ ◆分析句子的语法结构 语法分析

​ ◆根据句子的含义进行初步翻译 中间代码产生

​ ◆对译文进行修饰 优化

​ ◆写出最后的译文 目标代码产生


词法分析

​ 任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出单词符号

​ 依循的原则:构词规则

​ 描述工具:有限自动机

image-20210913195418981


语法分析

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

​ 依循的原则:语法规则

​ 描述工具:上下文无关文法

image-20210913195712475


中间代码产生

​ 任务:对各类语法单位按语言的语义进行初步翻译

​ 依循的原则:语义规则

​ 描述工具:属性文法

​ 中间代码︰三元式,四元式,树,...

image-20210913200043615


优化

​ 任务:对前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码

​ 依循的原则:程序的等价变换规则

image-20210913200503249

(400次加法,200次乘法)

image-20210913200340046

(301次加法)


目标代码生成

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

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

​ 目标代码三种形式:

​ ◆汇编指令代码:需要进行汇编

​ ◆绝对指令代码:可直接运行

​ ◆可重新定位指令代码:需要链接

image-20210913201023142



四、编译程序的结构

一、编译程序总框

image-20210913202421340


出错处理

出错处理程序

​ 发现源程序中的错误,把有关错误信息报告给用户

语法错误

​ 源程序中不符合语法(或词法)规则的错误

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

语义错误

​ 源程序中不符合语义规则的错误

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


二、遍(pass)

​ 所谓"遍",就是对源程序或源程序的中间表示从头到尾扫描一次

​ 阶段与遍是不同的概念

​ ◆—遍可以由若干段组成

​ ◆一个阶段也可以分若干遍来完成


三、编译前端与后端

image-20210913202908651

编译前端

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

编译后端

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

带来的好处

​ 程序逻辑结构清晰

​ 优化更充分,有利于移植

计算思维

​ 分解、权衡

image-20210913203209943



五、编译程序的生成

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

​ 优点:可以针对具体的机器,充分发挥计算机的系统功能;生成的程序效率高

​ 缺点:程序雅读、难写、易出错、难维护、生产效率低


高级语言书写

image-20210913210738616

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

Screenshot_1


移植方法

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

Screenshot_2


自编译方式

image-20210913211505188

编译程序自动产生

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

​ LEX:词法分析程序产生器

​ YACC:语法分析程序产生器

image-20210913211647075

标签:思维,源程序,程序,导论,第一章,编译,计算,编译程序
来源: https://www.cnblogs.com/anyuyu/p/15264934.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有