编译原理笔记 一

编译原理

1.1

编译器就是个程序,读入某种语言编写的程序,翻译成另一种语言的程序。并能告知源程序的错误。


1.11 编译的分析综合模型

编译由两部分组成,分析和综合。

分析部分将源程序切分成一些基本块并形成源程序的中间表示,综合部分把源程序的中间表示转换成目标程序。

分析期间:

源程序的操作将被确定下来并表示成为一个语法树的分层结构:

赋值语句 Position :=initial + rate * 60; 语法树如下图所示:


 

1.12 编译器的前驱和后继

 

 

源程序可能被分成模块存在不同的文件中,把存储在不同文件中的程序模块集成为完整的一个源程序的任务由预处理器完成,当然预处理器也能进行宏替换。

 

典型的“编译”过程如下图所示:由编译器创建的目标程序需要进一步处理才能运行。左图中编译器产生汇编代码,汇编代码需要由汇编器翻译成机器代码,然后与库程序连接在一起形成可在计算机上机运行的代码。

 

 

 

1.2 源程序分析

 

源程序的分析过程由 3 个阶段组成:

1.       线形分析

在编译器中,线性分析被称为词法分析或扫描

2.       层次分析

层次分析被称为语法分析

3.       语义分析

语义分析阶段检测源程序的语义错误,并收集代码生成阶段要用到的类型信息。

 

 

1.3 编译器的各个阶段

从概念讲,编译器是分阶段的,每个阶段将源程序从一种表示转换成另一种表示。


1.31
符号表管理器

符号表是一个数据结构。每个标志符在符号表都有一条记录,记录的每个域对应于该标志服的一个属性。但是标志符属性一般不再词法分析中确定。将在词法分析以后的各个阶段陆续写入符号表,并以各种方式被使用。

1.33 各阶段分析

 


 

编译最后一个阶段为目标代码生成,生成可重定为的机器代码或者汇编代码。在这一阶段,编译器为源程序定义和使用的变量选择存储单元,并把中间指令翻译完成相同任务的机器代码指令序列。

gcc 中: gcc -S a.i -o a.s 能够生成汇编代码 

 

1.4 编译器的伙伴

1.41 预处理器

预处理器产生编译器的输入,一般具有以下的功能:

1.       宏处理

2.       文件包含

把头文件包含到程序正文中

3.       理性预处理器

4.       语言扩充

 gcc 中: gcc -E a.c -o a.i     产生预处理后的文件a.i,能看到宏的扩展

 

1.42 汇编器

某些编译器产生汇编代码,汇编代码需要汇编器做进一步处理。也有些编译器完成汇编的操作,产生可重定为的机器代码,交给装配器或者连接编辑器处理。

1.43 两编汇编

最简单的汇编对输入汇编程序文件进行两遍扫描,第一遍扫描中,表示存储单元的所有标志符都被识别出来,并存入符号表(汇编器的符号表)。假定标志符占 4 个字节,且从 0 地址开始。

在第二遍扫描中,汇编器再次从头扫描输入文件。这一次将每个操作符翻译成机器代码中代表相应操作的二进制位序列。第二遍扫描的输出是可重定位的机器代码。可重定为指的是装入的起始地址可以是任意的内存单元 Lc, 也就是说,如果将 L 加到代码的所有地址上,整个程序对所有存储地址的引用都是正确的。


gcc 中: as a.s -o a.o 生成目标文件


1.44 装配器和连接编辑器

装配器完成程序的装入和连接编辑两项功能。装入过程包括读入可重定为的机器代码,修改重定为地址,并将修改后的指令和数据放到内存中适当的位置。

连接编辑器将我们多个可重入机器代码的文件组装成一个程序。这些可重入机器代码的文件可以是多次编译的结果,其中一个或多个可能是库文件程序。

 

外部引用:一个文件中的代码引用另一个文件中的存储单元,这种引用可以是数据单元的引用,或者是出现在一个文件中代码而在另一个文件中被调用的过程的入口点的引用。

gcc 中: gcc a.o -o a.out 生成执行代码

### 回答1: 编译原理是针对计算机编程语言的研究,目的是将高级语言转化为机器语言并执行。编译原理笔记PDF是一份系统性的学习笔记,包含了编译原理的各个方面。这份学习笔记可以帮助学习者深入了解编译原理,掌握相关的技能。 编译原理笔记PDF通常包含以下几个方面的内容:编译原理的基本概念,编译器的结构与原理,语法分析器的设计与实现,语义分析器的设计与实现,间代码生成和机器码生成,以及优化技术等。这些内容都是非常重要的编译原理知识点,可以帮助学习者理解编译原理的各个方面,并掌握相关的技术细节。 编译原理笔记PDF还可以提供一些编译原理实战案例,帮助学习者将所学知识应用到实际情况。实际有很多编译器与解析器需要我们开发,而这份学习笔记可以准确清晰地指导我们如何设计和开发这些编译器。 总之,编译原理笔记PDF是一份非常有价值的学习资料,可以帮助我们深入了解编译原理,掌握相关的技能,并将这些知识应用到实际情况。 ### 回答2: 编译原理笔记PDF是一份非常全面的编译原理学习资料,其详细介绍了编译原理的各个方面,包括词法分析、语法分析、语义分析间代码生成、代码优化和目标代码生成等。这些内容不仅涵盖了编译原理的基本理论概念和算法,还提供了许多实际的实现案例和实际开发的工具。 对于想要学习编译原理的同学来说,编译原理笔记PDF是一个非常好的选择,它可以帮助同学们快速地掌握编译原理的相关知识和技能。通过对这份资料的学习,同学们能够从实际问题和实际应用的角度深入理解编译原理的相关概念和算法,同时掌握一些实用的工具和技术,从而更好地应对工作和学习的编译问题。 总之,编译原理笔记PDF是一份非常有价值的学习资料,它能够帮助同学们更好地学习和理解编译原理的相关概念和算法,同时提供一些实际的工具和技术供同学们参考和应用。建议有相关需求的同学一定要好好利用这份资料,从学到更多有用的知识和技能。 ### 回答3: 编译原理笔记 pdf是一本关于编译原理的学习资料,其涵盖了编译原理的基础知识、重要概念、算法和分析等内容。编译原理是计算机科学非常重要的一门学科,其研究的是如何将一种高级语言转化为低级语言,并使之在计算机运行。编译原理涵盖的内容很广,包括词法分析、语法分析、语义分析间代码生成、代码优化和目标代码生成等等。 编译原理笔记 pdf可以帮助学习者更好地理解和掌握编译原理的知识,尤其是对于那些正在学习编译原理或者准备学习编译原理的人来说,是一本非常有价值的资料。它可以帮助学习者更深入地了解编译原理的基础概念,例如编译器、编译过程、语言处理器等等,同时也可以帮助学习者更准确地理解编译原理的各种概念和算法,例如文法、自动机、LL(1)分析器、LR分析器等等。 总之,编译原理笔记 pdf是一本非常实用、有价值的学习资料,它对于那些正在学习或者准备学习编译原理的人来说,是一本非常有趣和有用的书籍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值