编译原理及实践 编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language)编写的程序作为输入,而产生用目标语言(target language)编写的等价程序。通常地,源程序为高级语言(high-level language),如 C 或 C++,而目标语言则是目标机器的目标代码(object code),也就是写在计算机机器指令中的用于运行的代码。 编译器是一个相当复杂的程序,其代码的长度可从 10,000 行到 1,000,000 行不等。编写甚至读懂这样的一个程序都非易事,大多数的计算机科学家和专业人员也从来没有编写过一个完整的编译器。但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应掌握编译器的基本结构和操作。 编译器的历史可以追溯到 20 世纪 40 年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。开始时,这些程序都是用机器语言(machine language)编写的。机器语言就是表示机器实际操作的数字代码,例如:C7 06 0000 0002 表示在 IBM PC 上使用的 Intel 8x86 处理器将数字 2 移至地址 0 0 0 0(16 进制)的指令。 当然,编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language)代替了。在汇编语言中,都是以符号形式给出指令和存储地址的。例如,汇编语言指令 MOV X, 2 就与前面的机器指令等价(假设符号存储地址 X 是 0 0 0 0)。汇编程序(assembler)将汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。 汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。 很明显,发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式 x = 2。 在本书中,我们将讨论编译器的基本结构和操作,以及编译器在实践中的应用。我们还将讨论编译器设计的基本原则和技术,包括自动机原理、翻译步骤、数据结构和语言设计等方面的知识。 编译器的结构可以分为三个主要部分:词法分析、语法分析和代码生成。在词法分析阶段,编译器将源程序的字符流转换为一个符号流。在语法分析阶段,编译器将符号流转换为一个抽象语法树。在代码生成阶段,编译器将抽象语法树转换为目标语言的代码。 在编译器设计中,自动机原理是一个非常重要的概念。自动机原理是研究自动机的理论和方法的学科,自动机是可以根据一定的规则和状态来执行操作的机器。自动机原理是编译器设计的基础,因为编译器需要根据一定的规则和状态来翻译源程序。 在编译器设计中,还需要考虑到翻译步骤的问题。翻译步骤是指编译器将源程序翻译为目标语言的过程。在这个过程中,编译器需要对源程序进行词法分析、语法分析和语义分析,然后将源程序翻译为目标语言。 数据结构是编译器设计的另一个重要方面。数据结构是指编译器用来存储和处理数据的方式。在编译器设计中,需要选择适合的数据结构来存储和处理源程序和目标程序。 语言设计是编译器设计的最后一个重要方面。语言设计是指设计和实现编译器的语言结构和语法规则的过程。在这个过程中,需要考虑到语言的语法、词法和语义等方面的规则和约束。 在本书中,我们还将讨论编译器设计中的其他问题,例如自举和移植的问题。在自举问题中,需要考虑到编译器如何使用自己的语言来编译自己。在移植问题中,需要考虑到编译器如何在不同的机器和操作系统上运行。 本书将为读者提供一个系统的编译器设计的知识体系,包括编译器的基本结构和操作、自动机原理、翻译步骤、数据结构和语言设计等方面的知识。


















剩余382页未读,继续阅读


- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- ytsteven_easyuseai_29388_1755583651296.zip
- 2025届浙江大学软件学院AI夏令营考核项目_包含Diffusion模型DDPM和DDIM与GAN模型EigenGAN的人脸生成对比实验_以及基于大模型文心一言的医疗智.zip
- beihanyu314_a_29388_1755583689244.zip
- wangguoshuang_Book-Pricing-System-Based-on-Python-3_7244_1755584812611.zip
- 保险行业客户信息管理及保单跟进系统_保险客户管理_保单到期提醒_业务员签单统计_Excel数据导入导出_基于宏达数据库平台开发_用于保险机构客户信息录入_保单跟进审核_业务数据统计.zip
- 软件工程课程教育云平台系统_面向高校软件工程课程的一体化教学与实践平台_整合学习管理与开发环境功能_支持自动化课程管理_作业评审_成绩统计_项目版本控制_分支管理_代码比对_构建部.zip
- 基于Python开发的运动热量计算与健康管理应用程序_卡路里计算器_运动热量算法_运动数据记录与日志管理_健康生活方式辅助工具_15a版本使用指南_MPL开源许可_支持多种运动方式.zip
- 基于PMP挣值管理理论的软件开发外包项目工时估算与进度监控系统_项目挣值估算工具_软件开发外包工时管理_人力资源投入分配_任务分解结构WBS管理_计划工时PV估算_实际工时.zip
- 2022中软杯A9智能创作平台标题生成算法模型_基于bert4keras与T5-pegasus的中文标题生成深度学习模型_使用jieba分词器优化中文预训练任务_支持ONNX模型导.zip
- 基于PaddlePaddle深度学习框架与PaddleSeg语义分割工具链的作物根系表型智能分析系统_集成U-Net_U-Net3_U2-Net等先进分割模型_支持根系图像智能分.zip
- shaweiwei_happy-chat_11052_1755584827725.zip
- 船舶航运信息管理系统_基于宏达数据库平台的船舶航运全流程管理软件_船舶资料管理_航次信息记录_船员证书管理_货物分类统计_港口航区设置_证书到期提醒_历史航运查询_报表打印功能_企.zip
- 健康护航保盾管理系统_基于Vue和SpringBoot的城乡居民大病保险报销平台_包含系统配置维护_参保管理_大病登记_保险审核五大模块_实现医保卡管理_医疗费用核算_报销比例计算.zip
- 基于SPMS开源项目管理系统的高效协同开发平台_包含开发计划文档部署说明指南和常见问题解答的全套解决方案_专为技术团队打造的敏捷开发与项目管理工具_采用SVG矢量图形技术构建品牌.zip
- 种植业全流程信息化管理系统_蔬菜瓜果花卉种植管理_大棚种植管理_员工考勤绩效_采购入库出库_库存损耗监控_成品采摘销售_财务收支统计_适用于中小型种植企业的综合管理解决方案_基于宏.zip
- 基于跨学科能力构建的大学生软技能培养创新平台_融合心理学测评与AI学习路径规划_通过游戏化任务系统与同伴互评机制提升沟通协作能力_适用于高校第二课堂与职场新人培训_采用机器学习算法.zip


