编译原理随笔资料

编译和解释的区别
编译原理之文法篇
词法分析
语法分析
语义分析
语义分析之语法制导翻译
中间代码生成
代码优化
目标代码生成

编译总过程

编译翻译汇编 翻译: 编译(翻译高级语言):将高级语言翻译成汇编语言,或将高级语言翻译成机器语言
汇编(翻译汇编语言):将汇编语言翻译成机器语言 转换(也被称为预处理):高级语言之间的翻译,如FORTRAN到ADA的转换
编译:高级语言可以直接翻译成机器语言,也可以翻译成汇编语言,这两个翻译过程称为编译 汇编:从汇编语言到机器语言的翻译被称为汇编
交叉汇编:将一个汇编语言程序汇编成为可在另一机器上运行的机器指令成为交叉汇编 反汇编:把机器语言翻译成汇编语言
反编译:把汇编语言翻译成高级语言
在这里插入图片描述

语言处理的主要工作流程: 源代码→ 预处理器→ 编译器 → 目标代码→ 链接器 → 可执行程序

1 处理器(预处理):作用是通过代入预定义等程序段将源程序补充完整。把存储在不同文件中的源程序聚合在一起,把被称为宏的缩写语句转换为原始语句。
2 编译器(前端语法语义分析形成抽象的语法树,后端优化中间代码生成目标代码)进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,也称为obj文件。
3 链接器(链接):一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的EXE,所以我们电脑上的文件都是经过编译后的文件
在这里插入图片描述

编译器流程
在这里插入图片描述
词法分析:从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的类型,将识别出的单词转换成统一的机内表示——词法单元(token)的形式。把源代码分割成一个一个的词法记号
语法分析:词法分析器输出的 token 序列中识别出各类短语,并构造语法分析树。语法分析树描述了句子的语法结构。
语义分析:给语法树添加信息,用于生成正确的目标代码
生成中间码:节省工作量,解放生产力,增加灵活性
优化:让程序跑得更快
语法和语义结合称为语法制导翻译
1> 词法分析:词法分析的输入是源程序,输出是识别出的记号流.目的是识别单词. 至少分以下几类:关键字(保留字)、标识符、字面量、特殊符号
2> 语法分析: 输入是词法分析器返回的记号流,输出是语法树.目的是得到语言结构并以树的形式表示.对于声明性语句,进行符号表的查填,对于可执行语句,检查结构合理的表达式运算是否有意义.
3> 语义分析:根据语义规则对语法树中的语法单元进行静态语义检查,如类型检查和转换等,目的在于保证语法正确的结构在语义分析上也是合法的.
4> 中间代码生成:生成一种既接近目标语言,又与具体机器无关的表示,便于代码优化与代码生成.
5> 中间代码优化:局部优化、循环优化、全局优化等;优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效
6> 目标代码生成:不同形式的目标代码—汇编语言形式、可重定位二进制代码形式、内存形
在这里插入图片描述
在这里插入图片描述

前几天搜了一些编译相关知识点做成一个word文档,今天想在博客上整理一下,但由于当时没有标明出处,若有侵权,请联系我删除相关博客

某手写笔记https://blog.csdn.net/qq_40237865/article/details/94764491

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值