文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.3 ELF文件格式

2.3  ELF文件格式          ELF文件格式描述了Linux下可执行文件、可重定位目标文件、共享目标文件、核心转储文件的存储格式。本书设计的编译系统只关心可执行文件和可重定位目标文件的格式,如果要设计动态链接器的话,则还需要了解共享目标文件的内容。   ELF文件信息的一般存储形式如图2-11所示。   在Linux下,可以使用readelf命...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.2 x86指令格式

2.2  x86指令格式          编译系统的汇编器需要把编译器生成的汇编语言程序转化为x86格式的二进制机器指令序列,然后将这些二进制信息存储为ELF格式的目标文件。因此需要先了解二进制机器指令的基本结构。   如图2-10所示,在x86的指令结构中,指令被分为前缀、操作码、ModR/M、SIB、偏移量和立即数六个部分。本书设计的编译器生成的汇编指...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.6 编译优化

2.1.6  编译优化          现代编译器一般都包含优化器,优化器可以提高生成代码的质量,但会使代码生成过程变得复杂。一般主流的工业化编译器会按照如图2-9所示结构进行设计。   现代编译器设计被分为前端、优化器和后端三大部分,前端包含词法分析、语法分析和语义分析。后端的指令选择、指令调度和寄存器分配实际完成代码生成的工作,而优化器则是对中间代码进...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.5 代码生成

2.1.5  代码生成             代码生成是编译器的最后一个处理阶段,它根据识别的语法模块翻译出目标机器的指令,比如汇编语言,这一步称为使用基于语法制导的方式进行代码生成。见图2-8。   为了便于理解,本书采用常见的Intel格式汇编语言程序作为编译器的输出。继续引用赋值语句“var2=var1+100;”作为例子,若将之...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析

2.1.4  语义分析          编译原理教材中,将语言的文法分为4种:0型、1型、2型、3型,并且这几类文法对语言的描述能力依次减弱。其中,3型文法也称为正规文法,词法分析器中有限自动机能处理的语言文法正是3型文法。2型文法也称为上下文无关文法,也是目前计算机程序语言所采用的文法。顾名思义,程序语言的文法是上下文无关的,即程序代码语句之间在文法层次...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.3 符号表管理

2.1.3  符号表管理           符号表是记录符号信息的数据结构,它使用按名存取的方式记录与符号相关的所有编译信息。编译器工作时,少不了符号信息的记录和更新。在本书定义的高级语言中,符号存在两种形式:变量和函数。前者是数据的符号化形式,后者是代码的符号化形式。语义分析需要根据符号检测变量使用的合法性,代码生成需要根据符号产生正确的地址,...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.2 语法分析

2.1.2  语法分析           词法分析器的输入是文本字符串,语法分析器的输入则是词法分析器识别的词法记号序列。语法分析器的输出不再是一串线性符号序列,而是一种树形的数据结构,通常称之为抽象语法树。见图2-4。   继续前面赋值语句的例子,我们可以先看看它可能对应的抽象语法树,如图2-5所示。   图2-5  抽象语...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1.1 词法分析

2.1.1  词法分析          编译器工作之前,需要将用高级语言书写的源程序作为输入。为了便于理解,我们使用C语言的一个子集定义高级语言,本书后续章节的例子都会使用C语言的一些基本语法作为示例。现在假定我们拥有一段使用C语言书写的源程序,词法分析器通过对源文件的扫描获得高级语言定义的词法记号。所谓词法记号(也称为终结符),反映在高级语言语法中就是对...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接2.1 编译程序的设计

第2章    编译系统设计    麻雀虽小,五脏俱全。 ——《围城》       一个完善的工业化编译系统是非常复杂的,为了清晰地描述它的结构,理解编译系统的基本流程,不得不对它进行“大刀阔斧”地删减。这为自 己动手实现一个简单但基本功能完整的编译系统提供了可能。虽然本书设计的是简化后的编译系统,但保留了编译系统的关键流程。正所 谓“麻雀虽小,五脏俱全”,本章从全局的角度描述了...

文章 2022-02-15 来自:开发者社区

自己动手构造编译系统:编译、汇编与链接1.5 本章小结

1.5  本章小结   本章从编程最基本的话题聊起,描述了初学者接触程序时可能遇到的疑惑,并从编程实践经验中探索代码背 后的处理机制。然后,使用最简单的“Hello World !”程序展现主流编译器GCC对代码的处理流程。最后, 我们在工业化编译系统的基础上做了一定的限制,提出了本书编译系统需要实现的功能。在接下来的章节 中,会对本书中编译系统的设计和实现细节详细阐述。

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。