编译原理 第一章 总论

本文详细解读了编译器的基本概念、构成、重要过程及其目的,包括词法分析、语法分析、语义分析、代码优化等核心环节。探讨了编译器如何通过预处理器、汇编器、链接器和加载器实现程序从源代码到目标代码的转换,以及不同阶段的具体任务和相互作用。同时,阐述了编译器设计的目标和软件生成率的关键考量因素,提供了对编译原理全面深入的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总论:下面是自己对编译原理整个过程中所用的一些重要术语的理解

编译原理就是研究编译器的原理

编译器(compiler)是完成将程序翻译成一种能够被计算机执行的形式的软件系统,而编译原理就是编写编译器的原理。

编译器是程序:用于阅读以某一种语言编写的程序,并翻译成另一种。编译的工作是找错。

解释器:用户输入直接输出,逐个语句执行。

对比:编译器的目标程序比解释器快,解释器的错误诊断效果好。


编译器构成

预处理器(preprocessor):把程序整合到一起(转化宏)

汇编器(assembler):处理汇编语言

链接器(linker):把文件整合成一个

加载器(loader):把目标文件放到内存中

编译器结构:

分析(analysis):程序的编译过程创建中间表示,并收集有关源程序信息放到符号表(symbol table)的数据结构中,和中间表示一起给后端。(前端front end)

综合(synthesis):生成目标程序。(后端back end)



编译原理的重要过程

词法分析lexical analysis:

例:position=initial+rate*60

词素(lexeme):position->词法单元<id,1> id标识符(identifier),1指符号表中position的条目,条目存放的是标识符信息

词素:=+* 60相应映射成词法单元

词素initial->词法单元<id,2> rate->词法单元<id,3>

空格过滤。

词法单元序列:<id,1><=><id,2><+><id,3><*><60>

语法分析syntax analysis:创建树形的中间表示,表示方式为语法树(syntax tree)

语义分析器semantic analyzer:检查源程序是否和语言定义的语义一致。其中需要做类型检查(type checking)(例如+两边的变量能不能+,数组下标是不是整型),自动类型转换(coercion)

代码优化(改进中间代码):更快、更短、能耗更低,优化编译器完成此工作。

符号表:记录变量的各个属性。


编译器的目的

优化编译器的目标:正确、性能、时间、设计和维护。

软件生成率(检查错误):类型检查、边界检查、内存管理。


例子:


摘录自龙书,初学者,有理解不到位的地方欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值